Fortran 理解正确使用$omp并行do还原(…)
我正试图编写一个程序,利用OpenMP在Fortran 90中计算介于1和某个数Fortran 理解正确使用$omp并行do还原(…),fortran,fortran90,openmp,Fortran,Fortran90,Openmp,我正试图编写一个程序,利用OpenMP在Fortran 90中计算介于1和某个数n之间的素数。嵌套循环只计算非素数的数字。我想使用一个omp并行do来加速这个过程。据我所知,因为我只是在计算非素数的数字,所以使用类似于的东西是合适的$omp并行do缩减(+:非素数)。当我在没有的情况下串行运行下面的代码时$omp行我得到以下输出 Primes: 5134 OpenMP time elapsed 0.49368596076965332 但是当我包括了$我收到的omp线路
n
之间的素数。嵌套循环只计算非素数的数字。我想使用一个omp并行do
来加速这个过程。据我所知,因为我只是在计算非素数的数字,所以使用类似于的东西是合适的$omp并行do缩减(+:非素数)
。当我在没有的情况下串行运行下面的代码时$omp行
我得到以下输出
Primes: 5134
OpenMP time elapsed 0.49368596076965332
但是当我包括了$我收到的omp线路
Primes: -1606400834
OpenMP time elapsed 0.37933206558227539
我在这里正确使用了并行do
吗?(显然不是,但为什么?)谢谢
您不必在任何地方初始化
非素数,它是未定义的。OpenMP Reduce的使用是正常的。索引j
应该标记为private,我通常将所有索引标记为private,但这不是必需的
not_primes = 0
!$omp parallel do reduction(+:not_primes) private(i,j)
not_primes = 0
!$omp parallel do reduction(+:not_primes) private(i,j)