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

6
我想创建一个在AMD GPU(Fury Nano)上运行的OpenCL内核。 基本上,我想使用OpenCL编写草稿内核,并使用OpenCL API使用clGetProgramInfo输出汇编代码。然后,我将修改汇编代码并使用clcreateprogramwithbinary将其重新加载到程序中。
有可能实现这个吗?
2个回答

3
我可以建议使用CLRadeonExtender,这是一个真正的AMD GCN GPU汇编器,支持Windows和Linux上所有主要的OpenCL运行时。我对它有非常积极的体验。

3
如果您在创建程序(或称其为其他内容)的调用中添加“--save-temps”,则会看到生成的汇编文件。您可以修改这些文件,然后可以从此汇编创建一个OpenCL程序。
另一种获取汇编输出的方法是使用支持AMD GPU的LLVM构建,然后使用-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 ...

1
生成一个OpenCL程序的汇编代码怎么样? - user7287311
只需将汇编源代码作为内联汇编嵌入到C文件的OpenCL程序中即可。 - user6409506

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接