Создать ядро AMD OpenCL, используя ассемблерный код
Я хочу создать ядро OpenCL, которое будет работать на графических процессорах AMD (Fury Nano). По сути, я хотел бы написать черновик ядра с использованием OpenCL и использовать API OpenCL для вывода кода сборки с использованием clGetProgramInfo. А затем я изменю код сборки и загружу его обратно в программу, используя clcreateprogramwithbinary.
Есть ли возможные способы сделать это?
1 ответ
Если вы добавите "–save-temps" к вызову программы создания (или как она там называется), вы увидите сгенерированные файлы сборки. Вы можете изменить их и затем создать программу 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-ch, добавив
#include <opencl-c.h>
в первой строке исходного файла opencl.
Затем он сгенерирует файл сборки как foo.s в текущем каталоге. Чтобы сгенерировать код для ярости R9, измените mcpu на fiji. то есть.
... -mcpu=fiji ...
Я могу предложить использовать CLRadeonExtender, настоящий ассемблер для графических процессоров AMD GCN с поддержкой всех основных сред выполнения OpenCL как в Windows, так и в Linux. У меня очень положительный опыт.