如果控件从MPI_Send()跳转到if,则直接转到其他if中的MPI_Recv()。 就决策条件而言,它应该只执行一个代码块。
int main(int argc, char *argv[]) {
int number = 54;
MPI_Init(&argc, &argv);
MPI_Comm_size (MPI_COMM_WORLD, &no_of_process);
MPI_Comm_rank (MPI_COMM_WORLD, &process_rank);
MPI_Status status;
if (process_rank == 0) {
MPI_Send (&number, 1, MPI_INT, 1, 0, MPI_COMM_WORLD);
}
else if (process_rank == 1) {
MPI_Recv (&number, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
}
}
答案 0 :(得分:4)
MPI的执行模型是SPMD(单程序多数据)或MPMD(多程序多数据),SPMD更广泛。在此执行模型中,从单个源代码生成二进制文件,然后从该文件启动多个实例(称为进程)。每个实例都有自己的标识符,称为 rank ,并且基于排名执行代码的不同分支。所以MPI_Send
由一个等级执行(“等级”通常用作“具有给定等级的过程”的短版本),而MPI_Recv
由另一个等级执行,如果MPI_Send
执行MPI_Recv
1}}指定执行{{1}}的进程的等级,然后在两者之间发送消息。 MPI还允许消息缓冲和非阻塞操作,因此一个等级也可以与自身对话。
通常情况下,如果基于排名的条件,有一些过程令人满意,而有些过程则不满足。因此,两个分支都会在不同的进程中执行,并且可能在不同的时间执行。
MPI编程需要一点分裂的个性思维,通常需要一些时间来习惯。