首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OpenMP嵌套并行化

OpenMP嵌套并行化
EN

Stack Overflow用户
提问于 2014-11-10 18:58:21
回答 1查看 125关注 0票数 0

我正在使用一个已经被OpenMP并行化的库。问题是,2-4核似乎足够它正在进行的处理。使用4个以上的核心几乎没有什么不同。

我的代码是这样的:

代码语言:javascript
运行
复制
for (size_t i=0; i<4; ++i)
    Call_To_Library (i, ...);

由于4个内核似乎足够库(即,4个核心应该在Call_To_Library中使用),而且我正在使用一个16核机器,我也打算并行我的for循环。请注意,这个for最多包含3-4次迭代。

将这个外部并行化的最佳方法是什么?我也可以使用OpenMP吗?使用嵌套并行是最佳实践吗?我正在调用的库已经使用了OpenMP,并且我不能修改它的代码(无论如何,它不会很简单)。

PS。即使外部循环只包含4个迭代,它也是值得并行的。每次调用库都需要4到5秒。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-10 19:05:28

如果此循环的迭代之间不存在依赖关系,则可以这样做:

代码语言:javascript
运行
复制
 #pragma omp for schedule(static)
 for (size_t i=0; i<4; ++i)
    Call_To_Library (i, ...);

如果像您所说的那样,每次调用Call_To_Library花费这么长的时间,那么使用嵌套的OpenMP运算符的开销可能是可以忽略不计的。

此外,您还说您无法控制在Call_To_Library中创建的openmp线程的数量。这个解决方案会将openmp线程的数量乘以4个,并且很可能会看到4倍的加速。可能内部Call_To_Library被并行化的方式只能同时执行几个openmp线程。与外部平行为您增加4倍的数字。

嵌套并行化的问题可能是同时创建的线程数量激增,因此由于与创建/关闭openmp线程相关的开销,所以可能看不到理想的加速比。

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

https://stackoverflow.com/questions/26850926

复制
相关文章

相似问题

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