gpt4 book ai didi

c - 模仿 OpenMP 的 for-loop pragma 的 MPI 包装器

转载 作者:太空宇宙 更新时间:2023-11-04 00:18:58 26 4
gpt4 key购买 nike

我正在考虑为 MPI 实现一个模仿 OpenMP 方式的包装器并行化 for 循环。

  begin_parallel_region( chunk_size=100 , num_proc=10 );

for( int i=0 ; i<1000 ; i++ )
{
//some computation
}

end_parallel_region();

上面的代码将 for 循环内的计算分配给 10 个从属 MPI 处理器。进入并行区域后,将提供 block 大小和从属处理器的数量。离开并行区域后,MPI 处理器同步并处于空闲状态。

已编辑以响应高性能标记。

我无意模拟 OpenMP 的共享内存模型。我提出这个是因为我需要它。我正在开发一个从数学函数构建图形所需的库。在这些数学函数中,经常存在如下的for循环。

 for( int i=0 ; i<n ; i++ )
{
s = s + sin(x[i]);
}

所以我希望首先能够将 sin(x[i]) 分配给从属处理器,最后像在 OpenMP 中一样减少到单个变量。

我想知道是否有这样的包装器,这样我就不必重新发明轮子了。

谢谢。

最佳答案

没有这样的 wrapper 可以从研究实验室逃脱并广泛使用。您的建议与其说是重新发明轮子,不如说是发明飞行汽车

我知道您是如何建议编写 MPI 代码来模拟 OpenMP 分担循环负担的方法,但不太清楚的是您是如何建议让 MPI 模拟 OpenMP 的共享内存模型的?

在一个简单的 OpenMP 程序中,如您所建议的,可能有 10 个线程,每个线程执行一个大循环的 10% 的迭代,可能更新一个大的(共享的)数据结构的值。要在 MPI 中的狡猾包装器中模拟它,您要么必须 (i) 说服单方通信表现得像共享内存(这可能是可行的,但肯定会很困难)或 (ii) 将数据分发到所有进程,让每个进程独立计算 10% 的结果,然后将结果广播到所有进程,以便在执行结束时每个进程都拥有其他进程拥有的所有数据。

在分布式内存硬件上模拟共享内存计算是并行计算中的一个热门话题,过去是,将来也是。谷歌分布式共享内存计算并加入其中。

编辑

好吧,如果您已将 x 分布到多个进程,那么各个进程可以计算 sin(x[i]) 并且您可以使用以下方法将总和减少到一个进程MPI_Reduce

我一定遗漏了您的要求,因为我不明白您为什么要在 MPI 已经提供的基础上构建任何上层结构。尽管如此,我对您最初问题的回答仍然是不,没有您想要的包装,我的其余所有回答都只是评论。

关于c - 模仿 OpenMP 的 for-loop pragma 的 MPI 包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12144849/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com