2013-06-28 11 views
6

Jak dokładnie używa się nowego backendu R600 wewnątrz LLVM 3.3, aby wygenerować plik binarny odpowiedni do przekazania do OpenCL clCreateProgramWithBinary API na karcie AMD? Czy są jakieś próbki kodu, aby to zrobić?Korzystanie z backendu LLVM 3.3 do kompilacji OpenCL dla AMD

Widziałem wiersz polecenia clang, jak skompilować dla AMD, ale nie widziałem nigdzie, jak używać wyjścia z kierowcą.

Dziękuję bardzo.

+0

Jaki jest twój system operacyjny? –

Odpowiedz

1

Możesz przeczytać przypadki testowe w llvm/test/CodeGen/R600.

Na przykład: 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 
} 

Następnie można po prostu użyć wyjścia bezpośrednio przez clCreateProgramWithBinary.

0

Być może należy użyć libclc używać wbudowanych funkcji OpenCL w. (https://libclc.llvm.org/)
niestety wymaga LLVM być 3,7 lub wyższy.
Dzieje się tak dlatego, że LLVM 3.7 i nowsze wersje obsługują jedynie układ AMD GPU. W LLVM 3.3, nie ma otwartego front-end w clang, ani backend amd-gpu w llvm.
(dzyń 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)
(. Nie wiem, dlaczego AMD GPU wsparcie back-end nie jest w nocie uwalnianiu)

Jeśli więc chcesz skompilować jądro OpenCL dla procesora AMD, będziesz musiał użyć LLVM w wersji 3.7 lub nowszej.

Jeśli nie możesz sobie pozwolić na użycie LLVM 3.3, poszukaj zaplecza R600. Nie wiem dokładnie, ale poprzednia nazwa AMDGPU Backend to R600 Backend. (https://www.phoronix.com/scan.php?page=news_item&px=amd-r600-amdgpu-llvm)

Powiązane problemy