Это будет сильно зависеть от характера того, что вы пытаетесь реализовать.Из того, что я видел, обычно можно добиться большего успеха при использовании подхода с жестко управляемой разделяемой памятью, чем прибегнуть к MPI.(потому что с общей памятью можно сделать гораздо больше)
Однако с MPI сложнее полностью ошибиться, так как гораздо меньше догадывается, почему X работает хорошо или нет.
Вот несколько распространенных подходов, использующих разделяемую память:
Данные только для чтения: если данные достаточно малы, лучше всего продублировать их на всех узлах.
Если у вас есть доступ к памятиимеет чрезвычайно высокую пространственную локальность, которая не «мигрирует» вокруг, организуйте ваши данные таким образом, чтобы каждая «группа» доступа к пространственной локальности находилась на одном и том же узле.
Если ваш шаблон доступа к памяти демонстрирует высокую временную локальность, нонедостаточно места для размещения в кэше, затем подумайте о копировании данных в локальный буфер.Как только работа сделана, скопируйте ее обратно.Это позволяет сохранить ту же структуру программы.
РЕДАКТИРОВАТЬ: рассмотрите возможность добавления тега «NUMA» к вашему вопросу.