Как настроить Xcode для запуска кода OpenCL и как проверить ядра перед построением
Я смотрю официальную документацию на сайте Apple, и я вижу, что есть быстрый старт о том, как использовать OpenCL на Xcode.
Возможно, это только я, но мне не удавалось создать код, упомянутый в разделе "hello world OCL".
Я начал Xcode и создал пустой проект; создал файл main.c и .cl, вставляя то, что находится на сайте разработчика Apple, и я не могу ничего построить, даже после добавления цели.
У сайта AD нет проекта для загрузки, поэтому я не имею понятия о причине сбоя (может быть, я скорее всего, или сайт предполагает шаги и не упоминает их).
Я также попробовал образец проекта с macresearch.org, но они довольно древние, и тестовый проект на третьем занятии вообще не работает.
Теперь я уверен, что другие используют Xcode для запуска OCL-кода, но я не могу найти ни одной страницы (кроме вышеупомянутого macresearch.org), которая дает четкую настройку о том, как запустить проект Xcode с OCL. Кто-нибудь знает об учебнике, который показывает, как работать с OCL и Xcode?
Я купил 3 книги по OCL (Gaster Неоднородные вычисления с OpenCL, Scarpino OpenCL в действии и руководство по программированию Munshi OpenCL), и ни один из них не упоминает, как настроить Xcode, в то время как они идут подробно для настройки визуальной студии и даже для затмение.
Со стороны; есть ли какое-либо приложение, которое может проверить код ядра перед его запуском в приложении OCL?
Заранее благодарим за любое предложение, которое у вас может быть.
Ответы
Ответ 1
Мне кажется, что я смог частично решить проблему таким образом:
-
Создайте пустой проект, создайте файл main.c и файл ядра
-
создать цель в качестве консольного приложения
-
в настройках сборки добавьте среду OpenCL (вы увидите, что она отображается в браузере файлов на левой панели, если она будет добавлена правильно).
-
укажите местоположение, в котором находится файл ядра, hardcoding путь (недостаточно просто сказать "my kernel.cl"; Xcode по некоторым причинам не получает, что файл cl находится в том же dir как основной, поэтому вы должны указать путь при загрузке файла ядра)
Я успешно использовал эти шаги, используя пример кода на сайте разработчика Apple.
Я уверен, что есть другие способы сделать это, но, по крайней мере, это может помочь мне, как и я, не иметь понятия о том, как начать.
Ответ 2
Короткий ответ: https://developer.apple.com/library/mac/#documentation/Performance/Conceptual/OpenCL_MacProgGuide/XCodeHelloWorld/XCodeHelloWorld.html
Длинный ответ для командной строки:
С недавним Xcode (и Lion или выше) вам даже не нужно вызывать clCreateProgramWithSource
, просто напишите свое ядро и вызовите его из своего приложения, вам нужно выполнить некоторые дополнительные шаги компиляции.
Я беру пример OpenCL Hello World из Apple здесь, используя флаги компилятора по умолчанию (см. https://developer.apple.com/library/mac/#documentation/Performance/Conceptual/OpenCL_MacProgGuide/ExampleHelloWorld/Example_HelloWorld.html) и показывая шаги, которые Xcode будет делать в фоновом режиме.
Чтобы начать работу, выполните следующие действия:
/System/Library/Frameworks/OpenCL.framework/Libraries/openclc -x cl -cl-std=CL1.1 -cl-auto-vectorize-enable -emit-gcl mykernel.cl
Это создаст 2 файла, mykernel.cl.h и mykernel.cl.c(и mykernel.cl.c сделает все возможное, чтобы загрузить ваше ядро в приложение). Затем вам нужно скомпилировать ядро:
/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
И последнее, но не менее важное: создать само приложение:
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
И что это. Вы не увидите никаких clCreateProgramWithBinary
или clCreateProgramWithSource
в образце кода Apple. Все делается через mykernel.cl.c, сгенерированный openclc
.
Ответ 3
Чтобы ответить на вторую часть вашего вопроса, на Mountain Lion вы можете запустить компилятор OpenCL на foo.cl
следующим образом:
/System/Library/Frameworks/OpenCL.framework/Libraries/openclc \
-c -Wall -emit-llvm -arch gpu_32 -o foo.bc foo.cl
Он скомпилирует foo.cl
в бит-код LLVM foo.bc
. Этот двоичный файл можно использовать с clCreateProgramWithBinary
, который быстрее, чем clCreateProgramWithSource
. Допустимыми значениями для -arch
являются i386 x86_64 gpu_32
.