MPI_发送和MPI_接收的行为
为什么要使用这些代码行:MPI_发送和MPI_接收的行为,mpi,Mpi,为什么要使用这些代码行: if(my_rank != 0) { sprintf(msg, "Hello from %d of %d...", my_rank, comm_sz); if(my_rank == 2) { sleep(2); sprintf(msg, "Hello from %d of %d, I have slept 2 seconds...", my_rank, comm_sz); } MPI_Send(msg, s
if(my_rank != 0) {
sprintf(msg, "Hello from %d of %d...", my_rank, comm_sz);
if(my_rank == 2) {
sleep(2);
sprintf(msg, "Hello from %d of %d, I have slept 2 seconds...", my_rank, comm_sz);
}
MPI_Send(msg, strlen(msg), MPI_CHAR, 0, 0, MPI_COMM_WORLD);
}
else {
printf("Hello from the chosen Master %d\n", my_rank);
for(i = 1; i < comm_sz; i++) {
MPI_Recv(msg, MAX_STRING, MPI_CHAR, i, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
printf("%s\n", msg);
}
}
不是每个进程都有其“msg”的副本吗?
strlen()
不包括空终止符,因此它不会被发送到主进程。从秩3接收消息不会覆盖字符串的后面部分,因此仍会显示该消息。您应该使用strlen(msg)+1作为发送计数。您希望得到什么?请注意,MPI不在线程上工作,但在进程上工作。@Zulan我希望只有第二个进程会写我已经睡了2秒了。。。
Hello from the chosen Master 0
Hello from 1 of 5...
Hello from 2 of 5, I have slept 2 seconds...
Hello from 3 of 5... have slept 2 seconds...
Hello from 4 of 5... have slept 2 seconds...