关于GPU:使用汇编代码创建AMD OpenCL内核

Create AMD OpenCL kernel using Assembly code

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

有没有可能的方法来做到这一点?


如果在创建程序的调用中添加" –save-temps"(或任何称为它的名称),您将看到生成的程序集文件。 您可以修改它们,然后可以从该程序集中创建opencl程序。

另一种获取程序集输出的方法是在支持amd gpu的情况下构建llvm,然后使用-S标志将其编译为程序集。

我用于带有opencl标准2.0的Polaris10的命令行是:

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

您需要通过添加以下内容来修改foo.cl以包括opencl-c.h:

1
#include <opencl-c.h>

到opencl源文件的第一行。

然后,这将在当前目录中将汇编文件生成为foo.s。 要为R9狂怒生成代码,请将mcpu更改为fiji。 即。

1
... -mcpu=fiji ...


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