Разберите ядро ​​OpenCL?

Я не уверен, возможно ли это. Я хочу изучить OpenCL в глубину, поэтому мне было интересно, есть ли инструмент для дизассемблирования скомпилированного ядра OpenCL.

Для обычного исполняемого файла x86 я могу использовать objdump для получения разбора. Есть ли аналогичный инструмент для ядра OpenCL, но?

Ответ 1

Вы можете выполнить следующие действия, чтобы разобрать ядро ​​OpenCL:

  • Используйте clGetEventProfilingInfo для вывода кода ptx в файл, например ptxfile.ptx. Пожалуйста, обратитесь к спецификации OpenCL, чтобы получить более подробную информацию об этой функции.

  • Используйте nvcc для компиляции файла ptx в кубик, например: "nvcc -cubin -arch = sm_20 ptxfile.ptx" скомпилирует ptxfile.ptx на устройстве с вычислительной способностью 2.0.

  • Используйте cuobjdump, чтобы разобрать кубинский файл в инструкции GPU. Например: "cuobjdump -sass ptxfile.cubin"

Надеюсь, что это поможет.

Ответ 2

Я знаю, что это старый вопрос, но если кто-то придет посмотреть на разбор ядра AMD GPU, вы можете сделать следующее в Linux:

export GPU_DUMP_DEVICE_KERNEL=3

Это сделает любое ядро, которое скомпилировано на вашем компьютере, выгружает собранный код в файл в том же каталоге.

Источник: http://dis.unal.edu.co/~gjhernandezp/TOS/GPU/ATI_Stream_SDK_OpenCL_Programming_Guide.pdf

Разделы 4.2.1 и 4.2.2

Ответ 3

Если вы работаете с графическим процессором AMD, вы можете использовать инструмент Analyzer. Он бесплатный, кросс-платформенный и поставляется в двух формах:

  • Инструмент командной строки (поставляется как часть пакета CodeXL, выполняет поиск исполняемого файла CodeXLAnalyzer после установки).
  • Приложение CodeXL GUI (просто переключитесь в режим анализатора в CodeXL).

Вот краткое описание того, что вы можете сделать с помощью анализатора:

  • Скомпилируйте ядра OpenCL, шейдеры OpenGL и шейдеры D3D для любого графического процессора, поддерживаемого установленным драйвером (даже без того, что GPU физически установлен в вашей системе) и получите ISA. Используя CodeXL Analyzer (опция № 2 выше), вы можете получить дополнительную информацию, такую ​​как оценка количества тактовых циклов, необходимых для выполнения инструкции.
  • Просмотр статистики, сгенерированной компилятором (использование SGPR, использование VGPR и т.д.).
  • Создайте код AMD IL для ядра OpenCL.
  • Экспортировать скомпилированные двоичные файлы (ELF, в двоичном формате).

Вы можете скачать набор инструментов CodeXL отсюда: https://gpuopen.com/compute-product/codexl/