首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么openMP不能工作?

为什么openMP不能工作?
EN

Stack Overflow用户
提问于 2017-11-28 05:24:48
回答 1查看 67关注 0票数 0

我正在做一些基本的练习,以便在C++和OpenMP中获得并行化的诀窍,而且我很难让它工作起来。这是我写的代码:

代码语言:javascript
运行
复制
std::cout << "omp_get_max_threads(): " << omp_get_max_threads() << std::endl;

for(int n=0; n<25; ++n){
  std::cout << n << " " << omp_get_num_threads() << " " << std::flush;
}
std::cout << std::endl;

#pragma omp for
for(int n=0; n<25; ++n){
  std::cout << n << " " << omp_get_num_threads() << " " << std::flush;
}
std::cout << std::endl;

我每次得到的输出是:

代码语言:javascript
运行
复制
omp_get_max_threads(): 4
0-1 1-1 2-1 3-1 4-1 5-1 6-1 7-1 8-1 9-1 10-1 11-1 12-1 13-1 14-1 15-1 16-1 17-1 18-1 19-1 20-1 21-1 22-1 23-1 24-1 
0-1 1-1 2-1 3-1 4-1 5-1 6-1 7-1 8-1 9-1 10-1 11-1 12-1 13-1 14-1 15-1 16-1 17-1 18-1 19-1 20-1 21-1 22-1 23-1 24-1

这个想法是有一个非平行循环的基线,然后是一个比较它的平行循环。如果它正常工作,我会期待一个更像这样的输出:

代码语言:javascript
运行
复制
omp_get_max_threads(): 4
0-1 1-1 2-1 3-1 4-1 5-1 6-1 7-1 8-1 9-1 10-1 11-1 12-1 13-1 14-1 15-1 16-1 17-1 18-1 19-1 20-1 21-1 22-1 23-1 24-1 
17-4 11-4 4-4 3-4 8-4 0-4 23-4 24-4 1-4 2-4 21-4 12-4 20-4 9-4 7-4 19-4 5-4 22-4 15-4 10-4 16-4 13-4 14-4 6-4 18-4 

也许不是,所以混乱了,但至少不完全是顺序的,并且使用了多个线程。

我正在使用-fopenmp标记进行编译。有人知道我可能做错了什么吗?

EN

回答 1

Stack Overflow用户

发布于 2017-11-29 00:46:21

根据高性能马克的评论,这是答案,以防其他人有类似的问题。

我用的是#pragma omp parallel for而不是#pragma omp parallel,它运行得很好

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47524530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档