OpenMP并行块中的关键部分

时间:2019-02-06 05:04:39

标签: fortran openmp

在我看来,在OpenMP中使用并行块阻止关键部分是没有意义的!我可能会写一个简单的串行do循环好吗?

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

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.不使用。

在不平凡的环境中,前者实际上可能比后者具有速度优势吗?

1 个答案:

答案 0 :(得分:2)

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