Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用Boost设计MPI共享内存_C++_Boost_Mpi_Shared Memory_Boost Mpi - Fatal编程技术网

C++ 使用Boost设计MPI共享内存

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,

我想问一下,是否有人知道适用于初学者的boost::mpi文档?(我已经从Internet站点上阅读了Boost.MPI文档)

关于我的系统,我有一个大约90节的破胶机,每个节有两个CPU和两个内核(一起4个内核)和4Gb ram

我想为每个节点定义共享内存,并在其中存储一个向量
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为共享内存提供的任何设施)在节点内中断计算。从一个或另一个开始——不管是哪一个——让它工作起来,然后添加另一个。