OpenCL что это такое за программа

OpenCL что это такое

OpenCL что это такое?

Стандарт OpenCL состоит из нескольких основных частей

  • Абстрактные модели, определяющие требуемые свойства и поведение устройств OpenCL.
  • OpenCL Framework, компонент которого является определением OpenCL API.
  • Спецификация языка программирования, который используется для программирования устройств OpenCL (OpenCL C).
  • Модели OpenCL
  • Модели OpenCL – это абстрактное выражение свойств и поведения платформ и устройств, соответствующих стандарту OpenCL. Это:
  1. Платформенная модель.
  2. Модель исполнения.
  3. Модель памяти.
  4. Модель программирования.

Модель платформы

Модель определяет гетерогенную параллельную машину как компьютерную систему, способную предлагать услуги OpenCL. Эта гетерогенная машина включает в себя хост-систему (хост) и одно или несколько устройств OpenCL (устройства), доступных хосту. Кроме того, модель платформы предполагает, что устройство состоит из вычислительных блоков, которые в дальнейшем делятся на элементы процесса.

Модель исполнения

Программная система, использующая OpenCL, работает на двух уровнях гетерогенной параллельной машины. Классическая прикладная часть (далее приложение) выполняется внутри хоста. Это приложение, помимо прочего, отвечает за связь между хостом и устройствами, а также за выполнение и координацию вычислений на этих устройствах. Само устройство обрабатывает ту часть приложения, которая была выражена на языке OpenCL C (далее программа).

Читайте также: Нужно быстро превратить изображение в текст: приложения OCR к вашим услугам.

Программа имеет форму одного или нескольких вычислительных потоков, которые обрабатываются в технологических элементах устройства. Эти потоки являются экземплярами функционального объекта, называемого ядром. Когда вы запускаете вычисление, приложение определяет одномерное или трехмерное индексное пространство, общее количество экземпляров ядра и (необязательно) размер групп, с которыми эти экземпляры будут связаны. На основе этой информации OpenCL затем определяет количество групп и назначает глобальный индекс, локальный индекс и индекс группы каждому экземпляру ядра. Локальный или глобальный индекс идентифицирует экземпляр ядра в группе или во всех экземплярах. Индекс группы – это идентификатор группы, к которой принадлежит экземпляр ядра.

Контексты и очереди команд

В рамках модели выполнения приложение создает контексты. Контекст включает информацию об устройствах, наборах ядер и программах OpenCL, в которых хранятся ядра, об объектах памяти, которые ядра будут обрабатывать, и других данных. Очереди команд используются для управления устройствами, их синхронизации, перемещения данных и запуска ядер. Эти очереди команд могут обрабатывать команды «по порядку» или «не по порядку». Каждая команда генерирует событие при постановке в очередь. Поскольку большинство команд могут выполняться асинхронно, эти события можно использовать для отслеживания состояния команд и синхронизации их друг с другом.

Модель памяти

Эта модель используется для определения иерархии памяти, которая включает различные области памяти устройства. Он определяет типы памяти, типы доступа и ее распределение, кто и как отвечает за эти операции.

  • Глобальная память – это область памяти, видимая для всех экземпляров ядра.
  • Постоянная память – это область глобальной памяти, в которую экземпляр ядра не имеет разрешения на запись.
  • Локальная память – это область памяти, видимая только экземплярам ядра в группе.
  • Частная память – это область памяти, которая видна только внутри экземпляра ядра.
OpenCL что это

Данные перемещаются между хостом и этой иерархией памяти путем отправки соответствующих команд (чтения, записи или копирования) в очередь команд.

Модель программирования

Модель выполнения показывает, что OpenCL поддерживает модели программирования с параллельными задачами и данными (или их комбинацию). Стандарт OpenCL в основном ориентирован на модель программирования с параллельными данными.

Модель параллельного программирования данных

Эта модель определяет вычисление как параллелизм экземпляров ядра, обрабатывающих компоненты данных входной структуры данных. В индексном пространстве модели выполнения эти экземпляры и способ их сопоставления с этими компонентами данных однозначно определены. В простейшем случае существует один экземпляр ядра для каждой папки данных, но это не всегда так.

Модель параллельного программирования задач ( многозадачность )

Эта модель позволяет одновременно запускать несколько экземпляров разных ядер. Однако в этой модели невозможно требовать тесного параллелизма нескольких экземпляров одного и того же ядра. Это главное отличие от модели программирования с параллельными данными, в которой одновременно выполняется множество экземпляров одного ядра, которые могут тесно взаимодействовать друг с другом.

OpenCL что это за Framework

OpenCL Framework предоставляет приложениям возможность использовать хост-систему и ее устройства в соответствии с моделями OpenCL как гетерогенную параллельную машину. Фреймворк содержит следующие компоненты:

Читайте также: Как посмотреть действия в гугл и как удалить действия в гугл.

  • Интерфейс прикладного программирования OpenCL API, позволяющий работать с системой OpenCL.
  • Компилятор OpenCL C, который переводит программы, написанные на OpenCL C, в конкретный машинный код данной аппаратной платформы.

Язык OpenCL C

Язык программирования OpenCL C основан на стандарте «ISO / IEC 9899: 1999 – Спецификация языка C» (далее C99). В отличие от C99, OpenCL C отличается рядом расширений, в том числе:

  1. Типы векторных данных.
  2. Типы данных и функции, поддерживающие работу с изображениями и их фильтрацию.
  3. Квалификаторы адресного пространства.
  4. Квалификаторы прав доступа.
  5. Функции ядра.
  6. Точно определенное поведение типов данных с плавающей запятой в соответствии со стандартом IEEE 754 . Это также относится ко всем функциям и операторам, которые работают с этими типами.

С другой стороны, OpenCL C вводит несколько ограничений:

  • Указатели функций, поля переменной длины и битовые поля отключены.
  • Подавляющее большинство файлов заголовков стандартной библиотеки C недоступно.
  • Рекурсивные функции не допускаются.
  • Функции ядра не могут объявлять аргумент типа указатель на указатель или ничего обратно.
  • Запись в массивы числовых типов меньше 32 бит запрещена.
  • Встроенный профиль.

В дополнение к стандартному профилю по умолчанию существует также профиль для мобильных или встроенных устройств, которые могут поддерживать модели архитектуры OpenCL, но не обладают достаточной производительностью для обеспечения полного набора функций. В этом «облегченном» профиле некоторые части стандарта являются необязательными (поддержка трехмерных изображений) или полностью удалены (строгое соответствие IEEE-754, 64-битные числовые типы).

Ссылка на основную публикацию
Adblock
detector