Я должен заглянуть в PTX в оптимизации ядра? Если да, то как?

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

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

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

1 ответов


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

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

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