Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran 理解正确使用$omp并行do还原(…)_Fortran_Fortran90_Openmp - Fatal编程技术网

Fortran 理解正确使用$omp并行do还原(…)

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线路

我正试图编写一个程序,利用OpenMP在Fortran 90中计算介于1和某个数
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)