首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并openmp区域会带来性能上的好处吗?

合并openmp区域会带来性能上的好处吗?
EN

Stack Overflow用户
提问于 2013-08-14 01:46:23
回答 1查看 84关注 0票数 1

我有一个并行代码,这是纯粹的MPI。MPI在8个核心内可很好地扩展。然而,由于内存要求,我将不得不使用混合代码。我的代码结构如下

代码语言:javascript
复制
for( A Sequential loop for 10e5 iterations)
{
    highly_parallelizable_function_call_1()
    some_sequential_work
    highly_parallelizable_function_call_2()
    some_sequential_work
    MPI_send() 
    MPI_recv() 
    highly_parallelizable_function_call_3()
    highly_parallelizable_function_call_4()    

}

函数3和4大约占了90%的时间。我将函数3和4更改为openmp并行代码。分析显示,我在这方面的速度只有4-5。因此,此代码可能无法像单独的MPI代码那样具有良好的伸缩性。我怀疑这可能是由于线程开销造成的。为了避免这个问题,我想把这段代码改为只在开头创建线程,如下所示

代码语言:javascript
复制
#pragma omp parallel
for( A Sequential loop for 10e5 iterations)
{
    parallel_version_function_call_1()

    if( thread_id==0) some_sequential_work 

    parallel_version_function_call_2()

    if( thread_id==0) some_sequential_work 
    if( thread_id==0) MPI_send() 
    if( thread_id==0) MPI_recv()

    parallel_version_function_call_3()
    parallel_version_function_call_4()    

}

做这样的事情会有好处吗?

EN

回答 1

Stack Overflow用户

发布于 2013-08-19 09:50:30

我认为您当前的实现没有注意到Amdahl定律(如果您愿意,可以在google上搜索它)。假设你只对90%的代码进行了并行化,你可以要求的最好的加速比(假设有8个内核)是:

代码语言:javascript
复制
Speedup =  1.0 / (p_{seq} + (1 - p_{parallel}) / #cores)

在你的例子中是:

代码语言:javascript
复制
Speedup = 1.0 / ( 0.1 + 0.9 / 8) = 4.71

因此,您当前的openmp并行化正在执行预期的操作。Long answer short:是的,如果这意味着函数1和2也将被并行化,那么后面的实现应该会给你带来更好的加速比。

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

https://stackoverflow.com/questions/18215823

复制
相关文章

相似问题

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