MPI 代码不适用于 2 个节点,但适用于 1 个
MPI code does not work with 2 nodes, but with 1
超级编辑:
添加广播步骤,将导致 ncols
由主节点的两个进程打印(我可以从中检查输出)。但为什么?我的意思是,所有广播的变量在其声明行中已经有一个值!!! (题外话image)。
我有一些基于此 example 的代码。
我用这个简单的程序检查了集群配置是否正常,它还 printed the IP 机器 运行 到:
int main (int argc, char *argv[])
{
int rank, size;
MPI_Init (&argc, &argv); /* starts MPI */
MPI_Comm_rank (MPI_COMM_WORLD, &rank); /* get current process id */
MPI_Comm_size (MPI_COMM_WORLD, &size); /* get number of processes */
printf( "Hello world from process %d of %d\n", rank, size );
// removed code that printed IP address
MPI_Finalize();
return 0;
}
它打印每台机器的 IP 两次。
EDIT_2
如果我(仅)打印网格,就像示例中那样,我将获得一台计算机:
Processes grid pattern:
0 1
2 3
还有两个:
Processes grid pattern:
两个节点中的可执行文件不一样!
我配置集群的时候非常费劲,所以挂载遇到问题就直接跳过了。所以现在,更改只会出现在一个节点中。除非部分(或全部)代码相同,否则代码会表现得很奇怪。
超级编辑:
添加广播步骤,将导致 ncols
由主节点的两个进程打印(我可以从中检查输出)。但为什么?我的意思是,所有广播的变量在其声明行中已经有一个值!!! (题外话image)。
我有一些基于此 example 的代码。
我用这个简单的程序检查了集群配置是否正常,它还 printed the IP 机器 运行 到:
int main (int argc, char *argv[])
{
int rank, size;
MPI_Init (&argc, &argv); /* starts MPI */
MPI_Comm_rank (MPI_COMM_WORLD, &rank); /* get current process id */
MPI_Comm_size (MPI_COMM_WORLD, &size); /* get number of processes */
printf( "Hello world from process %d of %d\n", rank, size );
// removed code that printed IP address
MPI_Finalize();
return 0;
}
它打印每台机器的 IP 两次。
EDIT_2
如果我(仅)打印网格,就像示例中那样,我将获得一台计算机:
Processes grid pattern:
0 1
2 3
还有两个:
Processes grid pattern:
两个节点中的可执行文件不一样!
我配置集群的时候非常费劲,所以挂载遇到问题就直接跳过了。所以现在,更改只会出现在一个节点中。除非部分(或全部)代码相同,否则代码会表现得很奇怪。