gpt4 book ai didi

parallel-processing - omp critical 和 omp single 之间的区别

转载 作者:行者123 更新时间:2023-12-01 22:41:02 28 4
gpt4 key购买 nike

我试图了解 #pragma omp critical 之间的确切区别和 #pragma omp single在 OpenMP 中:

Microsoft 对这些的定义是:

  • Single:让您指定应在其上执行一段代码
    单线程,不一定是主线程。
  • 关键:指定代码只在一个线程上执行
    时间。

  • 因此,这意味着在两者中,之后的确切代码部分将仅由一个线程执行,而其他线程将不会进入该部分,例如如果我们打印一些东西,我们会在屏幕上看到一次结果,对吗?

    区别如何?看起来很关键要注意执行时间,但不是单一的!但我在实践中没有看到任何区别!这是否意味着对其他线程(不进入该部分)的一种等待或同步被认为是关键的,但没有任何东西可以将其他线程保持在单一状态?它如何在实践中改变结果?

    我很感激是否有人可以向我澄清这一点,尤其是通过一个例子。谢谢!

    最佳答案

    singlecritical是两个 非常不同 事物。正如你提到的:

  • single指定应执行一段代码 通过单线程 (不一定是主线程)
  • critical指定执行代码 一次一个线程

  • 所以前者会被执行 只有一次 而后者将被执行 与线程的次数一样多 .

    例如下面的代码

    int a=0, b=0;
    #pragma omp parallel num_threads(4)
    {
    #pragma omp single
    a++;
    #pragma omp critical
    b++;
    }
    printf("single: %d -- critical: %d\n", a, b);

    将打印
    single: 1 -- critical: 4

    我希望你现在能更好地看到差异。

    为了完整起见,我可以补充一点:
  • mastersingle 非常相似有两个区别:
  • master仅在 single 时由 master 执行可以由首先到达该区域的线程执行;和
  • single在区域完成时有一个隐式屏障,所有线程都在那里等待同步,而 master没有。
  • atomiccritical 非常相似,但仅限于选择简单的操作。

  • 我添加了这些精度,因为这两对指令通常是人们倾向于混淆的……

    关于parallel-processing - omp critical 和 omp single 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33441767/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com