Создать ядро ​​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. У меня очень положительный опыт.

Другие вопросы по тегам