2013-11-23 7 views
0

Учитывая следующий случай:Сколько операций cudaMemcpyAsync можно выполнять одновременно?

//thread 0 on device 0: 
cudaMemcpyAsync(Dst0, Src0, ..., stream0);//stream0 is on Device 0; 

... 
//thread 1 on device 1: 
cudaMemcpyAsync(Dst1, Src1, ..., stream1);//stream1 is on Device 1; 

Может два тетсру операции происходят одновременно, и получить в два раза пропускную способность хост-устройства (при условии, что пропускная способность памяти хоста достаточно)? если ответ да, существует ли верхний предел такого параллелизма?

Я планирую написать некоторую программу для многих (6-8) графических процессоров в одном вычислительном узле, так что это будет очень важно для производительности.

ответ

2

Только одна операция cudaMemcpy может фактически передавать данные в любой момент времени, в каждом направлении по каналу PCIE. Конечно, другие операции могут быть поставлены в очередь, но на самом деле можно использовать только ссылку.

Некоторые графические процессоры CUDA имеют один двигатель DMA, другие имеют 2. Те, у кого есть два, могут одновременно передавать данные в обоих направлениях. Это предел параллелизма при передаче данных: по одному на направление (при использовании двухкоординатных двигателей).

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

+0

Не могли бы вы прокомментировать последнюю часть вопроса? «Я планирую написать некоторую программу для многих (6-8) графических процессоров в одном вычислительном узле, так что это будет очень важно для производительности. Я хочу знать, потому что в ближайшем будущем вы будете пытаться что-то подобное или ссылку на любую бумагу который уже проанализировал это? –