Оптимизация ядер CUDA относительно регистров - PullRequest
4 голосов
/ 19 мая 2011

Я использую калькулятор CUDA Occupancy, чтобы попытаться оптимизировать мое ядро ​​CUDA. В настоящее время я использую 34 регистра и нулевую разделяемую память ... Таким образом, максимальная занятость составляет 63% для 310 потоков на блок. Когда я мог как-то изменить регистры (например, передавая параметры ядра через разделяемую память) на 20 или ниже, я мог получить заполненность 100%. Это хороший способ сделать это, или вы бы посоветовали мне использовать другой путь оптимизации?

Далее мне также интересно, есть ли более новая версия калькулятора занятости для Compute Capability 2.1!?

Ответы [ 2 ]

15 голосов
/ 19 мая 2011

Некоторые моменты, которые следует учитывать:

  1. 320 потоков в блоке дадут такую ​​же занятость, что и 310, поскольку занятость определяется как активные деформации / максимальные деформации на SM, а размер деформации всегда равен 32 нитям.,Вы не должны никогда использовать размер блока, который не кратен 32. Это просто приводит к потере ядер и циклов.
  2. Параметры ядра передаются в постоянной памяти на вашем устройстве Compute 2.1, и онине влияют на занятость или использование регистра.
  3. В конструкции графического процессора задержка конвейера составляет около 21 цикла.Таким образом, для графического процессора Fermi вам нужно около 43% занятости, чтобы покрыть все задержки внутреннего планирования.Как только это будет сделано, вы можете обнаружить, что в достижении более высокой занятости сравнительно мало пользы.
  4. Стремление к 100% заполненности обычно никогда не является целью конструктивной оптимизации.Если вы этого не сделали, я настоятельно рекомендую просмотреть презентацию Василия Волкова из GTC 2010 «Лучшая производительность при меньшей загруженности» , где он показывает всевозможные удивительные результаты, например, код достигает 85% максимальной пропускной способности памятина 8% заполняемости.
  5. Новейший калькулятор занятости не распространяется на вычислительную систему 2.1, но эффективные правила занятости для вычислительной системы 2.0 применимы и к устройствам 2.1.Дополнительные ядра в мультипроцессоре Compute 2.1 вступают в игру благодаря параллелизму на уровне команд и тому, что почти не выполняется.Это на самом деле не меняет характеристик занятости устройства по сравнению с устройствами с вычислительной поддержкой 2.0.
5 голосов
/ 21 мая 2011

talonmies - это правильно, заполняемость завышена.

Василий Волков провел отличную презентацию на GTC2010 на эту тему: «Лучшая производительность при низкой занятости».

http://www.cs.berkeley.edu/~volkov/volkov10-GTC.pdf

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...