Самый быстрый способ обмена данными между процессорами, расположенными на разных сокетах - PullRequest
3 голосов
/ 03 сентября 2011

У меня 8-ядерный процессор с двумя сокетами, то есть в каждом процессоре по 4 ядра.Я не видел его спецификации полностью, но я думаю, что отдельный банк памяти подключен к каждому процессору способом ccNUMA, и поэтому доступ из банка памяти другого процессора относительно медленный.Также у них есть разные кэши L3, я полагаю.

Теперь у меня вопрос, какой самый быстрый способ обмена данными между двумя процессорами.Простая общая память будет иметь проблемы из-за ccNUMA и когерентности кэша.Есть ли способ, который очень быстро?

Ответы [ 2 ]

2 голосов
/ 03 сентября 2011

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

Однако с MPI сложнее полностью ошибиться, так как гораздо меньше догадывается, почему X работает хорошо или нет.

Вот несколько распространенных подходов, использующих разделяемую память:

Данные только для чтения: если данные достаточно малы, лучше всего продублировать их на всех узлах.

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

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

РЕДАКТИРОВАТЬ: рассмотрите возможность добавления тега «NUMA» к вашему вопросу.

1 голос
/ 03 сентября 2011

Как OpenMP, так и OpenMPI позволяют обмениваться данными между несколькими процессорами. Я полагаю, что использование одного из этих API, скорее всего, будет быстрее, чем все, что вы пытаетесь реализовать самостоятельно. Какой из них вы используете, будет зависеть от точного характера того, что вы пытаетесь реализовать.

...