使用“unsigned long long”作为使用OpenMP的for循环中的迭代范围

时间:2015-07-16 22:52:45

标签: for-loop g++ iteration openmp long-integer

如果我这样做,它可以正常工作:

#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++) { ... }

- &GT;编译器错误:控制谓词无效

LLONG_MAX来自

#include <limits.h>

g ++ --version - &gt; g ++(tdm64-1)5.1.0

据说openmp 3.0可以处理无符号整数类型。

我搜索了很多这个问题,没有成功。它们都使用int作为迭代变量。 有人知道解决方案吗?

1 个答案:

答案 0 :(得分:0)

我把程序改为:

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

- &GT;没有错误,但循环没有产生输出,非常奇怪。