我的(Fortran)代码非常简单。它所做的只是填充一个大数组,这取决于五个(独立!)变量。这是一个简短的例子
do i = 1, imax
do j = 1, jmax
do k = 1, kmax
array(i,j,k) = ! some function of i,j,k
end do
end do
end do
我会使用不同的线程以更快的方式填充数组的值。
我认为实现这一目标的最简单方法是将循环包含在这些命令中
!$ OMP PARALLEL DO
!$ OMP PARALLEL END
但是,如果我这样做,我会从串行案例中得到完全不同的结果。如果问题太简单,我道歉,但我无法找到一个合适的例子来帮助解决我的问题。您能推荐一个解决方案或提供一个例子吗?
答案 0 :(得分:0)
我并不是很清楚地知道发生了什么,但它可能是竞争条件或只是指令的错误声明。试试这个,看它是否有效
!replace ... with variables that are constants as in shared(a,b,c)
!$omp parallel do default(private) shared(...)
do i=1,imax
j=1,jmax
k=1,kmax
array(i,j,k) = ! some function of i,j,k
end do
end do
end do
!$omp end parallel do