4MB не будет проблемой для любой реализации MPI; Я не уверен, что вы подразумеваете под "слишком большим".
Практическое правило заключается в том, что, если вы можете легко отправить все данные в одном сообщении, это обычно происходит быстрее - причина в том, что для отправки и получения любого одного сообщения требуется некоторое конечное время ( задержка ), возникающая при вызовах функций, вызовах транспортного уровня и т. Д. Кроме того, для отправки любого дополнительного байта данных требуется некоторое время, обычно близкое к фиксированному ( который равен одному из полосы пропускания .) Это только очень грубое приближение к реальной сложности отправки сообщений (особенно больших сообщений) между процессорами, но это очень полезное приближение. В этой модели, чем меньше сообщений вы отправляете, тем лучше, потому что вы несете издержки задержки меньше раз.
Вышеуказанное почти всегда верно, если вы планируете отправлять много маленьких сообщений; однако, если вы говорите об отправке (скажем) 4 1 МБ сообщений против 1 4 МБ сообщений, даже в этой модели разница может быть небольшой и может быть перегружена другими эффектами, специфичными для вашего транспорта. Если вы хотите получить более точную оценку того, как много времени занимает ваша платформа, вам не заменит эмпирическое измерение того, сколько времени на самом деле . Лучшим способом было бы просто попробовать его в своем коде несколькими способами и посмотреть, что лучше. Это действительно единственный окончательный ответ. Второй способ - взглянуть на «микробенчмарки» MPI:
оба из вышеперечисленных включают в себя критерии того, сколько времени занимает отправка и получение сообщений различного размера; Вы компилируете вышеупомянутое с вашим MPI и можете просто считать, сколько времени занимает отправка / получение (скажем) сообщения 4 МБ против сообщений 4 x 1 МБ, и это может дать вам некоторые подсказки относительно того, как действовать.