Подтвердить что ты не робот

Как настроить 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?

Заранее благодарим за любое предложение, которое у вас может быть.

4b9b3361

Ответ 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.