Стоит ли искать PTX для оптимизации моего ядра?Если так, то как? - PullRequest
7 голосов
/ 10 ноября 2011

Рекомендуете ли вы прочитать PTX-код вашего ядра, чтобы узнать, как оптимизировать ваши ядра?

Один пример: я прочитал, что по коду PTX можно узнать, работает ли автоматическое развертывание цикла.Если это не так, нужно будет развернуть циклы вручную в коде ядра.

  • Существуют ли другие варианты использования кода PTX?
  • Вы смотрите на свой код PTX?
  • Где я могу узнать, как прочитать код PTX, сгенерированный CUDA для моих ядер?

1 Ответ

14 голосов
/ 10 ноября 2011

Первое, что нужно сказать о PTX, это то, что это всего лишь промежуточное представление кода, выполняемого на GPU - языке ассемблера виртуальной машины.PTX собирается на целевой машинный код либо ptxas во время компиляции, либо драйвером во время выполнения.Поэтому, когда вы смотрите на PTX, вы смотрите на то, что испускал компилятор, а не на то, что GPU будет фактически работать.Также можно написать свой собственный код PTX, либо с нуля (это единственная модель компиляции JIT, поддерживаемая в CUDA), либо как часть секций встроенного ассемблера в коде CUDA C (последний официально поддерживается со времен CUDA 4.0, но "неофициально «поддерживается гораздо дольше».CUDA всегда поставляется с полным руководством по языку PTX с инструментарием, и оно полностью задокументировано.Проект ocelot использовал эту документацию для реализации своего собственного кросс-компилятора PTX, который позволяет коду CUDA работать непосредственно на другом оборудовании, первоначально на процессорах x86, но в последнее время GPU AMD .

Если вы хотите увидеть, что на самом деле работает графический процессор (в отличие от того, что генерирует компилятор), NVIDIA теперь предоставляет инструмент для двоичного дизассемблера под названием cudaobjdump, который может отображать фактические сегменты машинного кода в коде, скомпилированном для Fermi.Графические процессоры.Был более старый, неофициальный инструмент под названием decuda, который работал для графических процессоров G80 и G90.

Сказав это, из вывода PTX можно многому научиться, особенно в том, как компилятор применяет оптимизации и какие инструкции он выдает для реализации определенных C-конструкций.Каждая версия инструментария NVIDIA CUDA поставляется с руководством по nvcc и документации для языка PTX .В обоих документах содержится много информации, чтобы узнать, как скомпилировать код ядра CUDA C / C ++ для PTX, и понять, что будут делать инструкции PTX.

...