#include "mpi.h"
#include <stdio.h>
int main(int argc,char **argv)
{
int rank, size, i, buf[1];
MPI_Status status;
MPI_Init( &argc, &argv );
MPI_Comm_rank( MPI_COMM_WORLD, &rank );
MPI_Comm_size( MPI_COMM_WORLD, &size );
printf("beginging....\n");
if (rank == 0)
{
for (i=0; i<100*(size-1); i++) {
MPI_Recv( buf, 1, MPI_INT, MPI_ANY_SOURCE,MPI_ANY_TAG, MPI_COMM_WORLD, &status );
printf( "Msg=%d from %d with tag %d\n",buf[0], status.MPI_SOURCE, status.MPI_TAG );
}
}
else
{
for (i=0; i<100; i++)
buf[0]=rank+i;
MPI_Send( buf, 1, MPI_INT, 0, i, MPI_COMM_WORLD );
}
MPI_Finalize();
return 0;
}
uj5u.com熱心網友回復:
因為你用MPI_Recv收了100*(size-1)次, 但是只用MPI_Send了size-1次,所以多余的MPI_Recv在等。下面的代碼你可以參考。
#include "mpi.h"
#include <stdio.h>
int main(int argc,char **argv)
{
int rank, size, i, buf[1];
MPI_Status status;
MPI_Init( &argc, &argv );
MPI_Comm_rank( MPI_COMM_WORLD, &rank );
MPI_Comm_size( MPI_COMM_WORLD, &size );
printf("beginging....\n");
if (rank == 0)
{
for (i=0; i<(size-1); i++) {
MPI_Recv( buf, 1, MPI_INT, MPI_ANY_SOURCE,MPI_ANY_TAG, MPI_COMM_WORLD, &status );
printf( "Msg=%d from %d with tag %d\n",buf[0], status.MPI_SOURCE, status.MPI_TAG );
}
}
else
{
buf[0]=rank;
MPI_Send( buf, 1, MPI_INT, 0, rank, MPI_COMM_WORLD );
}
MPI_Finalize();
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/80114.html
標籤:基礎類
上一篇:ShellExecute傳入引數并呼叫exe,但在InitInstance中報錯了
下一篇:網頁通信的疑問
