2012-10-24 10 views
13

Patrzę na oficjalną dokumentację na stronie Apple i widzę, że istnieje szybki start na temat korzystania z OpenCL na Xcode.Jak skonfigurować Xcode do uruchomienia kodu OpenCL i jak zweryfikować jądra przed zbudowaniem

Może to tylko ja, ale nie miałem szczęścia budując kod, który jest wymieniony w sekcji "hello world OCL".

Uruchomiłem Xcode i utworzyłem pusty projekt; utworzyłem plik jądra main.c i .cl, wklejając to, co jest na stronie dewelopera Apple, i nie jestem w stanie uzyskać niczego do zbudowania, nawet po dodaniu celu.

Witryna AD nie ma projektu do pobrania, więc nie mam pojęcia o przyczynie niepowodzenia (najprawdopodobniej to ja lub witryna przyjmuje kroki i nie wspomina o nich).

Próbowałem również przykładowy projekt z macresearch.org, ale są one dość stare, a projekt testowy w trzeciej lekcji w ogóle nie działa.

Jestem prawie pewny, że inni używają Xcode do uruchomienia kodu OCL, ale nie mogę znaleźć żadnej strony (z wyjątkiem wspomnianego wcześniej macresearch.org), która daje jasną konfigurację, jak uruchomić projekt Xcode z OCL. Czy jest ktoś świadomy samouczka, który pokazuje, jak pracować z OCL i Xcode?

Kupiłem 3 książki na temat OCL (Gaster's Heterogeneous computing z OpenCL, OpenCL Scarpino w akcji i Przewodnik po programowaniu OpenCL Munshiego), i żadne z nich nie wspominają, jak skonfigurować Xcode, podczas gdy oni szczegółowo opisują konfigurację studia wizualnego, a nawet do konfiguracji zaćmienia.

Po bokach; czy istnieje jakaś aplikacja, która jest w stanie zweryfikować kod jądra przed uruchomieniem go w aplikacji OCL?

Z góry dziękujemy za wszelkie sugestie.

Odpowiedz

6

wydaje się więc, że udało mi się częściowo rozwiązać ten problem w ten sposób:

  • utworzyć pusty projekt, utwórz plik main.c i plik jądra

  • stworzyć docelowy jako konsolowa aplikacja

  • w ustawieniach kompilacji dodaj strukturę OpenCL (zobaczysz ją w lewym okienku w przeglądarce plików, jeśli zostanie dodana poprawnie).

  • Określ lokalizację, w której znajduje się plik jądra, oznaczając ścieżkę (nie wystarczy po prostu powiedzieć "moje jądro.cl "; Xcode z jakichś powodów nie dostać, że plik cl jest w tym samym katalogu co główny, więc musisz podać ścieżkę przy ładowaniu pliku jądra)

miałem udany stosując kroki, podczas korzystania z przykładowy kod na stronie programistów Apple.

Jestem pewien, że istnieją inne sposoby, aby to zrobić, ale przynajmniej może to pomóc komu, jak ja, nie miał pojęcia o tym, jak zacząć.

+0

<3 dziękuję <3 –

0

Aby odpowiedzieć na drugą część pytania, na Mountain Lion można uruchomić kompilator OpenCL na foo.cl tak:

/System/Library/Frameworks/OpenCL.framework/Libraries/openclc \ 
    -c -Wall -emit-llvm -arch gpu_32 -o foo.bc foo.cl 

To będzie skompilować foo.cl do LLVM bitowym kodem foo.bc. Ten plik binarny może być używany z clCreateProgramWithBinary, który jest szybszy niż clCreateProgramWithSource. Prawidłowe wartości dla -arch to i386 x86_64 gpu_32.

+0

Wielkie dzięki Eric! To będzie przydatne! –

11

Krótka odpowiedź: https://developer.apple.com/library/mac/#documentation/Performance/Conceptual/OpenCL_MacProgGuide/XCodeHelloWorld/XCodeHelloWorld.html

Długa odpowiedź za polecenia:

Z najnowszym Xcode (i Lion lub wyższym), nie musisz nawet dzwonić pod numer clCreateProgramWithSource, po prostu napisz swoje jądro i zadzwoń do niego ze swojej aplikacji, potrzebne są jednak dodatkowe kroki kompilacji.

Biorę przykład OpenCL Hello World z Apple tutaj przy użyciu domyślnych flag kompilatora (patrz https://developer.apple.com/library/mac/#documentation/Performance/Conceptual/OpenCL_MacProgGuide/ExampleHelloWorld/Example_HelloWorld.html) i pokazujących kroki, które Xcode zrobiłby w tle.

Aby zacząć grę, zrobić:

/System/Library/Frameworks/OpenCL.framework/Libraries/openclc -x cl -cl-std=CL1.1 -cl-auto-vectorize-enable -emit-gcl mykernel.cl 

Stworzy 2 pliki, mykernel.cl.h i mykernel.cl.c (i mykernel.cl.c wykonuje całą magię ładuje swoje jądro do aplikacji). Następny musisz skompilować jądro:

/System/Library/Frameworks/OpenCL.framework/Libraries/openclc -x cl -cl-std=CL1.1 -Os -triple i386-applecl-darwin -emit-llvm-bc -o mykernel.cl.i386.bc mykernel.cl 
/System/Library/Frameworks/OpenCL.framework/Libraries/openclc -x cl -cl-std=CL1.1 -Os -triple x86_64-applecl-darwin -emit-llvm-bc -o mykernel.cl.x86_64.bc mykernel.cl 
/System/Library/Frameworks/OpenCL.framework/Libraries/openclc -x cl -cl-std=CL1.1 -Os -triple gpu_32-applecl-darwin -emit-llvm-bc -o mykernel.cl.gpu_32.bc mykernel.cl 

i last but not least, zbudować aplikację sam:

clang -c -Os -Wall -arch x86_64 -o mykernel.cl.o mykernel.cl.c 
clang -c -Os -Wall -arch x86_64 -o square.o square.c 
clang -framework OpenCL -o square mykernel.cl.o square.o 

I to wszystko. Nie zobaczysz żadnego clCreateProgramWithBinary ani clCreateProgramWithSource w przykładowym kodzie Apple. Wszystko odbywa się za pośrednictwem pliku mykernel.cl.c generowanego przez openclc.

+0

Naprawdę pouczające, wielkie dzięki! –

+0

Dzięki za tę odpowiedź. Czy mógłbyś dać mi znać, jaki jest różnicę między tym, że gcc/llvm skompiluje kod opencl przy użyciu biblioteki opencl a metody, którą opisałeś? – Amir

Powiązane problemy