Есть ли способ профилировать приложение MPI во время выполнения? - Использование времени, затраченного на вызовы MPI во время выполнения - PullRequest
1 голос
/ 08 мая 2020

Мне интересно, есть ли способ измерить время, затрачиваемое на вызовы MPI во время выполнения. Таким образом, я могу использовать его для расчета новой балансировки нагрузки.

Я знаю, как профилировать и отслеживать программу с помощью некоторых инструментов OpenMPI или Intel, но все они используются после выполнения. Более того, я пробовал FPMPI, но это не увенчалось успехом, потому что последний выпуск не может быть собран.

Измерение «вручную» не имеет никакого смысла в моем приложении, потому что это слишком много: /

1 Ответ

0 голосов
/ 09 мая 2020

Прежде всего, вам действительно нужно профилировать низкоуровневую коммуникацию, такую ​​как MPI? Разве вы не можете вместо этого просто спланировать свои высокоуровневые подпрограммы?

В любом случае, довольно легко написать свой собственный профилировщик MPI. Практически все библиотеки MPI (включая Open MPI) экспортируют свои функции (например, MPI_Send) как слабые псевдонимы одних и тех же функциональных символов с префиксом P (например, PMPI_Send). Все, что вам нужно сделать, это определить свои собственные функции с теми же прототипами, что и в библиотеке MPI. Внутри обновите счетчики вызовов, запустите таймеры, затем вызовите исходную функцию MPI с префиксом P и по возвращении остановите таймеры:

extern "C"
int MPI_Send(void *buf, int count, MPI_Datatype dtype, int dest, int tag, MPI_Comm comm) {
   // Update call counters and start the timer
   calls["MPI_Send"]++;
   timers["MPI_Send"].start();

   // Call the original MPI function
   int result = PMPI_Send(buf, count, dtype, dest, tag, comm);

   // Stop the timer
   timers["MPI_Send"].stop();

   return result;
}

Часть extern "C" важна, иначе вы не переопределит правильный слабый символ, если вы пишете на C ++.

Эта возможность переопределить символы из библиотеки MPI стандартизирована - см. # 14.2 Интерфейс профилирования в текущей версии стандарта .

...