草庐IT

MPI_Bcast

全部标签

c++ - 全局变量和 MPI

我知道全局变量不好,应该尽量避免。然而,当用MPI编写并行程序时,一些变量只初始化一次,并且永远不会改变(这个任务的数量,任务的总数等)。将这些变量作为全局变量仍然被认为是不好的做法吗?因为你几乎总是需要访问这些变量,所以在main中为它们创建一个类,并将指向它的指针传递给程序中99%的函数似乎很愚蠢。到目前为止,我的方法是将它们隐藏在命名空间mpi_glob中(对于C++,我想我不会费心将它们放在C中的结构中以模拟命名空间)。我想这个问题也适用于其他仅设置一次的变量,例如单位系统等。 最佳答案 全局变量“不好”的原因是它们在单独的

c++ - 如何使用 MPI_Irecv?

来自OpenMPI文档:C++语法RequestComm::Irecv(void*buf,intcount,constDatatype&datatype,intsource,inttag)const所以我想我会做类似的事情:MPI::Requestreq;req=MPI_Irecv(&ballChallenges[i],2,MPI_INT,i,TAG_AT_BALL,MPI_COMM_WORLD);但它提示:error:toofewargumentstofunction‘intMPI_Irecv(void*,int,MPI_Datatype,int,int,MPI_Comm,ompi_

c++ - MPI_Recv 中的消息被截断

我有邻接矩阵和以下代码:if(is_broadcast_message){MPI_Send(&broadcast_message,1,MPI_INT,j,3,MPI_COMM_WORLD);MPI_Send(&message,20,MPI_CHAR,j,3,MPI_COMM_WORLD);}broadcast_message=128(随机数只是为了知道我何时收到,这是一条广播消息)消息定义为char[20]。elseif(ihavetosendonlytoanode){MPI_Send(&destination,1,MPI_INT,next_hop[destination],3,MPI

c++ - 在 Clion 中包含 mpi.h

我正在运行linux(Debian),我想将headermpi.h包含到我的项目中。mpi.h位于/usr/include/mpi下,运行mpiCC和mpirun显示它已安装.我找不到明确的教程。 最佳答案 您应该将include_directories(/usr/include/mpi/)添加到您的CMakeLists.txt并且只包含header:#include 关于c++-在Clion中包含mpi.h,我们在StackOverflow上找到一个类似的问题:

hadoop - MPI 读写 HDFS

有谁知道从MPI中读取/写入文件到我的hdfs的好方法吗?我已经进行了大量的挖掘工作,试图弄清楚这一点,只需要一个大致的方向即可。 最佳答案 MPI标准中有一整章是关于MPII/O的。我将从那里开始阅读。MPI实现有这个实现,通常使用ROMIO。您也可以看看那个。 关于hadoop-MPI读写HDFS,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/23943803/

hadoop - 数据移动 HDFS 与并行文件系统与 MPI

我目前正致力于在MR-MPI(MPI上的MapReduce)上实现机器学习算法。我也在尝试了解其他MapReduce框架,尤其是Hadoop,所以以下是我的基本问题(我是MapReduce框架的新手,如果我的问题没有意义,我深表歉意)。问题:由于MapReduce可以在并行文件系统(GPFS)、HDFS、MPI等许多事物之上实现,等等。映射步骤之后是整理操作,然后是缩减操作。对于整理操作,我们需要跨节点进行一些数据移动。在这方面,我想知道HDFS、GPFS和MPI中的数据移动机制(节点之间)有什么区别。如果你能给我一些很好的解释,我很感激,并且可以给我一些很好的引用,这样我就可以深入了

hadoop - MPI vs GPU vs Hadoop,这三种并行性之间的主要区别是什么?

我知道一些机器学习算法,例如随机森林,本质上应该并行实现。我做作业发现有这三种并行编程框架,所以我想知道这三种并行性之间的主要区别是什么?特别是,如果有人能给我指出一些研究来比较它们之间的区别,那就太完美了!请列出每种并行度的优缺点,谢谢 最佳答案 MPI是并行的消息传递范例。在这里,您有一台根机器,它在其MPI世界中的所有机器上生成程序。系统中的所有线程都是独立的,因此它们之间唯一的通信方式是通过网络消息。网络带宽和吞吐量是影响MPI实现性能的最关键因素之一。想法:如果每台机器只有一个线程,并且上面有多个内核,则可以使用OpenM

PhyloBayes-MPI安装2021-01-08

PhyloBayes-MPI的github地址:https://github.com/bayesiancook/pbmpigithub上面的东西下载以后不知道咋安装,啥啥都没有?还好有conda。!!!最简安装方法20230405提前安装好mambamambacreate-nphylobayes-cbiocondaphylobayes-mpicondaactivatephylobayesmpirun-np4pb_mpi-h旧探索过程PhyloBayes-MPI的anaconda地址:https://anaconda.org/bioconda/phylobayes-mpi1.>安装PhyloBa

c++ - MPI_Scatterv 中的 displs 参数是什么?

MPI_Scatterv()函数的displs参数被称为“整数数组(长度组大小)”。条目i指定位移(相对于从中获取传出数据以处理i的sendbuf)。假设我有sendcounts参数intsendcounts[7]={3,3,3,3,4,4,4};我的推理方式是displs数组应该始终以值0开始,因为第一个条目相对于sendbuf的位移为0,所以在我上面的例子,displs应该是这样的:intdispls[7]={0,3,6,9,13,17,21};这样对吗?我知道这是一个微不足道的问题,但出于某种原因,网络根本没有帮助。那里没有很好的例子,因此我的问题。

c++ - 如何在函数中初始化 MPI?

我想在一个函数中使用多进程,我该怎么做。如您所知,MPI_Init需要两个参数:“intargc,char**argv”。这是否意味着我必须在函数定义中添加这两个参数?我的要求是我想并行化函数中的一个步骤,而不是主程序中的一个步骤。例如,func(mat&A,vec&x){somecomputationonA;autoB=sub_mat(A,0,10);B*x;//Iwanttoparallelizethiscomputation}main(){matA;vecx;func(A,x);}我只想在B*x中使用MPI,但我不知道如何初始化MPI?顺便说一句,如果我可以初始化MPIintfu