使用汇编代码创建AMD OpenCL内核

时间:2016-10-08 02:43:27

标签: assembly opencl gpu amd-processor

我想创建一个适用于AMD GPU(Fury Nano)的OpenCL内核。 基本上我想使用OpenCL编写草稿内核,并使用OpenCL API使用clGetProgramInfo输出汇编代码。然后我将修改汇编代码并使用clcreateprogramwithbinary将其加载回程序。

有没有可行的方法呢?

2 个答案:

答案 0 :(得分:2)

我建议使用CLRadeonExtender,它是AMD GCN GPU的真正汇编程序,并支持Windows和Linux上的所有主要OpenCL运行时。我对此有非常积极的经验。

答案 1 :(得分:1)

如果将“-save-temps”添加到create program(或其他任何调用)的调用中,您将看到生成的程序集文件。您可以修改这些,然后可以从此程序集创建一个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愤怒生成代码,请将mcpu更改为fiji。即

... -mcpu=fiji ...