在使用 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++) { ... }

-> 没有错误,但是循环没有产生输出,很奇怪。