Tag: mpi

mpi:阻止与非阻止

我无法理解在MPI中阻塞通信和非阻塞通信的概念。 两者有什么区别? 有什么优点和缺点? 谢谢!

使用MPI_Bcast进行MPI通信

我试图使用MPI_Bcast从根节点向所有其他节点广播消息。 但是,每当我运行这个程序时,它总是在开始时挂起。 有人知道它有什么问题吗? #include <mpi.h> #include <stdio.h> int main(int argc, char** argv) { int rank; int buf; MPI_Status status; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); if(rank == 0) { buf = 777; MPI_Bcast(&buf, 1, MPI_INT, 0, MPI_COMM_WORLD); } else { MPI_Recv(&buf, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &status); printf("rank %d receiving received %d\n", rank, buf); } MPI_Finalize(); return […]

fork:重试:资源暂时不可用

我尝试在我的计算机上安装英特尔MPI基准testing,并收到错误消息: fork: retry: Resource temporarily unavailable 然后,当我运行ls和top命令时,再次收到此错误。 什么是造成这个错误? configuration我的机器: Dell precision T7500 Scientific Linux release 6.2 (Carbon)

MPICH与OpenMPI

有人可以详细说明MPI的OpenMPI和MPICH实现之间的区别吗? 哪一个是更好的实现?

显示一个MPItypes图

type map在MPI中是一个重要而混乱的概念。 我想要一个例程为我显示或打印一个types映射。 例如(取自MPI-3标准), MPI_TYPE_CREATE_RESIZED(MPI_INT, -3, 9, type1) 结果在typemap中 {(lb_marker, -3), (int, 0), (ub_marker, 6)}. 再次使用该types: MPI_TYPE_CONTIGUOUS(2, type1, type2) 和typemap是 {(lb_marker, -3), (int, 0), (int,9), (ub_marker, 15)} 我想自动显示该types图的方法。 当然可以使用MPI_Type_get_contents和MPI_Type_get_envelope并recursion下降,直到达到内置types。 这是一个巨大的痛苦,我会想到20年的一些工具将存在为我做这个。 一些有希望的工具,但不是很有效: 我在这里发现了〜2001年的MPImap。 首先,它需要更新为现代Tcl / TK,修补以解决一些内存错误,然后你这样做; 你得到一个没有反应的GUI。 相反,我正在寻找一个我可以在运行时调用的库/例程。 MPIDU_Datatype_deubg是MPICH特定的内部types转储例程。 它不显示types映射(它显示dataloop表示,再次closures) 曾经有一个名为XMPI的debugging器在其function中列出了显示MPItypes映射的能力。 这个debugging器似乎是特定于LAM-MPI的,并没有使用get_contents / get_envelope。

在MPI中sorting输出

在一个简单的MPI程序中,我已经使用了一个大型matrix的明智的分区。 我怎样才能sorting输出,使每个matrix出现在另一个有序的旁边? 我试过这个简单的代码,效果与想要的完全不同: for(int i=0;i<10;i++) { for(int k=0;k<numprocs;k++) { if (my_id==k){ for(int j=1;j<10;j++) printf("%d",data[i][j]); } MPI_Barrier(com); } if(my_id==0) printf("\n"); } 似乎每个进程都有他自己的标准输出,所以不可能有有线的输出,而不是将所有的数据发送到一个主打印出来。 我的猜测是真的吗? 或者我做错了什么?

测量MPI通信成本的工具

我正在使用MPI,我想测量通信成本,以便将其与“处理”成本进行比较,例如,需要多less时间通过n个进程分散列表,然后将其与多less进行比较我需要对它进行sorting。 有没有人知道任何工具来衡量这种沟通成本? (例如分散) 有没有什么可以测量MPI的通信成本,比如PAPI来分析代码的性能? 提前致谢!

我如何debugging一个MPI程序?

我有一个编译和运行的MPI程序,但我想通过它来确保没有奇怪的事情发生。 理想情况下,我想要一个简单的方法来将GDB附加到任何特定的进程,但我不确定这是可能的还是如何去做。 另一种方法是让每个进程都将debugging输出写入一个单独的日志文件,但是这并没有给debugging器带来同样的自由。 有更好的方法吗? 你如何debuggingMPI程序?

用MPI_Gather在Fortran中发送二维数组

我想使用MPI_GATHER发送2d数据块。例如,我在每个节点上都有2×3数组,如果我有4个节点,我想在根上使用8×3数组。 对于一维数组MPI_GATHER根据MPIsorting数据sorting,但对于二维数据它创build混乱! 整理大块的干净方法是什么? 我期待这个代码的输出: program testmpi use mpi implicit none integer :: send (2,3) integer :: rec (4,3) integer :: ierror,my_rank,i,j call MPI_Init(ierror) MPI_DATA_TYPE type_col ! find out process rank call MPI_Comm_rank(MPI_COMM_WORLD, my_rank, ierror) if (my_rank==0) then send=1 do i=1,2 print*,(send(i,j),j=1,3) enddo endif if (my_rank==1) then send=5 ! do 1,2 ! print*,(send(i,j),j=1,3) ! enddo endif […]

通过MPI发送和接收二维数组

我想解决的问题如下: 我已经计算了一个大的2Dmatrix的C ++串行代码。 为了优化这个过程,我想分割这个大的2Dmatrix,并使用MPI在4个节点(比如说)上运行。 节点之间发生的唯一通信是在每个时间步骤结束时共享边缘值。 每个节点与其邻居共享边缘arrays数据A [i] [j]。 在阅读MPI的基础上,我有以下的计划来实施。 if (myrank == 0) { for (i= 0 to x) for (y= 0 to y) { C++ CODE IMPLEMENTATION …. MPI_SEND(A[x][0], A[x][1], A[x][2], Destination= 1…..) MPI_RECEIVE(B[0][0], B[0][1]……Sender = 1…..) MPI_BARRIER } if (myrank == 1) { for (i = x+1 to xx) for (y = 0 […]