我注意到,當我有一個死鎖的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 –