Я пытаюсь оптимизировать производительность теста MPI+CUDA под названием LAMMPS (https://github.com/lammps/lammps а>). Прямо сейчас я работаю с двумя процессами MPI и двумя графическими процессорами. Моя система имеет две розетки, и каждая розетка подключается к 2 K80. Поскольку каждый K80 содержит 2 графических процессора внутри, каждый сокет фактически подключается к 4 графическим процессорам. Но я использую только 2 ядра в одном сокете и 2 графических процессора (1 K80), подключенных к этому сокету. Компилятор MPI — MVAPICH2 2.2rc1, а версия компилятора CUDA — 7.5.
Это был фон. Я профилировал приложение и обнаружил, что связь является узким местом в производительности. И я подозреваю, что это потому, что не применялась технология GPUDirect. Поэтому я переключаюсь на MVAPICH2-GDR 2.2rc1 и устанавливаю все остальные необходимые библиотеки и инструменты. Но для MVAPICH2-GDR требуется интерфейсная карта Infiniband, которая недоступна в моей системе, поэтому у меня возникает ошибка времени выполнения «ошибка инициализации канала. В системе не найдено активных HCA». Насколько я понимаю, карта Infiniband не требуется, если мы хотим использовать только графические процессоры в пределах 1 K80 на одном узле, потому что K80 имеет внутренний переключатель PCIe для этих двух графических процессоров. Это мои сомнения. Чтобы вопросы были ясны, я перечислю их следующим образом:
В моей системе одна розетка подключается к двум К80. Если два графических процессора в одном K80 должны обмениваться данными с графическими процессорами в другом K80, то у нас должна быть карта IB, если мы хотим использовать GPUDirect, верно?
Если нам нужно использовать только два графических процессора в пределах 1 K80, то для связи между этими двумя графическими процессорами не требуется карта IB, верно? Однако для MVAPICH2-GDR требуется как минимум одна карта IB. Так есть ли обходной путь для решения этой проблемы? Или мне нужно подключить карту IB к системе?