Разберите ядро 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/