【问题标题】:Using LLVM 3.3 backend to compile OpenCL for AMD使用 LLVM 3.3 后端为 AMD 编译 OpenCL
【发布时间】:2013-06-28 09:40:41
【问题描述】:

究竟如何使用 LLVM 3.3 中的新 R600 后端来生成适合传递给 AMD 卡上的 OpenCL clCreateProgramWithBinary API 的二进制文件?是否有任何代码示例说明如何执行此操作?

我已经看到了一个关于如何为 AMD 编译的 clang 命令行,但我还没有看到如何将输出与驱动程序一起使用。

非常感谢。

【问题讨论】:

    标签: clang opencl llvm amd-gpu


    【解决方案1】:

    您可以阅读llvm/test/CodeGen/R600中的测试用例。

    例如: add.ll

    ;RUN: llc < %s -march=r600 -mcpu=redwood | FileCheck %s
    
    ;CHECK: ADD_INT T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
    
    ;CHECK: ADD_INT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
    
    ;CHECK: ADD_INT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
    
    ;CHECK: ADD_INT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
    
    define void @test(<4 x i32> addrspace(1)* %out, <4 x i32> addrspace(1)* %in) {
    
      %b_ptr = getelementptr <4 x i32> addrspace(1)* %in, i32 1
    
      %a = load <4 x i32> addrspace(1) * %in
    
      %b = load <4 x i32> addrspace(1) * %b_ptr
    
      %result = add <4 x i32> %a, %b
    
      store <4 x i32> %result, <4 x i32> addrspace(1)* %out
    
      ret void
    }
    

    那么你就可以直接通过 clCreateProgramWithBinary 使用输出了。

    【讨论】:

      【解决方案2】:

      也许你应该使用 libclc 来使用 OpenCL 的内置函数。(https://libclc.llvm.org/)
      不幸的是,它要求 LLVM 为 3.7 或更高版本。
      这是因为 LLVM 3.7 及更高版本仅支持 AMD GPU 后端。 在 LLVM 3.3 中,clang 中没有 opencl 前端,llvm 中也没有 amd-gpu 后端。
      (clang 3.3:http://releases.llvm.org/3.3/tools/clang/docs/UsersManual.html
      (LLVM 3.3:http://releases.llvm.org/3.3/docs/index.html
      (LLVM 3.7:http://releases.llvm.org/3.7.0/docs/AMDGPUUsage.html
      (我不知道为什么发行说明中没有 AMD GPU 后端支持。)

      因此,如果要为 AMD GPU 编译 OpenCL 内核,则需要使用 LLVM 3.7 或更高版本。

      如果您负担不起使用 LLVM 3.3,请寻找 R600 后端。具体我不知道,但 AMDGPU Backend 的旧称是 R600 Backend。 (https://www.phoronix.com/scan.php?page=news_item&px=amd-r600-amdgpu-llvm)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-20
        • 2013-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-01
        • 1970-01-01
        • 2023-03-20
        相关资源
        最近更新 更多