2012-04-04 28 views
0

我有一个关于并行计算的问题。我有一个用C++编写的非常大的代码,它在共享内存的基础上使用OpenMP进行并行化。我想问是否有可能将这个共享内存代码转换为分布式内存代码?OpenMP到分布式内存代码

如果可能,需要执行什么步骤? 谢谢你的合作。

谢谢, 可并行化对共享内存的计算机上运行拉胡尔·辛格

+0

没有更多信息,没有人能给你一个明确的答案。发布一些相关的代码,或解释你的程序如何运作得更好一些。 – Bojangles 2012-04-04 16:20:55

+0

我希望你认识到这个没有一般的答案。将共享内存程序转换为分布式应用程序是非常特殊的。 – Mysticial 2012-04-04 16:21:39

+1

要求对此的一般答案与要求如何[用正则表达式解析HTML]相同(http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained标签都有效)。 – Mysticial 2012-04-04 16:24:36

回答

0

大多数程序也可以被并行化到分布式存储计算机上运行。所以是的,OpenMP程序解决的问题可能在分布式内存计算机上解决。但是,将OpenMP程序转换为分布式内存程序是另一回事。建议您最好先从串行实现开始,并且将其并行化,而不是尝试将一种并行思维模式适用于另一种并行执行模式。

因此,您寻求的第一步可能是使程序不平行。但是,正如评论员已经指出的那样,提供比我现有的更有用的建议(并且我根本没有提供任何非常有用的建议)是非常困难的,而不了解更多关于您的应用程序的信息。

0

共享内存和分布式内存是并行计算中的两种截然不同的范例,这通常意味着不同的思考策略。一些并行编程框架,如UPC或MPI,可以模拟运行在共享或分布式机器上,尽管它最好不要这样做,在这里,UPC意味着用于共享内存,而MPI则意味着用于分布式内存机器。我不确定OpenMP。

在任何一种情况下,我的建议都是先思考如何在分布式架构中的代码中获得并行性,然后再使用MPI。如果您碰巧在计算科学领域工作,那么已经有很好的书面软件包,比如来自阿贡国家实验室的PETSc和来自桑迪亚国家实验室的Trilinos,这可能会帮助您更快地开发。

+0

共享内存上的MPI通常是一种非常好的选择,特别是对于在各种机器上运行的代码。 – 2012-04-04 19:39:28

+0

@HighPerformanceMark我同意这一点。只是与做OpenMP相比,执行MPI通常要做得更多。所以如果你只关心共享内存,OpenMp/UPC可能是更好的选择。 – GradGuy 2012-04-04 20:42:53