使用MPI在C / C ++中编写代码时,如果在调用MPI_Init之前分配了内存,那么每个进程如何查看该内存?从测试程序中,我可以看到有时候它没关系,有些则没有。标准是否定义了这个?我无法判断在MPI_Init期间是否将内存分配复制到其他进程,如果我很幸运,因为所有进程都是“当前”在单个(多核)CPU上。
答案 0 :(得分:2)
是。每个进程都在可执行的加载时产生。如果在调用MPI_Init之前分配了任何内存,则每个进程都知道该数据。但是,在调用MPI_Init之前,进程不了解自己或彼此。调用MPI_Init和MPI_Comm_world初始化MPI环境并返回MPI_Comm,它允许您在进程之间建立连接。
答案 1 :(得分:1)
谢谢IRO-bot!我编写了HelloWorld.cpp并对其进行了测试;这是其他任何感兴趣的人的副本。
#include <iostream>
#include "mpi.h"
int main(int argc, char* argv[])
{
int numprocs;
int myid = 0;
std::cout << "Hello MPI World, from process " << myid << "!! " << std::endl;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &myid);
if(myid == 0)
std::cout << std::endl;
std::cout << "Hello MPI World, from process " << myid << "!! " << std::endl;
MPI_Finalize();
return 0;
}
示例输出:mpiexec -n 4 HelloMPIWorld
Hello MPI World,来自进程0 !! 你好MPI世界,从进程0 !! 你好MPI世界,从进程0 !! Hello MPI World,来自流程0 !!
Hello MPI World,来自进程0 !! 您好MPI World,来自流程3 !! 你好MPI World,来自进程1 !! Hello MPI World,来自流程2 !!