openMP随线程数耗时成倍增加

Susurrant 2015-03-28 10:43:40

int main()
{
A a("p.txt", "nb.txt"); //读数据
S s(a); //数据预处理,得到4个子任务

#pragma omp parallel for num_threads(4) firstprivate(a, s)
for (int i = 0; i < 4; i++) //并行处理四个子任务
{
AS as(a, s.cluster, i); //用到之前的a和s,对它们只读不写
}

return 0;
}


得到的4个任务,串行运行1个任务用时是400ms,总用时1600ms。
现在:
用openMP并行,for循环用1个线程执行,每个任务耗时400ms(和串行一样);用2个线程执行,每个耗时800ms;用四个执行,每个耗时2000ms
或者说并行运行时间和串行一样,甚至更多了。

运行电脑为两个核,不知道为什么会这样
...全文
346 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
LoganINTC 2015-03-30
  • 打赏
  • 举报
回复
Hello, OpenMP运行时创建线程是有隐形的时间开销的,在每个线程工作量不大的情况下用这种方式来多线程任务不太实际。建议将每个for循环中的计算任务加大计算量。而且电脑两个核的话,此时创建两个OpenMP线程为最宜,线程数过多的话,会造成额外的操作系统调度线程的开销。 Thank you. -- Logan Intel Developer Support Please participate in our redesigned community support web site: User forums: http://software.intel.com/en-us/forums/

2,408

社区成员

发帖
与我相关
我的任务
社区描述
高性能计算
社区管理员
  • 高性能计算社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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