我开始涉足 MPI。我对这个领域相当陌生,我目前正在阅读 MPI 标准。
我想在我拥有的集群上编写我的第一个 MPI 程序,一个简单的 hello world 程序。我不确定是否有人熟悉 IBM Bladecenter。据说,有一个中板将所有刀片连接在一起(如果有人可以在他们的经验中确认/否认这一点,那就太好了)。我打算使用发送和接收 C++ 命令运行一个简单的程序。我想我会在标准的点对点通信部分运行示例程序。我已经输入了下面的程序。
我的主要问题是,假设我有两台计算机(计算机 A 和计算机 B)以某种方式相互连接(您可以选择,但在这种情况下,它将是刀片中心,因此它们通过中间板连接)。通过MPI标准,计算机A如何通过连接与计算机B通信?另外,如果我在计算机 A 上运行我的程序,计算机 B 是否需要运行相同的程序?MPI 怎么知道排名是在计算机 B 上而不是在计算机 A 的其他线程上?MPI_Comm_rank 是否获得它可以看到的每个处理器/内核的排名?
鉴于我正在使用的示例程序,这是否适用于同一台计算机上的 2 个进程,或者这适用于 2 台计算机?如果不是,那么我将如何修改程序以适用于 2 台计算机或 n 台计算机?
#include "mpi.h"
main(int argc, char **argv)
{
char message{20];
int myRank;
MPI_Status status;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &myRank);
if(myRank == 0)
{
strcpy(message, "Hello, there");
MPI_SEND(message, strlen(message) + 1, MPI_CHAR, 1, 99, MPI_COMM_WORLD);
}
else if(myRank == 1)
{
MPI_Recv(message, 20, MPI_CHAR, 0, 99, MPI_COMM_WORLD, &status);
printf("recieved: %s:\n", message);
}
MPI_Finalize();
}
如果这些问题很明显,我深表歉意。同样,这是我第一次处理 MPI,任何帮助将不胜感激,谢谢