2013-06-28 22 views
6

In che modo si utilizza esattamente il nuovo backend R600 in LLVM 3.3 per generare un binario adatto per il passaggio all'API openCL clCreateProgramWithBinary su una scheda AMD? Ci sono esempi di codice per come farlo?Utilizzo di LLVM 3.3 backend per compilare OpenCL per AMD

Ho visto una riga di comando clang per come compilare per AMD, ma non ho visto da nessuna parte come utilizzare l'output con il driver.

Grazie mille.

+0

Qual è il tuo sistema operativo? –

risposta

1

È possibile leggere i casi di test nello llvm/test/CodeGen/R600.

Ad esempio: 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 
} 

allora si può solo usare direttamente l'uscita attraverso clCreateProgramWithBinary.

0

forse si dovrebbe usare libclc di utilizzare le funzioni incorporate di OpenCL. (https://libclc.llvm.org/)
Purtroppo richiede LLVM per essere 3.7 o superiore.
Questo perché LLVM 3.7 e versioni successive supportano solo il backend GPU AMD. In LLVM 3.3, non c'è il front-end opencl in clang, né il backend amd-gpu in llvm.
(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)
(. Non so il motivo per cui AMD GPU supporto back-end non si trova nella nota di rilascio)

Pertanto, se si desidera compilare il kernel OpenCL per la GPU AMD, sarà necessario utilizzare la versione LLVM 3.7 o successiva.

Se non puoi permetterti di usare LLVM 3.3, cerca il backend R600. Non lo so esattamente, ma il precedente nome di AMDGPU Backend è R600 Backend. (https://www.phoronix.com/scan.php?page=news_item&px=amd-r600-amdgpu-llvm)