Как считать инструкции LLVM IR при выполнении ядра OpenCL? - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь написать хост-код OpenCL для моего собственного ядра и хочу подсчитать, какие инструкции LLVM выполнялись. Моя проблема в том, что IR-представление LLVM ядра теряется после того, как я его собрал, и единственное, что существует, это собственный двоичный файл. Есть ли способ:

  • подсчитать выполненные инструкции нативной архитектуры?
  • найти соответствие между инструкциями нативной архитектуры и представлением IR LLVM и, благодаря этому, посчитатьИнструкции LLVM IR, которые были выполнены?

1 Ответ

1 голос
/ 31 октября 2019

Я думаю, что это невозможно напрямую через API OpenCL. Но есть два способа подсчета нативных / IR-инструкций с помощью инструментов:

IR:

  • Вы можете использовать SPIR-V (определенный Хроносом)IR, аналогично инструментам LLVM IR, но переносимым), см. Этот README для генерации SPIR-V из источника OpenCL. Затем подсчитайте ИК-инструкции результата.

Собственный:

  • Вы можете использовать автономный компилятор OpenCL из некоторых SDK, напримерIntel OpenCL SDK предоставляет инструмент командной строки под названием ioc64, который может генерировать код сборки из OpenCL и даже позволяет указать целевую архитектуру.

  • Вы можете попытаться разобрать OpenCL-сгенерированный двоичный файл (через clGetProgramInfo() с CL_PROGRAM_BINARY_SIZES и CL_PROGRAM_BINARIES), например, с помощью соответствующего инструмента командной строки после сохранения его на диске.

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

...