NvLink или PCIe, как указать межсоединение? - PullRequest
0 голосов
/ 06 ноября 2018

Мой кластер оснащен как Nvlink, так и PCIe. Все графические процессоры (V100) могут взаимодействовать напрямую через PCIe или NvLink. Насколько мне известно, и PCIe-коммутатор, и Nvlink могут поддерживать прямую связь через CUDA.

Теперь я хочу сравнить производительность одноранговой связи PCIe и NvLink. Тем не менее, я не знаю, как указать один, кажется, CUDA всегда будет автоматически указывать один. Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 07 ноября 2018

Если два графических процессора в CUDA имеют прямое соединение NVLink между ними, и вы включаете одноранговые передачи, эти передачи будут проходить через NVLink. В CUDA нет методов, позволяющих изменить это поведение.

Если вы не включите одноранговые передачи, то передачи данных (например, cudaMemcpy, cudaMemcpyAsync, cudaMemcpyPeerAsync) между этими двумя устройствами будут передаваться из исходного GPU через PCIE в разъем CPU, ( возможно, через промежуточные коммутаторы PCIE, возможно, также проходящие через канал уровня сокета (например, QPI), а затем через PCIE от сокета ЦП к другому графическому процессору. Всегда будет задействован, по крайней мере, один сокет ЦП, даже если существует прямой путь через структуру PCIE. Это поведение также нельзя изменить любым способом, доступным для программиста.

Обе методологии демонстрируются с использованием примера кода p2pBandwidthLatencyTest CUDA.

...