OpenMP 和 STL 风格

发布于 2024-10-13 18:40:03 字数 611 浏览 5 评论 0原文

我正在尝试使用 openMP 并行化我的程序。该程序大量使用 STL 迭代器。这是说的 openMP 3.0 可以处理这个问题:

std::vector<int> N(2*N_max+1);

std::vector<int>::const_iterator n,m;
#pragma omp parallel for
for (n=N.begin(); n!=N.end(); ++n){
     //Task to be in parallel
};

但我收到以下错误:

error: invalid controlling predicate

我正在使用 gcc 4.5.0,(openMP3 在 4.4.0 中实现),我的构建字符串是:

g++  -O0 -g3 -Wall -c -fmessage-length=0 -fopenmp -MMD -MP  

I'm trying to parallelize my program with openMP. The program is using STL-iterators heavily. It is said that openMP 3.0 can deal with this:

std::vector<int> N(2*N_max+1);

std::vector<int>::const_iterator n,m;
#pragma omp parallel for
for (n=N.begin(); n!=N.end(); ++n){
     //Task to be in parallel
};

But I got the following error:

error: invalid controlling predicate

I'm using gcc 4.5.0, (openMP3 implemented in 4.4.0) and my build string is:

g++  -O0 -g3 -Wall -c -fmessage-length=0 -fopenmp -MMD -MP  

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

枫林﹌晚霞¤ 2024-10-20 18:40:03

标准 OpenMP 通常不支持 C++ 迭代器。该标准要求迭代器是具有恒定随机访问时间的随机访问迭代器。它还只允许在 for 的测试表达式中使用 <<=>>=循环,但不是 !=

如果您大量使用迭代器和 STL,那么使用线程构建块可能会更好。

Standard OpenMP doesn't bear with C++ iterators in general. The standard requires iterators to be random access iterators with constant time for random access. It also only permits < and <= or > and >= in test expressions of for loops, but not !=.

If you are using iterators and STL heavily, you might be better off with Thread building blocks.

海之角 2024-10-20 18:40:03

不幸的是,OpenMP V3.0 规范并未将“!=”作为规范 for 循环的合法语法的一部分。但是,如果您可以访问最新的英特尔编译器,他们允许将其作为扩展。

Unfortunately the OpenMP V3.0 spec didn't include "!=" as part of the legal syntax for a canonical for loop. However, if you have access to a recent Intel compiler they allowed it as an extension.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文