在使用 OpenMP 的 for 循环中使用 "unsigned long long" 作为迭代范围
Using "unsigned long long" as iteration-range in for-loop using OpenMP
如果我这样做,效果很好:
#pragma omp parallel for
for (int i = 1; i <= 200; i++) { ... }
这仍然可以正常工作
#pragma omp parallel for
for (unsigned long long i = 1; i <= 200; i++) { ... }
但这不起作用
#pragma omp parallel for
for (unsigned long long i = 1; i <= LLONG_MAX; i++) { ... }
-> 编译器错误:无效的控制谓词
LLONG_MAX 来自
#include <limits.h>
g++ --version -> g++ (tdm64-1) 5.1.0
据说openmp 3.0可以处理无符号整数类型。
我搜索了很多这个问题,但没有成功。他们都使用 int 作为迭代变量。
有人知道解决方案吗?
我把程序改为:
unsigned long long n = ULLONG_MAX;
#pragma omp parallel for
for (unsigned long long i = 1; i < n; i++) { ... }
它现在似乎可以工作了。谢谢杰夫的提示。
我之前尝试过:
for (auto i = 1; i < n; i++) { ... }
-> 没有错误,但是循环没有产生输出,很奇怪。
如果我这样做,效果很好:
#pragma omp parallel for
for (int i = 1; i <= 200; i++) { ... }
这仍然可以正常工作
#pragma omp parallel for
for (unsigned long long i = 1; i <= 200; i++) { ... }
但这不起作用
#pragma omp parallel for
for (unsigned long long i = 1; i <= LLONG_MAX; i++) { ... }
-> 编译器错误:无效的控制谓词
LLONG_MAX 来自
#include <limits.h>
g++ --version -> g++ (tdm64-1) 5.1.0
据说openmp 3.0可以处理无符号整数类型。
我搜索了很多这个问题,但没有成功。他们都使用 int 作为迭代变量。 有人知道解决方案吗?
我把程序改为:
unsigned long long n = ULLONG_MAX;
#pragma omp parallel for
for (unsigned long long i = 1; i < n; i++) { ... }
它现在似乎可以工作了。谢谢杰夫的提示。
我之前尝试过:
for (auto i = 1; i < n; i++) { ... }
-> 没有错误,但是循环没有产生输出,很奇怪。