首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OpenACC对OpenMP

OpenACC对OpenMP
EN

Stack Overflow用户
提问于 2018-02-25 09:53:01
回答 2查看 1.1K关注 0票数 1

你好,我测试了OpenACC和OpenMP对什么都没有,但是我得到了奇怪的结果。

  • 代码: #包含 int ( ) { int a,sum=0;(#实用化omp用于/#务实acc并行循环/空)用于(a= 0;a< 2000000000;a=a+1){ sum+=a%2;} printf("sum = %d\n",sum);返回0;}
代码语言:javascript
运行
复制
1. I use subsystem Ubuntu for windows 10 ([https://learn.microsoft.com/en-us/windows/wsl/install-win10](https://learn.microsoft.com/en-us/windows/wsl/install-win10) ) and GCC 7.1(C compiler) and get following result: Nothing = OpenMP(correct result in about 5 sec) ; OpenACC faster, but gave wrong result(0 vs 1 000 000 000)
2. I use VMware with Ubuntu and result is: Nothing gave nothing(program executing infinitely and I just close terminal); OpenACC showed result faster then OpenMP, but showed wrong result again.
3. If I use Intel C++ compiler from console with OpenMP I get about 1.3sec vs ~5 sec in Ubuntu

该怎么办呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-25 10:13:21

您有多个不同的线程覆盖sum,因此得到的结果是错误的。你得告诉它这是个“减价”

代码语言:javascript
运行
复制
#pragma omp parallel for reduction(+:sum)

代码语言:javascript
运行
复制
#pragma acc parallel loop reduction(+:sum)
票数 2
EN

Stack Overflow用户

发布于 2018-05-18 21:12:11

谷歌的“竞赛条件”--事实上,较新版本的PGI OpenACC --足够聪明地检测到给定变量的减少。这并不意味着您应该编写潜在的错误代码。

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

https://stackoverflow.com/questions/48972219

复制
相关文章

相似问题

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