gpt4 book ai didi

c++ - OpenMP 导致内部编译器错误

转载 作者:行者123 更新时间:2023-11-30 05:10:37 26 4
gpt4 key购买 nike

我写了一个小程序来测试 OpenMP 的性能增益。我使用 Microsoft Visual Studio 进行编译。

void findAllPrimesUntilX() {
for (int i = 2; i <= upToXthPrimes; i++) {
if (i % 500 == 0) std::cout << "First " << i * 500 << "primes have been checked\n";
if (checkPrime(i)) primes.push_back(i);
}
std::cout << "All primes have been calculated!\n";
}

这是调用“checkPrime(i)”的函数,如下所示:

bool checkPrime(int n) {
if (n == 2) return true;
if (n < 2 || n % 2 == 0) return false;
#pragma omp parallel for
for (int i = 3; i <= static_cast<int>(sqrt(n)); i += 2) {
if (n % i == 0) return false;
}
return true;
}

我现在收到“C1001 错误:编译器中发生内部错误。”

删除#pragma omp parallel for 解决了这个问题。那么这是怎么回事?

提前致谢

关注

最佳答案

OpenMP 旨在生成大量线程,这些线程可以同时执行多个独立操作。在您的情况下,我认为错误是由于产生了许多线程,但只有其中一些线程被 return false; 语句过早终止。不要立即返回 false,而是尝试设置一个 bool 变量:

bool checkPrime(int n) {
if (n == 2) return true;
if (n < 2 || n % 2 == 0) return false;
bool prime = true;

#pragma omp parallel for
for (int i = 3; i <= static_cast<int>(sqrt(n)); i += 2) {
if (n % i == 0) prime = false;
}

return prime;
}

此外,请注意,使用 OpenMP 需要您使用额外的标志进行编译。如果遇到编译器错误,您可能已经正确地执行了此操作。

关于c++ - OpenMP 导致内部编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45596303/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com