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