CUDA - перенос буфера на несколько устройств

Если у меня есть три графических процессора и мне нужно передать огромный буфер всем трем из них, будет ли иметь какое-то значение, если я использую поток CUDA для каждого из них, чтобы их механизмы копирования могли выполнять передачи одновременно? Я имею в виду: шина PCI-E для достижения всех трех одинакова, не так ли?

1 ответ

Решение

PCIe масштабирует одну из областей, описанных в этом учебнике по CUDA, используя ряд различных процессорных архитектур.

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

Однако вы будете ограничены возможностью контроллера процессора / памяти /pcie предоставлять одновременные (PCIe 2) потоки 5 ГБ / с. Если добавление большего количества карт не уменьшает количество доступных линий PCIe, вы обычно видите значительное преимущество. Как правило, для 2 карт это работает хорошо, но быстро уменьшается на более чем 3 картах, так как проблемы с пропускной способностью мешают при добавлении большего количества карт. Особенно с более чем двумя картами, вы вряд ли будете иметь полные 16 линий PCIe, доступных во многих системах.

Инструмент Nsight очень хорошо отображает временные графики, показывающие, что происходит с переводами, а также показывает фактические достигнутые скорости передачи, поэтому я предлагаю вам попробовать, чтобы вы увидели, что на самом деле происходит.

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