Openmp 多线程并行计算。为什么结果每次run出来不一样?
各位,我遇到下面这样一个问题,困扰很久没有解决。不知哪位可以慷慨赐教?
我用了两个线程把计算任务分为相互独立的两个部分。分别完成之后把结果合并成为完整的结果。但两个部分内部的语句,如 do while...end do中的语句不是相互独立的,即有上下关联。
结果是,如果我计算简单的问题,最终得到正确结果,但如果计算比较复杂的例子,得到的计算结果不完整。看上去像是有些计算循环没有完成。
请问这是do while引起的吗?还是可能其他的原因? 可是我并不知道循环次数,只能用do while。而且,我只是各用一thread完成一半的工作,至于每一半里面我不需要并行。
program test
use omp_lib
......
call omp_set_num_threads (2)
......
!$OMP PARALLEL
if (omp_get_thread_num()==0) then
do while(条件)
这里调用了一些subroutine.完成计算并储存结果到矩阵X1
end do
else
do while(条件)
调用同样的subroutine,但用了不同的变量。完成计算并储存结果到矩阵X2。
end do
end do
!$OMP BARRIER
!$OMP END PARALLEL
合并X1和X2,输出结果。