免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1923 | 回复: 5

[C++] openmp咋就这么不好调试呢? [复制链接]

论坛徽章:
0
发表于 2013-05-13 15:53 |显示全部楼层

  
double x,y,A=0;
#pragma omp parallel for num_threads(2) private(x,y) reduction(+:A)
      for(m=1;m<=num;m++)
        {
          x=m*1.0;         
          for(n=1;n<=num;n++)
                {
               y=n*1.0;
              A=A+(x+y);        
              }
        }
      cout<<"A: "<<A<<endl;

各位大侠,小弟刚学openmp,我就想求个加和的值怎么就不对呢?

论坛徽章:
4
白羊座
日期:2013-09-17 21:59:30技术图书徽章
日期:2013-10-12 22:16:03白羊座
日期:2013-10-14 11:01:40双子座
日期:2013-12-17 18:26:39
发表于 2013-05-13 22:12 |显示全部楼层
我测试了一下,结果没问题。

论坛徽章:
4
白羊座
日期:2013-09-17 21:59:30技术图书徽章
日期:2013-10-12 22:16:03白羊座
日期:2013-10-14 11:01:40双子座
日期:2013-12-17 18:26:39
发表于 2013-05-13 22:20 |显示全部楼层
我测试了3个数:
2为12;10为1100; 100 为1.01e+06;
  1. #include <stdlib.h>
  2. #include <iostream>

  3. int main(int argc, char*argv[])
  4. {
  5.     if (argc != 2)
  6.     {
  7.         std::cout << "use: " << argv[0] << " num" << std::endl;
  8.         return 1;
  9.     }

  10.     int num = atoi(argv[1]);
  11.     int m, n;
  12.     double x,y,A=0;
  13. #pragma omp parallel for num_threads(2) private(x,y) reduction(+:A)
  14.     for(m=1;m<=num;m++)
  15.     {
  16.         x=m*1.0;
  17.         for(n=1;n<=num;n++)
  18.         {
  19.             y=n*1.0;
  20.             A=A+(x+y);
  21.         }
  22.     }
  23.     std::cout<< "A: " << A << std::endl;
  24.     return 0;
  25. }
复制代码

论坛徽章:
0
发表于 2013-05-16 11:37 |显示全部楼层
回复 3# 井蛙夏虫
您是怎么编译的呢?要是单核运行,结果没有错误,但是多核心的话,每次结果都不一样!

   

论坛徽章:
4
白羊座
日期:2013-09-17 21:59:30技术图书徽章
日期:2013-10-12 22:16:03白羊座
日期:2013-10-14 11:01:40双子座
日期:2013-12-17 18:26:39
发表于 2013-05-16 12:13 |显示全部楼层
回复 4# hjnln85
我编译的时候忘了带-fopenmp,结果被忽略了。
你的程序是有问题,你的private(x,y)应当换为private(x,y,n)。
n也应当为私有,否则所有线程共用一个n。


   

论坛徽章:
0
发表于 2013-05-16 13:40 |显示全部楼层
回复 5# 井蛙夏虫
你是对的!得把n设置为私有的

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP