Привет мир!

Поддержка, встроенная в XCode в OS X v10.7 и позже, подает разработку заявки OpenCL, намного проще, чем это раньше было. В этой главе описываются, как создать проект OpenCL в XCode. (Вы не должны регенерировать уже работающие проекты OpenCL.)

Создавание приложения, использующего OpenCL в XCode

Создать проект, использующий OpenCL в OS X v10.7 или позже:

  1. Создайте свой проект OpenCL в XCode как новый проект OS X (пустой, прекрасен).

  2. Поместите свой код ядра в один или несколько .cl файлов в Вашем проекте XCode. Можно поместить все ядра в единственный .cl файл, или можно разделить их, как Вы выбираете. Можно также включать код неядра, который будет работать на том же устройстве OpenCL как ядро в каждом .cl файле.

    Каждый .cl файл компилируется по умолчанию в три файла, содержащие bitcode для i386, x86_64, и gpu_32 архитектура. (Можно измениться, какие bitcodes сгенерированы с помощью установки сборки Архитектуры OpenCL.)

    Во время выполнения Ваше хост-приложение обнаруживает доступные устройства и определяет который из скомпилированных ядер, чтобы ставить в очередь и выполниться. Рисунок 1-1 показывает очень простой проект OpenCL в XCode.

    Рисунок 1-1  простое ядро OpenCL в XCode
  3. Можно установить следующие настройки сборки для приложений OpenCL:

    • OpenCL — Сборка

      • Архитектура OpenCL. Значение по умолчанию - то, что продукт создается для всех трех архитектуры. Падение позволяет Вам разделиться на команды к трем из -triple i386-applecl-darwin, -triple x86_64-applecl-darwin, и -triple gpu_32-applecl-darwin.

      • Версия Компилятора OpenCL. Значение по умолчанию является OpenCL C 1.1.

    • OpenCL — Генерация кода

      • Автовекторизатор. Выбрать Yes включать автовекторизатор или No выключить автовекторизатор. Эта установка вступает в силу только для CPU.

      • Дважды как единственный. Если Вы устанавливаете этот параметр на Yes, компилятор обрабатывает двойную точность выражения с плавающей точкой как одинарная точность выражения с плавающей точкой. Эта опция доступна для GPUs только. Значение по умолчанию No.

      • Сбросьте denorms для обнуления. Эта булевская переменная управляет, как единственный - и денормализованные числа двойной точности обрабатываются. Если Вы устанавливаете этот параметр на Yes, компилятор может сбросить денормализованные числа одинарной точности для обнуления; если дополнительное расширение для двойной точности поддерживается, это может также сбросить денормализованные числа двойной точности, чтобы обнулить. Это предназначается, чтобы быть подсказкой производительности, и компилятор OpenCL может принять решение не сбросить denorms, чтобы обнулить, если устройство поддерживает одинарную точность (или двойная точность) денормализованные числа (т.е. если CL_FP_DENORM бит не установлен в CL_DEVICE_SINGLE_FP_CONFIG). Этот флаг только запрашивает скалярную и векторную одинарную точность переменные с плавающей точкой и вычисления на этих переменных с плавающей точкой в программе. Это не применяется к чтению от или записи в объекты изображения. Значение по умолчанию No.

      • Уровень оптимизации. Можно выбрать между несколькими типами оптимизации от самой быстрой производительности до самого маленького размера кода. Значение по умолчанию должно оптимизировать для самой быстрой производительности.

      • Ослабьте Соответствие IEEE. Если Вы устанавливаете этот параметр на Yes, компилятор позволяет оптимизацию для арифметики с плавающей точкой, которая может нарушить стандарт IEEE 754 и OpenCL числовые требования соответствия, определенные в разделе 7.4 для одинарной точности, с плавающей точкой, разделить 9.3.9 для двойной точности, с плавающей точкой, и граничное поведение случая, как определено в разделе 7.5 из спецификации OpenCL 1.1. Это предназначается, чтобы быть оптимизацией производительности. Эта опция вызывает макрос препроцессора __FAST_RELAXED_MATH__ быть определенным в программе OpenCL. Значение по умолчанию No.

      • Используйте MAD. Если Вы устанавливаете этот параметр на Yes, Вы позволяете выражения типа a * b + c чтобы быть замененным Умножением - Добавляют (MAD) инструкцию. Если MAD включен, многоступенчатые инструкции в форме a * b + c выполняются на единственном шаге, но точность результатов может поставиться под угрозу. Например, для оптимизации производительности некоторые устройства OpenCL реализуют MAD путем усечения результата a * b работа прежде, чем добавить его к c. Значение по умолчанию для этого параметра No.

    • OpenCL — Предварительная обработка

      Можно ввести разделенный пробелом список макросов препроцессора формы “foo” или “foo=bar” здесь, если Вы желаете.

  4. Поместите свой код узла в один или несколько.c файлов в Вашем проекте XCode. Компиляция Из Командной строки показывает код узла в проекте XCode.

    Рисунок 1-2  OpenCL размещает код в XCode
  5. Соединитесь с платформой OpenCL в Вашем проекте. Посмотрите Добавление Существующей Платформы к Проекту.

  6. Сборка.

    Поскольку Вы компилируете свой узел и свой код ядра перед выполнением их Вы видите ошибки компилятора и предупреждения перед запуском приложения.

  7. Выполненный.

    Результаты показаны в области вывода XCode как показано на рисунке 1-3.

      Результаты рисунка 1-3

Посмотрите Основную Выборку Программирования для линию за линией описание узла и кода ядра в Привет Мировом демонстрационном проекте.

Отладка

Вот несколько подсказок, чтобы помочь Вам отладить свое приложение OpenCL:

Компиляция из командной строки

Можно также скомпилировать и запустить приложение OpenCL за пределами XCode.

Для компиляции из командной строки вызвать openclc.

Можно установить следующие параметры строки компиляции: