2011-03-24 88 views
0

我想问问有没有人知道boost :: mpi初学者的文档? (我已经从Internet站点阅读Boost.MPI文档)。使用Boost为MPI设计共享内存

有一点关于我的系统,我有一个约90节的碎石,每个节有两个CPU,两个核心(4个核心在一起)和4Gb RAM。

我想定义每个结的共享内存,并且存储矢量std::vector<bool> occupation;。然后每个进程需要根据他的rank()号码来计算一些东西。

现在,所有的多进程需要等到所有内核完成计算,然后发送一个载体,std::vector<uint32_t> remove;,主处理(rank() == 0)将更新载体occupation,然后发送到所有结新occupation向量。

这可能是它最好使用简单的mpi.h而不是boost::mpi

我想听听您的意见,因为我没有这方面的MPI经验。

回答

0

如果您的编译器支持它,请考虑使用OpenMP作为共享内存部分,然后为每个节点设置一个进程,以执行当前设置中四个进程的功能。 MPI并不是专为共享内存而设计的。

0

正如larsmans所说,你不能真正与MPI共享内存。但是这听起来像你并不需要分布式共享内存;听起来好像所有的任务都需要在开始时获得occupation的副本,进行计算,将结果以remove的形式发回给主人,然后主人再广播occupation的更新副本。 MPI可以做到这一点。

一开始将有主过程中使用broadcast做初步数据的发送方式,有工作进程使用send将更新发送回主,并有主recv从每个任务中的数据;当这些完成时,循环会重演。

+0

感谢您的回答。让我们假设'占领'是'2^30'布尔元素的大小,那么每个过程都需要1Gb,在那里我只需要一个所有4个核心的“职业”向量......这就是我的原因问题 – Eagle 2011-03-24 23:15:33

+0

解决这个问题的一种方法是在节点之间使用MPI,并在节点内部使用OpenMP等线程方法;那么每个节点只需要一个副本,如果每个节点都有4Gb,那么这很好。否则,是否有一些计算结构 - 不需要同时需要所有职业的所有任务? – 2011-03-24 23:37:01

+0

“职业”是程序的中心,大部分计算都需要在计算过程中访问这个向量。我搜索了一下网络,而我正在寻找的是混合编程? (MPI和OpenMP的组合) – Eagle 2011-03-24 23:49:55