2013-06-28 20 views
6

AMDカード上のOpenCL clCreateProgramWithBinary APIに渡すのに適したバイナリをLLVM 3.3内の新しいR600バックエンドとどのくらい正確に使用しますか?これを行う方法のサンプルコードはありますか?LLVM 3.3バックエンドを使用してAMD OpenCLをコンパイルする

私は、AMDのコンパイル方法のclangコマンドラインを見てきましたが、どこでどのようにドライバの出力を使用するのか分かりません。

ありがとうございました。

+0

お使いのOSは? –

答えて

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を介して出力を使用することができます。

0

おそらくあなたは、OpenCLのの組み込み関数を使用する libclc を使用する必要があります。(https://libclc.llvm.org/
は、残念ながらそれは3.7以上とすることLLVMが必要です。
LLVM 3.7以降ではAMD GPUバックエンドしかサポートされていないためです。 LLVM 3.3では、clangにはopenclフロントエンドがなく、llvmにはamd-gpuバックエンドもありません。
(打ち鳴らす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のバックエンドサポートは、リリースノートではなく、なぜ私にはわからない。)

したがって、OpenCLカーネルをAMD GPU用にコンパイルする場合は、LLVMバージョン3.7以降を使用する必要があります。

LLVM 3.3を使用する余裕がない場合は、R600バックエンドを探します。私は正確にはわかりませんが、AMDGPUバックエンドの旧名称はR600バックエンドです。 (https://www.phoronix.com/scan.php?page=news_item&px=amd-r600-amdgpu-llvm

関連する問題