CUDA bandwidthTest, чтобы получить достижимый пик

Я хочу знать, насколько хороши мои ядра CUDA с точки зрения использования полосы пропускания памяти. Я запускаю их на Tesla K40c с включенным ECC. Является ли результат, данный bandwidthTest Полезность хорошее приближение к достижимому пику? Иначе, как можно написать аналогичный тест для определения максимальной пропускной способности?

Я имею в виду пропускную способность памяти устройства.

1 ответ

Исходный код для проверки пропускной способности включен в CUDA SDK, поэтому вы можете просмотреть его напрямую. В примере bandwidthTest выполняется проверка времени передачи между устройством и хостом, хостом и устройством, а также устройством и устройством (передача памяти на карте).

Это реальное выполнение передачи памяти, но оно использует преимущества нескольких вещей:

  1. Средние и большие передачи памяти. Если вы делаете тонны крошечных переводов, вы заплатите высокий штраф в накладных расходах, и это снизит ваши ставки перевода.
  2. Приколол память. BandwidthTest использует закрепленную память, так что передача может быть максимально быстрой. Вы можете или не можете иметь эту опцию.
  3. Устойчивое чтение / запись памяти. Насколько я помню, bandwidthTest выполняет несколько передач, которые могут быть поставлены в очередь. Любые задержки при запуске или аномалии будут сглажены, и у него будет то преимущество, что он объединит множество передач в очередь. Возможно, вам придется сделать перевод-работа-работа-перевод, чтобы у вас могли возникнуть дополнительные задержки. Улучшения в передаче памяти из CUDA 5 могут помочь в смягчении этого.

Реальная работа с ядром во время передачи памяти, вероятно, приведет к снижению производительности. Тем не менее, вы можете сослаться на код проверки пропускной способности и использовать его в качестве руководства для улучшения ваших передач. Рассмотрите закрепленную память, асинхронные передачи или более новые методы совместной памяти, которые не требуют явной передачи данных. Также имейте в виду, что bandwidthTest учитывает только объемные передачи вокруг памяти и на самом деле не измеряет такие вещи, как общая память.

Конечная производительность будет сильно зависеть от ядра, а также от количества и объема передаваемой памяти.

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