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

Zk1*_*001 6 assembly gpu opencl amd-gpu

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

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

小智 3

如果将“\xe2\x80\x93save-temps”添加到创建程序(或任何名称)的调用中,您将看到生成的汇编文件。您可以修改这些内容,然后从此程序集中创建 opencl 程序。

\n\n

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

\n\n

我用于 Polaris10(采用 opencl 标准 2.0)的命令行是:

\n\n
clang -std=CL2.0 -target amdgcn-amd-amdpal-opencl -mcpu=polaris10 -S -c foo.cl -O3\n
Run Code Online (Sandbox Code Playgroud)\n\n

您需要修改 foo.cl 以包含 opencl-ch,方法是添加

\n\n
#include <opencl-c.h>\n
Run Code Online (Sandbox Code Playgroud)\n\n

到 opencl 源文件的第一行。

\n\n

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

\n\n
... -mcpu=fiji ...\n
Run Code Online (Sandbox Code Playgroud)\n