Значение пропускной способности в CUDA и почему это важно - PullRequest
5 голосов
/ 04 марта 2010

Руководство по программированию CUDA утверждает, что

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

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

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

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

Спасибо

Ответы [ 3 ]

4 голосов
/ 04 марта 2010

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

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

1 голос
/ 05 марта 2010

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

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

0 голосов
/ 04 марта 2010

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

...