带有OPENMP的Fortran嵌套循环

时间:2014-11-10 13:30:55

标签: loops fortran openmp

我的(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

但是,如果我这样做,我会从串行案例中得到完全不同的结果。如果问题太简单,我道歉,但我无法找到一个合适的例子来帮助解决我的问题。您能推荐一个解决方案或提供一个例子吗?

1 个答案:

答案 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