我有一个编译和运行的MPI程序,但我想逐步完成它以确保没有任何奇怪的事情发生.理想情况下,我想要一种简单的方法将GDB附加到任何特定的进程,但我不确定这是否可行或如何做到这一点.另一种方法是让每个进程将调试输出写入单独的日志文件,但这并不能提供与调试器相同的自由.
有更好的方法吗?你如何调试MPI程序?
这type map
是MPI中一个重要但令人困惑的概念.我想要一个例程来显示或打印我的类型地图.
例如(取自MPI-3标准),
MPI_TYPE_CREATE_RESIZED(MPI_INT, -3, 9, type1)
Run Code Online (Sandbox Code Playgroud)
结果在typemap中
{(lb_marker, -3), (int, 0), (ub_marker, 6)}.
Run Code Online (Sandbox Code Playgroud)
再次使用该类型:
MPI_TYPE_CONTIGUOUS(2, type1, type2)
Run Code Online (Sandbox Code Playgroud)
而typemap是
{(lb_marker, -3), (int, 0), (int,9), (ub_marker, 15)}
Run Code Online (Sandbox Code Playgroud)
我想要一种自动显示该类型图的方法.
当然可以使用MPI_Type_get_contents
和MPI_Type_get_envelope
递归下降,直到达到内置类型.这是一个巨大的痛苦,我想我会有20年的时间来为我做这个.
有些工具很有前途但不太有效:
我在这里找到了〜2001年的MPImap .首先,它需要针对现代Tcl/TK进行更新,修补以解决一些内存错误并在您执行此操作之后; 你得到一个没有反应的GUI.相反,我正在寻找一个我可以在运行时调用的库/例程.
MPIDU_Datatype_deubg
是MPICH特定的内部类型转储例程.它不显示类型映射(它显示dataloop表示,再次关闭)
曾经有一个名为XMPI的调试器,它在其功能中列出了显示MPI类型映射的能力.此调试器似乎特定于LAM-MPI,并且不使用get_contents/get_envelope.
我尝试在我的计算机上安装英特尔MPI基准测试,我收到此错误:
fork: retry: Resource temporarily unavailable
Run Code Online (Sandbox Code Playgroud)
然后,当我跑步ls
和top
命令时,我再次收到此错误.
导致此错误的原因是什么?
配置我的机器:
Dell precision T7500
Scientific Linux release 6.2 (Carbon)
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用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 0;
}
Run Code Online (Sandbox Code Playgroud) 我无法理解阻止MPI中的通信和非阻塞通信的概念.两者有什么不同?有哪些优点和缺点?
谢谢!
如何将二维数组块发送到不同的处理器?假设2D阵列大小为400x400,我想将大小为100X100的块发送到不同的处理器.这个想法是每个处理器将在其单独的块上执行计算,并将其结果发送回第一个处理器以获得最终结果.
我在C程序中使用MPI.
根据我的小知识mpirun
,mpiexec
两者都是发射器.谁能告诉mpiexec
和之间的确切区别mpirun
?
如果我错了,请纠正我,但我的理解是Hadoop不使用MPI进行不同节点之间的通信.
这有什么技术原因?
我可能会冒一些猜测,但我不知道MPI如何在"引擎盖下"实施,以了解我是否正确.
想想看,我对Hadoop的内部结构也不是很熟悉.我在概念层面理解框架(map/combine/shuffle/reduce以及它如何在高级别工作),但我不知道细节的实现细节.我一直认为Hadoop 通过TCP连接传输序列化数据结构(可能是GPB),例如在混洗阶段.如果不是这样,请告诉我.