在我看来,在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.不使用。
在不平凡的环境中,前者实际上可能比后者具有速度优势吗?
答案 0 :(得分:2)
JOIN
指定代码一次由一个线程执行。因此,您的两个示例都不是并行运行,而是以串行方式运行。在wiki上清楚地描述了使用关键部分的意义,因此请在那里查找详细信息(典型情况是所有线程需要等待某个公共值(以并行方式计算,例如某种元素的总和)才能继续计算)