【问题标题】:Critical section inside Parallel block in OpenMPOpenMP 中并行块内的关键部分
【发布时间】:2019-02-06 14:26:14
【问题描述】:

在我看来,在 OpenMP 中拥有一个带有并行块的临界区是没有意义的!我可能只是写一个简单的串行循环,对吗?

在下面的(简单的)示例中,而不是

1.

  !$omp critical
            !$ thread_num = omp_get_thread_num()
            print *, "Hello world from thread number ", thread_num
        !$omp end critical
  !$omp end parallel

2.

    do i=1,num_threads
    print *, "Hello world from thread number ", thread_num
    end do

话虽如此,我理解其中的区别:1. 使用不同的线程,而 2. 不使用。

是否存在一个重要的上下文,前者实际上可能比后者提供速度优势?

【问题讨论】:

    标签: fortran openmp


    【解决方案1】:

    $omp critical 指定代码一次由一个线程执行。因此,您的两个示例都不是并行运行,而是以串行方式运行。在wiki 上清楚地描述了使用临界区的意义,因此请查看那里以查找详细信息(典型情况是所有线程需要等待某个公共值(之前以并行方式计算,例如某种元素总和)以继续计算)

    【讨论】:

      猜你喜欢
      • 2013-03-04
      • 2017-03-17
      • 2014-04-20
      • 1970-01-01
      • 2015-01-27
      • 2013-04-12
      • 1970-01-01
      • 2013-03-27
      • 1970-01-01
      相关资源
      最近更新 更多