openmp并行比串行时间还长,怎么回事

a845613099 2014-09-24 10:23:34
// 6-32.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <Windows.h>
#include <time.h>
#include <omp.h>

static long num_steps=100000000;
double step;
#define NUM_THREADS 2

int _tmain(int argc, _TCHAR* argv[])
{
clock_t t1,t2;
double pi=0.0,sum[NUM_THREADS],sum2=0.0;
step=1.0/(double) num_steps;
omp_set_num_threads(NUM_THREADS);
t1=clock();
#pragma omp parallel
{
double x;
int i;
int id=omp_get_thread_num();
for(i=id,sum[id]=0.0;i<num_steps;i=i+NUM_THREADS)
{
x=(i+0.5)*step;
sum[id]+=4.0/(1.0+x*x);

}
}
for(int i=0;i<NUM_THREADS;i++)
{
pi+=sum[i]*step;
}
t2=clock();
printf("PI=%.15f\n",pi);
printf("parallel time:%d\n",t2-t1);

double x;
t1=clock();
for(int i=0;i<num_steps;i++)
{
x=(i+0.5)*step;
sum2=sum2+4.0/(1.0+x*x);

}
pi=step*sum2;
t2=clock();
printf("PI=%.15f\n",pi);
printf("serial time:%d\n",t2-t1);

system("pause");
return 0;
}
结果
...全文
450 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
a845613099 2014-10-10
  • 打赏
  • 举报
回复
解决了 在并行那一块里加个变量 出来再付给sum 硬件问题
赵4老师 2014-09-24
  • 打赏
  • 举报
回复
输出Release版了吗?
FancyMouse 2014-09-24
  • 打赏
  • 举报
回复
clock()算的是cpu时间,总工作量不变的话并行肯定要比串行要大啊。
赵4老师 2014-09-24
  • 打赏
  • 举报
回复
莫非你CPU是单核的?

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧