草庐IT

c++ - 当我们使用 mpi_send/receive 函数时到底发生了什么?

当我们使用mpi_send/receive函数时会发生什么?我的意思是这种通信是通过我们希望发送和接收的变量的值或地址完成的(例如进程0想要发送变量“a”到进程1。进程0究竟发送变量“a”的值或地址的“一个”)。当我们使用派生数据类型进行通信时会发生什么? 最佳答案 幕后发生了相当多的魔法。首先是意外消息队列。当发送方在接收方调用MPI_Recv之前调用MPI_Send时,MPI不知道消息将发送到接收方内存中的哪个位置。此时可能会发生两件事。如果消息很短,它会被复制到接收方的临时缓冲区中。当接收方调用MPI_Recv时,它首先检查匹

c++ - MPI_Recv - 如何确定计数?

假设我有一个包含2个进程的MPI程序,等级0和等级1。inti[20],j[20],temp,size;在排名为0的进程中,我有for(temp=0;temp假设排名为1的进程执行//Atthispoint,sizeisdeclared,butnotassignedanyvalue.MPI_Recv(j,size,MPI_INT,0,1,MPI_COMM_WORLD):cout我的问题是,在上面的语句中,是否需要声明“size”?或者MPI_Recv是否以某种方式“知道”它正在接收15个元素,并自动设置size=15?如果未定义大小,代码会发生什么情况?基本上,我的问题是,我向具有不同

c++ - 共享内存线程和 MPI 之间的主要区别?

虽然我一直在研究pthreads、OpenMP、intelTBB和一般线程,但我仍然不明白像OpenMP这样的消息传递接口(interface)实现与经典线程库之间的主要区别是什么,目前还不清楚对我来说。假设为线程池编写所有样板代码对我来说不是问题,而且我使用的是C++,这两种技术之间的区别归结为......?我还对在网络上使用线程操作同时将任务分配给所有连接的机器感兴趣。现在我也没有考虑OpenMP/OpenMPI支持的平台数量方面的限制。因为我想了解这两个概念是如何工作的。 最佳答案 “经典”线程共享线程之间的所有内存。这是相当

c++ - 打开 MPI "Hello, World!"未编译

这是一个简单的MPI“Hello,World!”程序。#include#includeintmain(intargc,char**argv){intsize,rank;MPI_Init(&argc,&argv);MPI_Comm_size(MPI_COMM_WORLD,&size);MPI_Comm_rank(MPI_COMM_WORLD,&rank);printf("SIZE=%dRANK=%d\n",size,rank);MPI_Finalize();return(0);}但是,它似乎没有编译:UndefinedfirstreferencedsymbolinfileMPI::Dat

c++ - 我可以在 MPI 并行代码中抛出异常吗?

这些是我在为应该使用MPI(在C++中)并行运行的算法设计错误处理时遇到的一些一般性问题:异常是否在并行执行的代码中起作用?行为是否已定义?它们是如何工作的?不同的实现方式是否有所不同?这是好的做法-还是我应该使用返回码? 最佳答案 在理想情况下,您可以使用它们来完成您的要求。我所说的“理想世界”是指您可以选择MPI实现并能够自己管理它(而不是说服集群所有者为您重新配置它)。异常的最小配置将包括:--with-exceptions标志,可能还有一些。我最常使用LAM,默认情况下禁用异常。我相信这也是其他实现的默认设置。它们的工作方式

c++ - MPI_Scatter 和 MPI_Bcast 之间的区别

谁能解释一下MPI_Scatter和MPI_Bcast之间的区别?(除此之外任何进程都可以使用MPI_Scatter进行广播并且只有root可以使用MPI_Bcast)在哪些情况下我应该使用第一个而不是另一个? 最佳答案 MPI_Bcast()向所有人发送相同的数据,而MPI_Scatter()向每个进程发送输入数组的一部分。MPI_Bcast()与MPI_Reduce()相反,MPI_Scatter()与MPI_Gather()相反。像thisone这样的小计划是不言自明的。而且MPI_Scatter()和MPI_Bcast()都

windows - 无法让 cabal 在 Windows 上找到 haskell-mpi 的 mpi 库

Thisquestionisunlikelytohelpanyfuturevisitors;itisonlyrelevanttoasmallgeographicarea,aspecificmomentintime,oranextraordinarilynarrowsituationthatisnotgenerallyapplicabletotheworldwideaudienceoftheinternet.Forhelpmakingthisquestionmorebroadlyapplicable,visitthehelpcenter。9年前关闭。问题已解决!按照Dons发布的说明进行

tcp - MPI程序使用的tcp连接数(MPICH2+nemesis+tcp)

如果使用的MPI是MPICH2,MPI程序将使用多少tcp连接来发送数据?如果您还知道pmi连接,请单独计算它们。例如,如果我有4个进程和另外2个通信器(COMM1用于第一个和第二个进程,COMM2用于第三个和第四个进程);数据在每对可能的进程之间发送;在每一个可能的沟通者中。我使用最近的MPICH2+hydra+默认pmi。操作系统是linux,网络是交换以太网。每个进程都在单独的PC上。因此,这里是数据路径(成对的进程):12(inMPI_COMM_WORLDandCOMM1)13(onlyinMPI_COMM_WORLD)14(onlyinMPI_COMM_WORLD)23(on

tcp - 为什么 Hadoop 不使用 MPI 实现?

如果我错了请纠正我,但我的理解是Hadoop不使用MPI进行不同节点之间的通信。造成这种情况的技术原因是什么?我可能会冒险做出一些猜测,但我对MPI的“幕后”实现方式知之甚少,无法判断我是否正确。想想看,我对Hadoop的内部结构也不完全熟悉。我在概念层面上理解框架(map/combine/shuffle/reduce以及它在高层次上是如何工作的)但我不知Prop体的实现细节。我一直假设Hadoop正在通过TCP连接传输序列化数据结构(可能是GPBs),例如在洗牌阶段。如果这不是真的,请告诉我。 最佳答案 Hadoop/map-re

python - mpiexec 和 python mpi4py 给出等级 0 和大小 1

我在虚拟机上运行pythonHelloWorldmpi4py代码时遇到问题。hello.py代码是:#!/usr/bin/python#hello.pyfrommpi4pyimportMPIcomm=MPI.COMM_WORLDsize=comm.Get_size()rank=comm.Get_rank()print"helloworldfromprocess",rank,"of",size我尝试使用mpiexec和mpirun来运行它,但运行不正常。输出:$mpirun-c4pythonhello.pyhelloworldfromprocess0of1helloworldfrompr