我注意到,当我有一个死锁的MPI程序时, wait.c
使用mvapich2与openmpi比较MPI线程死锁期间的CPU利用率
#include <stdio.h>
#include <mpi.h>
int main(int argc, char * argv[])
{
int taskID = -1;
int NTasks = -1;
int a = 11;
int b = 22;
MPI_Status Stat;
/* MPI Initializations */
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &taskID);
MPI_Comm_size(MPI_COMM_WORLD, &NTasks);
if(taskID == 0)
MPI_Send(&a, 1, MPI_INT, 1, 66, MPI_COMM_WORLD);
else //if(taskID == 1)
MPI_Recv(&b, 1, MPI_INT, 0, 66, MPI_COMM_WORLD, &Stat);
printf("Task %i : a: %i b: %i\n", taskID, a, b);
MPI_Finalize();
return 0;
}
当我编译wait.c
与mvapich2-2.1库(这本身就是使用gcc-4.9.2编译)并运行它(例如,mpirun -np 4 ./a.out
)通知我(通过top
),所有4个处理器隆隆在100%。我注意到(通过top
),2个处理器在100%徘徊,并且在运行它(例如,mpirun -np 4 ./a.out
)时, 2在0%。
大概2%是完成沟通的人。
问题:为什么openmpi和mvapich2之间CPU使用率有差异?这是预期的行为?当CPU使用率为100%时,是否从不断检查是否正在发送消息?
这是进一步讨论:http://stackoverflow.com/questions/14560714/probe-seems-to-consume-the-cpu –