C++ 使用Boost设计MPI共享内存
我想问一下,是否有人知道适用于初学者的boost::mpi文档?(我已经从Internet站点上阅读了Boost.MPI文档) 关于我的系统,我有一个大约90节的破胶机,每个节有两个CPU和两个内核(一起4个内核)和4Gb ram 我想为每个节点定义共享内存,并在其中存储一个向量C++ 使用Boost设计MPI共享内存,c++,boost,mpi,shared-memory,boost-mpi,C++,Boost,Mpi,Shared Memory,Boost Mpi,我想问一下,是否有人知道适用于初学者的boost::mpi文档?(我已经从Internet站点上阅读了Boost.MPI文档) 关于我的系统,我有一个大约90节的破胶机,每个节有两个CPU和两个内核(一起4个内核)和4Gb ram 我想为每个节点定义共享内存,并在其中存储一个向量std::vector occulation。然后,每个进程都需要根据其rank()number计算一些内容 现在,所有的多进程都需要等待,直到所有核心都完成计算,然后发送一个向量,std::vector remove,
std::vector occulation代码>。然后,每个进程都需要根据其rank()
number计算一些内容
现在,所有的多进程都需要等待,直到所有核心都完成计算,然后发送一个向量,std::vector remove代码>,发送到主进程(rank()==0
),主进程将更新向量occulation
,然后向所有节点发送新的occulation
向量
可能只是使用mpi.h
而不是boost::mpi
更好
我想听听你的意见,因为我在MPI这方面没有经验。如果编译器支持共享内存部分,请考虑使用它,然后为每个节点设置一个进程,就像当前设置中的四个进程一样。MPI并不是真正为共享内存而设计的。正如larsmans提到的,MPI不能真正实现共享内存。但听起来你并不真的需要分布式共享内存;听起来所有任务都需要在开始时获取一份职业
,进行计算,将结果以删除
的形式发送回主机,然后主机广播一份更新后的职业
。MPI可以做得很好
启动的一种方法是让主进程用于执行数据的初始发送,让工作进程用于将更新发送回主进程,并让主进程从每个任务中获取数据;完成后,循环会自动重复。谢谢您的回答。让我们假设occulation
的大小为2^30
bool元素,那么每个进程需要1Gb,在realty中,我只需要一个occulation
向量,用于所有4个核心。。。这就是我提出问题的原因。解决这个问题的一种方法是在节点之间使用MPI,并在节点内使用类似OpenMP的线程方法;然后每个节点只需要一个拷贝,如果每个节点都有4Gb,这就可以了。否则,计算是否有某种结构?所有任务是否同时需要占用所有空间?占用空间
是程序的中心,大部分计算需要在计算过程中访问此向量。我在网上搜索了一下,我正在搜索的东西叫做混合编程吗?(MPI和OpenMP的组合)是。所以你还是按照我上面的建议去做——广播数据,然后用send/receive收集结果;然后使用OpenMP(或者boost为共享内存提供的任何设施)在节点内中断计算。从一个或另一个开始——不管是哪一个——让它工作起来,然后添加另一个。