为什么并行还更慢啊?

godss 2007-06-27 09:15:18
#pragma omp parallel sections // parallel region 1
{
#pragma omp section
{
for(i=0 ; i<n/2 ; i++)
{
double t=a[i]*a[i+1]*a[i+2]*a[i+3];
if( max1<t )
max1=t;
}
printf("num of t in section1 %d\n",omp_get_num_threads());
}
#pragma omp section
{
for(j=n/2 ; j<n-3 ; j++)
{
double t=a[j]*a[j+1]*a[j+2]*a[j+3];
if( max2<t )
max2=t;
}
printf("num of t in section2 %d\n",omp_get_num_threads());
}
}
max=max1>max2?max1:max2;
printf("%lf\n",max);
printf("%d\n\n",GetTickCount()-t1);

这段比完全串行花费的时间好象还多4倍……谁能帮帮我啊
...全文
636 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
aero_boy 2007-07-17
  • 打赏
  • 举报
回复
你在每一次循环中都用到了另一个区(数组的不同位置)的数据
a[i]*a[i+1]*a[i+2]*a[i+3]

在有多个线程需要访问一个数据中的同一位置的数据时,就需要在多处线程之间进行同步,同步的开销是很大的,只有尽量减少这总开销,并行的速度才会提高。
godss 2007-07-12
  • 打赏
  • 举报
回复
其实我用的是多核心……而且开了omp的……好委屈的……
IntelSupport 2007-07-11
  • 打赏
  • 举报
回复
楼上的说得很对, 多核上面多个线程才能真正并行起来。 单核上面多线程肯定比单线程版本慢。
teal 2007-07-06
  • 打赏
  • 举报
回复
如果只有一个CPU的系统,多线程是要比单线程慢的。

采用多线程的方式是为了让每个线程同时运行在不同的cpu上,以此来加快速度。
单cpu采用多线程,不但 不能提速,反而会增加调度开销。

568

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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