6

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

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

4

2 回答 2

3

如果你添加“--save-temps”来调用创建程序(或任何它被调用的)你会看到生成的程序集文件。您可以修改这些,然后可以从该程序集创建一个 opencl 程序。

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

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

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 fury 生成代码,请将 mcpu 更改为 fiji。IE。

... -mcpu=fiji ...
于 2018-03-19T22:48:15.653 回答
3

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

于 2020-05-25T00:18:41.033 回答