Многократная связь MPI и производительность - PullRequest
0 голосов
/ 25 сентября 2019

Я думаю, что передача буфера размером, скажем, 100 байт с одним вызовом MPI_Send () / MPI_Recv () быстрее, чем передача буфера размером 10 байт с десятью вызовами MPI_Send () / MPI_Recv ().Но что, если вместо 100 байтов мы хотим передать 100 КБ или 100 МБ или больше?В какой момент связь на 10 байтов с десятью вызовами MPI происходит быстрее?Существуют ли общие эмпирические правила, помогающие нам в подобных сравнениях, приводящих к написанию более быстрых кодов?

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

1 Ответ

2 голосов
/ 25 сентября 2019

Вы можете предположить, что несколько вызовов никогда не будут быстрее, чем один вызов для одной и той же общей громкости.Простая причина в том, что реализация MPI могла бы просто разделить один вызов на несколько внутренних вызовов, если бы он был быстрее, таким образом 1 .В общем случае рекомендуется использовать API MPI наиболее высокоуровневым способом, т. Е. Коллективы вместо p2p, используя пользовательские составные типы данных вместо отдельных сообщений и т. Д. Это также гарантирует, что программа наиболее переносима.

Тем не менее, если у вас есть конкретная идея, как улучшить производительность с помощью низкоуровневой настройки, вам следует измерить с вашей конкретной реализацией в вашей конкретной системе.В конце концов, ваша реализация может иметь определенную проблему с большими сообщениями.Но вы должны предпочесть добиться улучшения с помощью системной настройки (например, пороговых значений активных сообщений для конкретной реализации), так как это не загрязняет исходный код.

1: если вы включаете создание / использование данных вИсходя из ваших соображений, вполне возможно, что множественные вызовы быстрее из-за эффектов конвейерной передачи или кэшированияНо это, скорее всего, незначительно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...