Создайте ядро ​​AMD OpenCL, используя код сборки

Я хочу создать ядро ​​OpenCL, которое работает на графических процессорах AMD (Fury Nano). В основном я хотел бы написать черновик ядра с помощью OpenCL и использовать OpenCL API для вывода кода сборки с помощью clGetProgramInfo. Затем я изменю ассемблерный код и загрузю его обратно в программу с помощью clcreateprogramwithbinary.

Есть какие-нибудь способы сделать это?


person Zk1001    schedule 08.10.2016    source источник


Ответы (2)


Если вы добавите –save-temps к вызову программы create (или как там она называется), вы увидите сгенерированные файлы сборки. Вы можете изменить их, а затем создать программу opencl из этой сборки.

Другой способ получить вывод сборки - собрать llvm с поддержкой amd gpu, а затем скомпилировать это в сборку с помощью флага -S.

Командная строка, которую я использовал для polaris10 со стандартом opencl 2.0, была:

clang -std=CL2.0 -target amdgcn-amd-amdpal-opencl -mcpu=polaris10 -S -c foo.cl -O3

Вам нужно изменить foo.cl, чтобы включить opencl-c.h, добавив

#include <opencl-c.h>

в первую строку исходного файла opencl.

Затем в текущем каталоге будет сгенерирован файл сборки как foo.s. Чтобы сгенерировать код для R9 Fury, измените mcpu на fiji. т.е.

... -mcpu=fiji ...
person Community    schedule 19.03.2018
comment
А как насчет создания программы opencl из ассемблерного кода? - person ; 20.03.2018
comment
Просто включите исходный код сборки в программу opencl как встроенную сборку в файл c. - person ; 20.03.2018

Могу предложить использовать CLRadeonExtender, настоящий ассемблер для графических процессоров AMD GCN с поддержкой всех основные среды выполнения OpenCL как в Windows, так и в Linux. У меня очень положительный опыт.

person Ivan Siutsou    schedule 25.05.2020