Поведение производительности MPI Isend / Irecv - PullRequest
0 голосов
/ 15 марта 2012

У меня есть подпрограмма с именем Transfer (Int) , которая вызывает подпрограммы MPI.В моей основной программе Transfer () вызывается дважды.

... // do some work
transfer(1); // first transfer
... // do some work again
transfer(2); // second transfer

Функция Transfer (Int) выглядит следующим образом

... // do some work
MPI_Barrier(MPI_COMM_WORLD);
t0 = clock();
for(int k=0; k<mpisize; k++) {
    MPI_Irecv( (void*)rbuffer[k], rsize[k], MPI_BYTE, k, 0, MPI_COMM_WORLD, reqs+2*k );
    MPI_Isend( (void*)sbuffer[k], ssize[k], MPI_BYTE, k, 0, MPI_COMM_WORLD, reqs+2*k+1);
}   
MPI_Waitall(2*mpisize, reqs, status);
MPI_Barrier(MPI_COMM_WORLD);
if (mpirank==0) cerr << "Transfer took "<< (double)(clock()-t0)/CLOCKS_PER_SEC << " secs" << endl;

Обратите внимание, чтоЯ только измеряю время связи, исключая предварительную обработку.


Для передачи (1) все буферы отправки и приема имеют размер 0 для каждого k .Так что, по сути, связь не происходит.Тем не менее, передача заняла 1,95 секунды.

Для передачи (2) каждый процессор должен отправлять / получать около 20 КБ от каждого другого процессора.Тем не менее, весь перенос занял всего 0,07 секунды.

Я много раз проводил эксперимент с 1024 процессорами, и измерения были последовательными.Можете ли вы объяснить это явление или что может быть не так?

Спасибо.

1 Ответ

0 голосов
/ 15 марта 2012

Вы можете использовать инструмент анализа производительности MPI, такой как Vampir или Scalasca , чтобы лучше понять, что происходит:

  • Все ли коммуникации медленные или простонесколько остальных ждут у барьера?
  • Какое влияние оказывает барьер?

Фактический ответ сильно зависит от вашей системы и реализации MPI.Комментарий Anycorn о том, что сообщения нулевого размера все еще требуют связи, а первое общение может иметь дополнительные издержки, является хорошим началом исследования.Итак, еще один вопрос, на который вы должны попытаться ответить:

  • Как ведет себя второе сообщение нулевого размера?

Кроме того, реализации MPI могут обрабатывать сообщения разных размеров, принципиально разных, напримерс использованием неожиданных буферов сообщений, но это опять-таки зависит от реализации и системы.

...