2016-07-21 7 views
0

Я пытаюсь оптимизировать производительность теста MPI + CUDA под названием LAMMPS (https://github.com/lammps/lammps). Сейчас я работаю с двумя процессами MPI и двумя графическими процессорами. Моя система имеет два разъема, и каждый разъем подключается к 2 K80. Поскольку каждый K80 содержит 2 графических процессора внутри, каждый разъем фактически подключается к 4 графическим процессорам. Но я использую только 2 ядра в одном сокете и 2 GPU (1 K80), подключенные к этому сокету. Компилятор MPI - MVAPICH2 2.2rc1, а версия компилятора CUDA - 7.5.CIDA-MPI для двух графических процессоров в пределах одного K80

Это был фон. Я профилировал приложение и нашел, что сообщение было узким местом производительности. И я подозреваю, что это связано с тем, что не применялась техника GPUDirect. Поэтому я переключаюсь на MVAPICH2-GDR 2.2rc1 и устанавливаю все другие необходимые библиотеки и инструменты. Но MVAPICH2-GDR требует интерфейсной карты Infiniband, которая недоступна в моей системе, поэтому у меня ошибка времени выполнения. Ошибка инициализации канала. В системе нет активных HCAs. Исходя из моего понимания, карта Infiniband не требуется, если мы хотим использовать только графические процессоры в пределах 1 K80 на одном узле, потому что у K80 есть внутренний PCIe-переключатель для этих двух графических процессоров. Это мои сомнения. Чтобы устранить эти вопросы, я перечисляю их следующим образом:

  1. В моей системе один разъем подключается к двум K80. Если два GPU в одном K80 должны взаимодействовать с графическими процессорами в другом K80, тогда у нас должна быть IB-карта, если мы хотим использовать GPUDirect, верно?

  2. Если нам нужно использовать только два графических процессора в пределах 1 K80, тогда связь между этими двумя графическими процессорами не требует платы IB, правильно? Однако MVAPICH2-GDR требует, по крайней мере, одну карту IB. Итак, есть ли способ обхода проблемы? Или мне нужно подключить IB-карту в системе?

ответ

5

В моей системе, один разъем подключается к двум К80. Если два GPU в одном K80 должны взаимодействовать с графическими процессорами в другом K80, тогда у нас должна быть IB-карта, если мы хотим использовать GPUDirect, верно?

Единственный раз, когда необходима карта IB, когда вы используете MPI-связь (GPU или иное), идущие от системы к системе. Графические процессоры в той же системе не нуждаются в карте IB, чтобы присутствовать, чтобы общаться друг с другом. Более подробная информация об использовании GPUDirect в этой (односистемной) настройке приведена ниже.

Если нам нужно использовать только два графических процессора в пределах 1 К80, тогда связь между этими двумя графическими процессорами не требует платы IB, верно? Однако MVAPICH2-GDR требует, по крайней мере, одну карту IB. Итак, есть ли способ обхода проблемы? Или мне нужно подключить IB-карту в системе?

ГДР в MVAPICH2-ГДР относится к GPUDirect-RDMA. GPUDirect является общим зонтичным термином для набора технологий, которые позволяют графическим процессорам напрямую взаимодействовать друг с другом.

Для GPU в той же системе технология GPUDirect называется Peer-to-Peer. Два GPU на K80 должны всегда иметь возможность связываться друг с другом с использованием Peer to Peer, и вы можете проверить это для себя, используя коды кода CUDA, которые имеют P2P в имени, таком как simpleP2P. Этот примерный код также скажет вам, поддерживает ли ваша система поддержку P2P между любыми 2 графическими процессорами в одной и той же системе.

Для графических процессоров в отдельных системах, соединенных сетью IB (Infiniband), есть дополнительная технология GPUDirect, называемая GPUDirect-RDMA.Это позволяет двум графическим процессорам в разделить системы для связи друг с другом по линии IB.

Итак, поскольку MVAPICH2-GDR включает GPUDirect RDMA, который относится к IB, он, вероятно, по умолчанию будет искать карту IB.

Однако вы можете получить преимущества связи, используя MPI с поддержкой GPUDirect (включая некоторые особенности MVAPICH2) даже между графическими процессорами в одной системе, например с K80. Этот вид использования просто называется «CUDA-совместимым MPI», поскольку он использует GPUDirect P2P, но не обязательно RDMA.

Подробное руководство и прохождение игры, описанное выше, за пределами того, что я могу предложить в ответ SO, но для получения дополнительной информации об этом виде использования, я хотел бы отнести вас к двум статьям в блогах, которые полностью охватывают эту тему, первая - here, вторая часть - here. Дополнительная информация о GPUDirect-RDMA: here.

+0

Спасибо, Роберт. Вы объясните это очень ясно. Наконец, я понимаю различия и связи между этими терминами. –

Смежные вопросы