Сколько операций 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;

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

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

1 ответ

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

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

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

Другие вопросы по тегам