Значение пропускной способности в CUDA и почему это важно

Руководство по программированию CUDA указывает это

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

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

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

Кто-либо мог далее объяснить пропускную способность в этом контексте?

Спасибо

5
задан zenna 5 March 2010 в 17:01
поделиться

3 ответа

большинство нетривиальных вычислительных ядер, на уровне ЦП и ГП, с ограничением памяти. ГП имеет очень высокую вычислительную интенсивность и пропускную способность, но доступ к основной памяти очень медленный и имеет высокую задержку, несколько сотен циклов на чтение / store по сравнению с четырьмя циклами для многих арифметических операций.

Похоже, ваше ядро ​​ограничено вычислениями, так что вам удачи. Однако вам все равно нужно остерегаться конфликта разделяемого банка памяти, который может неожиданно сериализовать части кода.

4
ответ дан 14 December 2019 в 19:10
поделиться

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

Посмотрите презентацию Advanced CUDA C для получения дополнительной информации, включая некоторые советы по сравнению реализованной производительности с теоретической. В документе CUDA Best Practices Gude также есть хорошая информация, он доступен как часть набора инструментов CUDA (скачать с сайта NVIDIA).

1
ответ дан 14 December 2019 в 19:10
поделиться

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

0
ответ дан 14 December 2019 в 19:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: