Я заметил, что когда у меня есть тупиковая программа MPI, например, wait.c
Сравнение использования ЦП во время запирания потоков MPI с использованием mvapich2 vs. openmpi
#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%.
Когда я компилирую wait.c
с OpenMPI-1.6 библиотекой (который сам по себе была скомпилирована с использованием GCC-4.9.2) и запустить его (например, mpirun -np 4 ./a.out
), я заметил (через top
), что 2 процессоров урчание на 100% и 2 при 0%.
Предположительно, 2 на 0% являются теми, которые завершили связь.
ВОПРОС: Почему существует разница в использовании ЦП между openmpi и mvapich2? Это ожидаемое поведение? Когда использование ЦП составляет 100%, нужно ли постоянно проверять, отправлено ли сообщение?
Это обсуждается далее: http://stackoverflow.com/questions/14560714/probe-seems-to-consume-the-cpu –