我是OpenMP
的新用户,我正在使用它来实现Sieve of Eratosthenes
,我的代码是:
int check_eratothenes(int *p, int pn, int n)
{
int count = 0;
bool* out = new bool[int(pow(pn, 2))];
memset(out, 0, pow(pn, 2));
#pragma omp parallel
for (int i = 0; i < n; i ++)
{
int j = floor((pn + 1) / p[i]) * p[i];
#pragma omp critical
while (j <= pow(pn, 2))
{
out[j] = 1;
j += p[i];
}
}
#pragma omp parallel
for (int i = pn+1; i < pow(pn, 2); i ++)
{
#pragma omp critical
if (out[i] == 0)
{
//cout << i << " ";
count ++;
}
}
return count;
}
但是,上面的OpenMP
编译指示是错误的。它可以被编译但是当它运行时,需要花费很多时间才能得到结果,因此按CTRL + C
停止。我对如何解决它感到茫然。因为有很多循环和if语句。
提前致谢。