🗊Презентация Введение в OpenCL

Нажмите для полного просмотра!
Введение в OpenCL, слайд №1Введение в OpenCL, слайд №2Введение в OpenCL, слайд №3Введение в OpenCL, слайд №4Введение в OpenCL, слайд №5Введение в OpenCL, слайд №6Введение в OpenCL, слайд №7Введение в OpenCL, слайд №8Введение в OpenCL, слайд №9Введение в OpenCL, слайд №10Введение в OpenCL, слайд №11Введение в OpenCL, слайд №12Введение в OpenCL, слайд №13Введение в OpenCL, слайд №14Введение в OpenCL, слайд №15Введение в OpenCL, слайд №16Введение в OpenCL, слайд №17Введение в OpenCL, слайд №18Введение в OpenCL, слайд №19Введение в OpenCL, слайд №20Введение в OpenCL, слайд №21Введение в OpenCL, слайд №22Введение в OpenCL, слайд №23Введение в OpenCL, слайд №24Введение в OpenCL, слайд №25Введение в OpenCL, слайд №26Введение в OpenCL, слайд №27Введение в OpenCL, слайд №28Введение в OpenCL, слайд №29Введение в OpenCL, слайд №30Введение в OpenCL, слайд №31Введение в OpenCL, слайд №32Введение в OpenCL, слайд №33Введение в OpenCL, слайд №34Введение в OpenCL, слайд №35Введение в OpenCL, слайд №36Введение в OpenCL, слайд №37Введение в OpenCL, слайд №38Введение в OpenCL, слайд №39Введение в OpenCL, слайд №40Введение в OpenCL, слайд №41Введение в OpenCL, слайд №42Введение в OpenCL, слайд №43Введение в OpenCL, слайд №44Введение в OpenCL, слайд №45Введение в OpenCL, слайд №46Введение в OpenCL, слайд №47Введение в OpenCL, слайд №48Введение в OpenCL, слайд №49Введение в OpenCL, слайд №50Введение в OpenCL, слайд №51Введение в OpenCL, слайд №52Введение в OpenCL, слайд №53Введение в OpenCL, слайд №54Введение в OpenCL, слайд №55Введение в OpenCL, слайд №56Введение в OpenCL, слайд №57Введение в OpenCL, слайд №58Введение в OpenCL, слайд №59Введение в OpenCL, слайд №60Введение в OpenCL, слайд №61Введение в OpenCL, слайд №62Введение в OpenCL, слайд №63Введение в OpenCL, слайд №64

Содержание

Вы можете ознакомиться и скачать презентацию на тему Введение в OpenCL. Доклад-сообщение содержит 64 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Введение в OpenCL
Горшков А.В., Бастраков С.И.
ВМК ННГУ
Описание слайда:
Введение в OpenCL Горшков А.В., Бастраков С.И. ВМК ННГУ

Слайд 2





Содержание
Стандарт гетерогенных вычислений OpenCL
Пример приложения с использованием OpenCL
Обзор реализаций OpenCL
Описание слайда:
Содержание Стандарт гетерогенных вычислений OpenCL Пример приложения с использованием OpenCL Обзор реализаций OpenCL

Слайд 3





Стандарт гетерогенных вычислений OpenCL
Описание слайда:
Стандарт гетерогенных вычислений OpenCL

Слайд 4





Стандарт OpenCL
OpenCL – Open Computing Language, открытый стандарт для гетерогенных вычислений, разрабатываемый Khronos Group совместно с представителями производителей устройств и ПО.
Первая версия стандарта – ноябрь 2008 года.
Поддерживается Apple, NVIDIA, AMD/ATI, Intel, …
Поддержка широкого класса вычислительных устройств за счет введения обобщенных моделей (модели платформы, памяти, исполнения, …).
Описание слайда:
Стандарт OpenCL OpenCL – Open Computing Language, открытый стандарт для гетерогенных вычислений, разрабатываемый Khronos Group совместно с представителями производителей устройств и ПО. Первая версия стандарта – ноябрь 2008 года. Поддерживается Apple, NVIDIA, AMD/ATI, Intel, … Поддержка широкого класса вычислительных устройств за счет введения обобщенных моделей (модели платформы, памяти, исполнения, …).

Слайд 5





Область применения OpenCL
Описание слайда:
Область применения OpenCL

Слайд 6





Охват областей параллелизма
Описание слайда:
Охват областей параллелизма

Слайд 7





Основные особенности стандарта
Исходный код приложения легко портируется на другие платформы.
Поддержка широкого класса устройств достигается за счет введения обобщенных моделей данных систем:
модель платформы (platform model);
модель памяти (memory model);
модель исполнения (execution model);
модель программирования (programming model).
Все модели являются абстрактными (не привязанными к конкретным устройствам), реализация предоставляется производителем.
Описание слайда:
Основные особенности стандарта Исходный код приложения легко портируется на другие платформы. Поддержка широкого класса устройств достигается за счет введения обобщенных моделей данных систем: модель платформы (platform model); модель памяти (memory model); модель исполнения (execution model); модель программирования (programming model). Все модели являются абстрактными (не привязанными к конкретным устройствам), реализация предоставляется производителем.

Слайд 8





Инструментарий OpenCL
Platform Layer API:
уровень аппаратной абстракции над различными вычислительными устройствам;
запрос, выбор и инициализация устройств;
создание контекстов и очередей команд.
Runtime API:
исполнение вычислительных ядер;
планирование, вычисления и ресурсы памяти.
Язык OpenCL C:
потоковые расширения языка C для написания ядер.
Описание слайда:
Инструментарий OpenCL Platform Layer API: уровень аппаратной абстракции над различными вычислительными устройствам; запрос, выбор и инициализация устройств; создание контекстов и очередей команд. Runtime API: исполнение вычислительных ядер; планирование, вычисления и ресурсы памяти. Язык OpenCL C: потоковые расширения языка C для написания ядер.

Слайд 9





Модель платформы
Платформа представляется в виде хост-системы (host), связанной с одним или несколькими устройствами (device).
Центральный процессор может являться одновременно и хост-системой и устройством.
Устройство  состоит  из  одного  или  более  вычислительных модулей  (compute units),  которые  могут  включать  в  себя несколько обрабатывающих элементов (processing elements).
Непосредственно вычисления  производятся  в  обрабатывающих  элементах устройства.
Описание слайда:
Модель платформы Платформа представляется в виде хост-системы (host), связанной с одним или несколькими устройствами (device). Центральный процессор может являться одновременно и хост-системой и устройством. Устройство состоит из одного или более вычислительных модулей (compute units), которые могут включать в себя несколько обрабатывающих элементов (processing elements). Непосредственно вычисления производятся в обрабатывающих элементах устройства.

Слайд 10





Хост и устройства
Описание слайда:
Хост и устройства

Слайд 11





Выбор платформы
Функция для получения всех доступных платформ:
num_entries – максимальное количество, которое может быть возвращено;
platforms – память для записи платформ, если NULL, платформы не записываются;
num_platforms – память для записи количества платформ.
Типичная схема работы:
первый вызов для определения количества платформ;
выделение памяти для объектов платформ;
второй вызов для получения объектов платформ.
Описание слайда:
Выбор платформы Функция для получения всех доступных платформ: num_entries – максимальное количество, которое может быть возвращено; platforms – память для записи платформ, если NULL, платформы не записываются; num_platforms – память для записи количества платформ. Типичная схема работы: первый вызов для определения количества платформ; выделение памяти для объектов платформ; второй вызов для получения объектов платформ.

Слайд 12





Выбор платформы
Функция для получения характеристик платформы:
platform – платформа (ее ID);
param_name – имя запрашиваемой характеристики;
param_value – указатель на память для записи результата;
param_value_size – количество памяти, выделенной под param_value;
param_value_size_ret – записанное количество байт.
Описание слайда:
Выбор платформы Функция для получения характеристик платформы: platform – платформа (ее ID); param_name – имя запрашиваемой характеристики; param_value – указатель на память для записи результата; param_value_size – количество памяти, выделенной под param_value; param_value_size_ret – записанное количество байт.

Слайд 13





Выбор платформы
Возможные значения param_name:
CL_PLATFORM_VERSION – версия платформы;
CL_PLATFORM_NAME – имя платформы;
CL_PLATFORM_VENDOR – название производителя;
CL_PLATFORM_EXTENSIONS – поддерживаемые расширения стандарта.
На основе этой информации можно, к примеру, выбрать платформу нужного производителя, если установлено несколько реализаций OpenCL.
Описание слайда:
Выбор платформы Возможные значения param_name: CL_PLATFORM_VERSION – версия платформы; CL_PLATFORM_NAME – имя платформы; CL_PLATFORM_VENDOR – название производителя; CL_PLATFORM_EXTENSIONS – поддерживаемые расширения стандарта. На основе этой информации можно, к примеру, выбрать платформу нужного производителя, если установлено несколько реализаций OpenCL.

Слайд 14





Выбор устройства
Функция для получения всех устройств указанного типа (device_type) в данной платформе (platform).
Типичная схема работы с 2 вызовами (подобно работе с clGetPlatformIDs), num_entries задает максимальное количество устройств, которые могут быть записаны в devices.
Описание слайда:
Выбор устройства Функция для получения всех устройств указанного типа (device_type) в данной платформе (platform). Типичная схема работы с 2 вызовами (подобно работе с clGetPlatformIDs), num_entries задает максимальное количество устройств, которые могут быть записаны в devices.

Слайд 15





Выбор устройства
Возможные значения device_type:
CL_DEVICE_TYPE_CPU – центральный процессор (возможно, многоядерный);
CL_DEVICE_TYPE_GPU – графический процессор, поддерживающий работу с графическими API;
CL_DEVICE_TYPE_ACCELERATOR – периферийный ускоритель (например, Intel Xeon Phi);
CL_DEVICE_TYPE_DEFAULT – тип процессора по умолчанию (свойство системы);
CL_DEVICE_TYPE_ALL – все доступные OpenCL-совместимые устройства.
Описание слайда:
Выбор устройства Возможные значения device_type: CL_DEVICE_TYPE_CPU – центральный процессор (возможно, многоядерный); CL_DEVICE_TYPE_GPU – графический процессор, поддерживающий работу с графическими API; CL_DEVICE_TYPE_ACCELERATOR – периферийный ускоритель (например, Intel Xeon Phi); CL_DEVICE_TYPE_DEFAULT – тип процессора по умолчанию (свойство системы); CL_DEVICE_TYPE_ALL – все доступные OpenCL-совместимые устройства.

Слайд 16





Выбор устройства
Функция для получения характеристик устройства, смысл параметров аналогичен параметрам функции clGetPlatformInfo.
Позволяет получить широкий перечень характеристик, от типа устройства и названия производителя до размеров памяти всех типов, поддерживаемой арифметики и др.
Описание слайда:
Выбор устройства Функция для получения характеристик устройства, смысл параметров аналогичен параметрам функции clGetPlatformInfo. Позволяет получить широкий перечень характеристик, от типа устройства и названия производителя до размеров памяти всех типов, поддерживаемой арифметики и др.

Слайд 17





Контекст
Контекст (context) служит для управления объектами и ресурсами OpenCL.
Все ресурсы OpenCL привязаны к контексту.
С контекстом ассоциированы следующие данные:
устройства;
объекты программ;
ядра;
объекты памяти;
очереди команд.
Описание слайда:
Контекст Контекст (context) служит для управления объектами и ресурсами OpenCL. Все ресурсы OpenCL привязаны к контексту. С контекстом ассоциированы следующие данные: устройства; объекты программ; ядра; объекты памяти; очереди команд.

Слайд 18





Создание контекста
Функция для создания контекста с указанными устройствами.
pfn_notify – callback-функция, вызываемая при возникновении ошибок при дальнейшей работе с контекстом.
Есть также функция clCreateContextFromType для создания контекста, ассоциированного с устройствами определенного типа.
Описание слайда:
Создание контекста Функция для создания контекста с указанными устройствами. pfn_notify – callback-функция, вызываемая при возникновении ошибок при дальнейшей работе с контекстом. Есть также функция clCreateContextFromType для создания контекста, ассоциированного с устройствами определенного типа.

Слайд 19





Очередь команд
Очередь команд (command queue) является механизмом запроса действия на устройстве со стороны хоста.
В качестве действия на устройстве могут выступать операции с памятью, запуск ядер, синхронизация.
Для каждого устройства требуется своя очередь команд.
Команды внутри очереди могут выполняться синхронно и асинхронно; в порядке установки или нет.
Описание слайда:
Очередь команд Очередь команд (command queue) является механизмом запроса действия на устройстве со стороны хоста. В качестве действия на устройстве могут выступать операции с памятью, запуск ядер, синхронизация. Для каждого устройства требуется своя очередь команд. Команды внутри очереди могут выполняться синхронно и асинхронно; в порядке установки или нет.

Слайд 20





Создание очереди команд
Функция для создания очереди команд, служащей для взаимодействия между заданными контекстом и устройством.
Описание слайда:
Создание очереди команд Функция для создания очереди команд, служащей для взаимодействия между заданными контекстом и устройством.

Слайд 21





Объекты памяти
Все операции работы с памятью на устройстве осуществляются с использованием объектов памяти.
Прямая работа с памятью устройства со стороны хоста невозможна (даже если устройство является центральным процессором).
Для представления одномерных массивов данных используются буферы (buffer objects). Данные представлены в непрерывном участке памяти, есть прямой доступ со стороны устройства как к массивам.
Для представления 2- и 3-мерных массивов данных используются изображения (image objects). Для доступа со стороны устройства используются специальные объекты – сэмплеры (sampler objects).
Описание слайда:
Объекты памяти Все операции работы с памятью на устройстве осуществляются с использованием объектов памяти. Прямая работа с памятью устройства со стороны хоста невозможна (даже если устройство является центральным процессором). Для представления одномерных массивов данных используются буферы (buffer objects). Данные представлены в непрерывном участке памяти, есть прямой доступ со стороны устройства как к массивам. Для представления 2- и 3-мерных массивов данных используются изображения (image objects). Для доступа со стороны устройства используются специальные объекты – сэмплеры (sampler objects).

Слайд 22





Создание буфера
Функция для создания буфера (объект типа cl_mem) указанного размера size байт в указанном контексте.
Флаги определяют вариант доступа к буферу со стороны устройства, нужно ли копировать в буфер данные из host_ptr и некоторые другие свойства.
Описание слайда:
Создание буфера Функция для создания буфера (объект типа cl_mem) указанного размера size байт в указанном контексте. Флаги определяют вариант доступа к буферу со стороны устройства, нужно ли копировать в буфер данные из host_ptr и некоторые другие свойства.

Слайд 23





Создание буфера
flags является битовым полем со следующими значениями:
CL_MEM_READ_WRITE – доступ на чтение и запись;
CL_MEM_WRITE_ONLY – доступ только на запись;
CL_MEM_READ_ONLY – доступ только на чтение;
CL_MEM_USE_HOST_PTR – использовать для хранения объекта буфера (на стороне хоста) в указанной памяти;
CL_MEM_ALLOC_HOST_PTR – выделить для хранения буфера новую память; 
CL_MEM_COPY_HOST_PTR – скопировать в созданный буфер size байт из host_ptr.
Описание слайда:
Создание буфера flags является битовым полем со следующими значениями: CL_MEM_READ_WRITE – доступ на чтение и запись; CL_MEM_WRITE_ONLY – доступ только на запись; CL_MEM_READ_ONLY – доступ только на чтение; CL_MEM_USE_HOST_PTR – использовать для хранения объекта буфера (на стороне хоста) в указанной памяти; CL_MEM_ALLOC_HOST_PTR – выделить для хранения буфера новую память; CL_MEM_COPY_HOST_PTR – скопировать в созданный буфер size байт из host_ptr.

Слайд 24





Обмен данными между хостом и устройством
Для обмена данными служат функции:
 clEnqueue{Read|Write}{Buffer|Image}
Под записью (write) понимается копирование данных с хоста на устройства, под чтением (read) – с устройства на хост.
Возможна также установка прямого соответствия между участками памяти на хосте и устройстве при помощи clEnqueueMap{Buffer|Image}
Описание слайда:
Обмен данными между хостом и устройством Для обмена данными служат функции: clEnqueue{Read|Write}{Buffer|Image} Под записью (write) понимается копирование данных с хоста на устройства, под чтением (read) – с устройства на хост. Возможна также установка прямого соответствия между участками памяти на хосте и устройстве при помощи clEnqueueMap{Buffer|Image}

Слайд 25





Обмен данными между хостом и устройством
Описание слайда:
Обмен данными между хостом и устройством

Слайд 26





Объекты программы и ядер
Ядром называется функция, являющаяся частью программы и параллельно исполняющаяся на устройстве. Ядро является аналогом потоковой функции.
Часть, выполняющаяся на устройстве, состоит из набора ядер, объявленных с квалификатором __kernel.
Компилирование ядер может осуществляться во время исполнения программы с помощью функций API.
Объект программы (program object) служит для представления следующих данных:
исходные и/или скомпилированные тексты ядер;
данные о компиляции.
Работа с ядрами со стороны осуществляется при помощи объектов ядер.
Описание слайда:
Объекты программы и ядер Ядром называется функция, являющаяся частью программы и параллельно исполняющаяся на устройстве. Ядро является аналогом потоковой функции. Часть, выполняющаяся на устройстве, состоит из набора ядер, объявленных с квалификатором __kernel. Компилирование ядер может осуществляться во время исполнения программы с помощью функций API. Объект программы (program object) служит для представления следующих данных: исходные и/или скомпилированные тексты ядер; данные о компиляции. Работа с ядрами со стороны осуществляется при помощи объектов ядер.

Слайд 27





Создание объекта программы
Функция для создания объекта программы из исходного кода ядер (компилирование при этом не производится).
Описание слайда:
Создание объекта программы Функция для создания объекта программы из исходного кода ядер (компилирование при этом не производится).

Слайд 28





Компилирование программы
Функция для компилирования и сборки ядер в составе программы для указанных устройств. Опции сборки (макросы, опции компилятора) указываются через options.
В случае ошибок компиляции возвращаемый результат отличен от CL_SUCCESS, подробная информация может быть получена при помощи функции clGetProgramBuildInfo()
Описание слайда:
Компилирование программы Функция для компилирования и сборки ядер в составе программы для указанных устройств. Опции сборки (макросы, опции компилятора) указываются через options. В случае ошибок компиляции возвращаемый результат отличен от CL_SUCCESS, подробная информация может быть получена при помощи функции clGetProgramBuildInfo()

Слайд 29





Создание объектов ядер
Функция для создания объекта ядра по имени функции-ядра в исходном коде.
Описание слайда:
Создание объектов ядер Функция для создания объекта ядра по имени функции-ядра в исходном коде.

Слайд 30





Модель исполнения
Каждый экземпляр ядра называется элементом работы (work-item). При исполнении ядра элементы работы могут выполняться параллельно.
Элементы работы объединены в группы работ (work-group), независимые друг от друга.
Иерархия элементов работы и групп работ определяется пространством индексов (index space).
Для распределения работы каждая группа работ имеет индекс, каждый элемент работы имеет уникальный глобальный и локальный (внутри группы работы) индексы.
Индексы могут быть 1-, 2- и 3-мерные.
Пример: ядро вычисляет матричное произведение, каждый элемент работы вычисляет один элемент результирующей матрицы.
Описание слайда:
Модель исполнения Каждый экземпляр ядра называется элементом работы (work-item). При исполнении ядра элементы работы могут выполняться параллельно. Элементы работы объединены в группы работ (work-group), независимые друг от друга. Иерархия элементов работы и групп работ определяется пространством индексов (index space). Для распределения работы каждая группа работ имеет индекс, каждый элемент работы имеет уникальный глобальный и локальный (внутри группы работы) индексы. Индексы могут быть 1-, 2- и 3-мерные. Пример: ядро вычисляет матричное произведение, каждый элемент работы вычисляет один элемент результирующей матрицы.

Слайд 31





Пространство индексов
Описание слайда:
Пространство индексов

Слайд 32





Написание ядер
Ядро является функцией со спецификатором __kernel, возвращающей void.
Доступ к индексам элемента работы внутри ядра осуществляется при помощи функций:
get_global_id(dim) 
get_global_size(dim)
get_group_id(dim)
get_num_groups(dim)
get_local_id(dim)
get_local_size(dim),
где dim – номер размерности (0, 1 или 2 в текущих реализациях OpenCL).
Описание слайда:
Написание ядер Ядро является функцией со спецификатором __kernel, возвращающей void. Доступ к индексам элемента работы внутри ядра осуществляется при помощи функций: get_global_id(dim) get_global_size(dim) get_group_id(dim) get_num_groups(dim) get_local_id(dim) get_local_size(dim), где dim – номер размерности (0, 1 или 2 в текущих реализациях OpenCL).

Слайд 33





Пример ядра
Сложение двух векторов. Пространство индексов одномерно, каждый элемент работы вычисляет один элемент результирующего вектора:
__kernel void vecAdd (__global int * a,  	__global int * b, __global int * c)
{
	int idx = get_global_id(0);
	c[idx] = a[idx] + b[idx];
}
Описание слайда:
Пример ядра Сложение двух векторов. Пространство индексов одномерно, каждый элемент работы вычисляет один элемент результирующего вектора: __kernel void vecAdd (__global int * a, __global int * b, __global int * c) { int idx = get_global_id(0); c[idx] = a[idx] + b[idx]; }

Слайд 34





Запуск ядра
Функция для установки значений аргументов ядра при его вызове.
Необходимо вызвать ее для каждого аргумента ядра.
Для передачи одномерных массивов необходимо передать соответствующий буфер.
Описание слайда:
Запуск ядра Функция для установки значений аргументов ядра при его вызове. Необходимо вызвать ее для каждого аргумента ядра. Для передачи одномерных массивов необходимо передать соответствующий буфер.

Слайд 35





Запуск ядра
Функция для постановки запуска ядра в очередь команд, указываются параметры пространства индексов:
work_dim – размерность пространства индексов;
global_work_offset – начальные глобальные индексы;
global_work_size – общее количество элементов работы;
local_work_size – количество элементов работы в группе работ.
Описание слайда:
Запуск ядра Функция для постановки запуска ядра в очередь команд, указываются параметры пространства индексов: work_dim – размерность пространства индексов; global_work_offset – начальные глобальные индексы; global_work_size – общее количество элементов работы; local_work_size – количество элементов работы в группе работ.

Слайд 36





Модель памяти
Типы памяти на устройстве:
глобальная (global), доступ из всех элементов работы;
константная (constant), доступ из всех элементов работы только на чтение;
локальная (local), доступ из элементов работы в одной группе работ (эксклюзивна для группы работ);
частная (private), эксклюзивна для каждого элемента работы.
Гарантируется область видимости, но не конкретная реализация и размещение различных областей памяти.
Описание слайда:
Модель памяти Типы памяти на устройстве: глобальная (global), доступ из всех элементов работы; константная (constant), доступ из всех элементов работы только на чтение; локальная (local), доступ из элементов работы в одной группе работ (эксклюзивна для группы работ); частная (private), эксклюзивна для каждого элемента работы. Гарантируется область видимости, но не конкретная реализация и размещение различных областей памяти.

Слайд 37





Модель памяти
Описание слайда:
Модель памяти

Слайд 38





Квалификаторы памяти
__global или global – данные в глобальной памяти.
__constant или constant – данные в константной памяти.
__local или local – данные в локальной памяти.
__private или private – данные в частной памяти.
Для изображений (image) используются квалификаторы режима доступа __read_only/__write_only.
Явное указание квалификаторов памяти обязательно для указателей в ядре.
Описание слайда:
Квалификаторы памяти __global или global – данные в глобальной памяти. __constant или constant – данные в константной памяти. __local или local – данные в локальной памяти. __private или private – данные в частной памяти. Для изображений (image) используются квалификаторы режима доступа __read_only/__write_only. Явное указание квалификаторов памяти обязательно для указателей в ядре.

Слайд 39





Синхронизация в ядре
Функция для барьерной синхронизации элементов работы внутри одной группы работы.
flags определяют операции упорядочивания обращений к памяти, выполняемые при синхронизации, возможные значения:
CLK_LOCAL_MEM_FENCE;
CLK_GLOBAL_MEM_FENCE.
Нет явной возможности для барьерной синхронизации элементов работы в разных группах работ в ходе работы ядра.
Есть атомарные функции для локальной и глобальной памяти.
Описание слайда:
Синхронизация в ядре Функция для барьерной синхронизации элементов работы внутри одной группы работы. flags определяют операции упорядочивания обращений к памяти, выполняемые при синхронизации, возможные значения: CLK_LOCAL_MEM_FENCE; CLK_GLOBAL_MEM_FENCE. Нет явной возможности для барьерной синхронизации элементов работы в разных группах работ в ходе работы ядра. Есть атомарные функции для локальной и глобальной памяти.

Слайд 40





Синхронизация в очереди команд
Гибкий механизм синхронизации и асинхронного выполнения команд в одной очереди команд:
барьерная синхронизация;
синхронизация на основе событий. 
Позволяет эффективно задействовать устройства за счет перекрытия вычислений и обменов данными.
Описание слайда:
Синхронизация в очереди команд Гибкий механизм синхронизации и асинхронного выполнения команд в одной очереди команд: барьерная синхронизация; синхронизация на основе событий. Позволяет эффективно задействовать устройства за счет перекрытия вычислений и обменов данными.

Слайд 41





Освобождение ресурсов
Используется механизм подсчета ссылок на все ресурсы OpenCL (объекты памяти, ядра, программа, очередь команд, контекст).
clRetain… увеличивает счетчик ссылок на 1 (вызывается автоматически при создании объектов), clRelease… уменьшает счетчик ссылок на 1 и освобождает ресурс при необходимости.
Примеры:
Описание слайда:
Освобождение ресурсов Используется механизм подсчета ссылок на все ресурсы OpenCL (объекты памяти, ядра, программа, очередь команд, контекст). clRetain… увеличивает счетчик ссылок на 1 (вызывается автоматически при создании объектов), clRelease… уменьшает счетчик ссылок на 1 и освобождает ресурс при необходимости. Примеры:

Слайд 42





Контроль ошибок
Все функции OpenCL API возвращают коды ошибок (в виде непосредственного результата либо через специальный аргумент-указатель на статус ошибки).
Возвращаемое значение CL_SUCCESS, равное 0, соответствует успешному завершению функции.
Возвращаемые отрицательные значения соответствуют ошибкам, определение соответствующих макросов в файле cl.h.
Описание слайда:
Контроль ошибок Все функции OpenCL API возвращают коды ошибок (в виде непосредственного результата либо через специальный аргумент-указатель на статус ошибки). Возвращаемое значение CL_SUCCESS, равное 0, соответствует успешному завершению функции. Возвращаемые отрицательные значения соответствуют ошибкам, определение соответствующих макросов в файле cl.h.

Слайд 43





Общая схема работы
Описание слайда:
Общая схема работы

Слайд 44





Модель программирования
Параллелизм по данным (data parallel):
Соответствие между пространством индексов и размером задачи.
Каждый элемент работы выполняет фиксированное количество операций, масштабируется количество элементов работы и групп работ).
Параллелизм по задачам (task parallel):
Разные ядра исполняются независимо на различных пространствах индексов.
Постановка в очередь нескольких задач.
Синхронизация:
Между элементами работы в одной группе работ.
Между командами в одной очереди команд.
Описание слайда:
Модель программирования Параллелизм по данным (data parallel): Соответствие между пространством индексов и размером задачи. Каждый элемент работы выполняет фиксированное количество операций, масштабируется количество элементов работы и групп работ). Параллелизм по задачам (task parallel): Разные ядра исполняются независимо на различных пространствах индексов. Постановка в очередь нескольких задач. Синхронизация: Между элементами работы в одной группе работ. Между командами в одной очереди команд.

Слайд 45





Пример приложения с использованием OpenCL
Описание слайда:
Пример приложения с использованием OpenCL

Слайд 46





Постановка задачи
В качестве учебного примера рассмотрим задачу поэлементного возведения в квадрат компонент вектора.
На данном примере будут продемонстрированы все основные этапы разработки приложения с использованием OpenCL.
Описание слайда:
Постановка задачи В качестве учебного примера рассмотрим задачу поэлементного возведения в квадрат компонент вектора. На данном примере будут продемонстрированы все основные этапы разработки приложения с использованием OpenCL.

Слайд 47





Этап 1 – разработка ядер
Каждый элемент работы вычисляет квадрат одного из элементов массива.
Для простоты сделаем ядро строковой константой.
Описание слайда:
Этап 1 – разработка ядер Каждый элемент работы вычисляет квадрат одного из элементов массива. Для простоты сделаем ядро строковой константой.

Слайд 48





Этап 2 – выбор платформы и устройств
Получение информации о доступных платформах:
Описание слайда:
Этап 2 – выбор платформы и устройств Получение информации о доступных платформах:

Слайд 49





Этап 2 – выбор платформы и устройств
Создание контекста:
Описание слайда:
Этап 2 – выбор платформы и устройств Создание контекста:

Слайд 50





Этап 2 – выбор платформы и устройств
Выбор устройства:
Описание слайда:
Этап 2 – выбор платформы и устройств Выбор устройства:

Слайд 51





Этап 3 – создание очереди команд
Создание очереди команд для заданного контекста и выбранного устройства:
Описание слайда:
Этап 3 – создание очереди команд Создание очереди команд для заданного контекста и выбранного устройства:

Слайд 52





Этап 4 – объекты программы и ядер
Создание объектов программы и ядра:
Описание слайда:
Этап 4 – объекты программы и ядер Создание объектов программы и ядра:

Слайд 53





Этап 5 – объекты памяти
Создание входного и выходного буферов:
Описание слайда:
Этап 5 – объекты памяти Создание входного и выходного буферов:

Слайд 54





Этап 5 – объекты памяти
Копирование входного буфера в память устройства:
Описание слайда:
Этап 5 – объекты памяти Копирование входного буфера в память устройства:

Слайд 55





Этап 6 – запуск ядра
Установка аргументов ядра:
Описание слайда:
Этап 6 – запуск ядра Установка аргументов ядра:

Слайд 56





Этап 6 – запуск ядра
Определение глобального и локального размеров работы и запуск ядра:
Описание слайда:
Этап 6 – запуск ядра Определение глобального и локального размеров работы и запуск ядра:

Слайд 57





Этап 7 – загрузка результатов вычислений
Копирование результирующего буфера в память хоста:
Описание слайда:
Этап 7 – загрузка результатов вычислений Копирование результирующего буфера в память хоста:

Слайд 58





Этап 8 – освобождение ресурсов
Освобождение использованных ресурсов:
Описание слайда:
Этап 8 – освобождение ресурсов Освобождение использованных ресурсов:

Слайд 59





Обзор реализаций OpenCL
Описание слайда:
Обзор реализаций OpenCL

Слайд 60





Использование OpenCL
Основным достоинством OpenCL является переносимость между различными вычислительными платформами. На данный момент OpenCL является уникальным средством такого рода.
Естественным требованием для этого является необходимость оперирования обобщенными терминами, что усложняет модель программирования и затрудняет оптимизацию для конкретных платформ.
При этом стандарт хорошо проработан и содержит возможности для низкоуровневой оптимизации для конкретных устройств и достижения высокой эффективности. Техники оптимизации для разных платформ (например, CPU и GPU) существенно различны.
Описание слайда:
Использование OpenCL Основным достоинством OpenCL является переносимость между различными вычислительными платформами. На данный момент OpenCL является уникальным средством такого рода. Естественным требованием для этого является необходимость оперирования обобщенными терминами, что усложняет модель программирования и затрудняет оптимизацию для конкретных платформ. При этом стандарт хорошо проработан и содержит возможности для низкоуровневой оптимизации для конкретных устройств и достижения высокой эффективности. Техники оптимизации для разных платформ (например, CPU и GPU) существенно различны.

Слайд 61





Intel OpenCL
Реализация стандарта для многоядерных центральных процессоров, Intel HD Graphics и Intel Xeon Phi.
Реализация для CPU и Xeon Phi основана на Intel TBB.
Использует оптимизирующий компилятор с возможностями автоматической векторизации кода.
Содержит набор примеров (SDK) и отдельный компилятор с возможностью просмотра ассемблера и LLVM (промежуточного векторного языка).
Описание слайда:
Intel OpenCL Реализация стандарта для многоядерных центральных процессоров, Intel HD Graphics и Intel Xeon Phi. Реализация для CPU и Xeon Phi основана на Intel TBB. Использует оптимизирующий компилятор с возможностями автоматической векторизации кода. Содержит набор примеров (SDK) и отдельный компилятор с возможностью просмотра ассемблера и LLVM (промежуточного векторного языка).

Слайд 62





NVIDIA OpenCL
Реализация стандарта для графических процессоров NVIDIA.
Использует архитектуру CUDA.
OpenCL во многом похож на обобщенную версию CUDA C, тем не менее в настоящее время последний является значительно более популярным и динамично развивающимся средством разработки для GPU NVIDIA.
NVIDIA предоставляет обобщенные средства разработки на CUDA C и OpenCL: CUDA Toolkit и GPU Computing SDK с примерами на CUDA C, OpenCL и DirectCompute.
Описание слайда:
NVIDIA OpenCL Реализация стандарта для графических процессоров NVIDIA. Использует архитектуру CUDA. OpenCL во многом похож на обобщенную версию CUDA C, тем не менее в настоящее время последний является значительно более популярным и динамично развивающимся средством разработки для GPU NVIDIA. NVIDIA предоставляет обобщенные средства разработки на CUDA C и OpenCL: CUDA Toolkit и GPU Computing SDK с примерами на CUDA C, OpenCL и DirectCompute.

Слайд 63





AMD OpenCL
Реализация стандарта для многоядерных центральных процессоров и графических процессоров (а также APU).
Является единственным развиваемым средством программирования для GPU AMD.
Содержит набор примеров (SDK) и инструменты разработки (профилировщик).
Описание слайда:
AMD OpenCL Реализация стандарта для многоядерных центральных процессоров и графических процессоров (а также APU). Является единственным развиваемым средством программирования для GPU AMD. Содержит набор примеров (SDK) и инструменты разработки (профилировщик).

Слайд 64





Материалы
OpenCL – официальный сайт:
http://www.khronos.org/opencl/
Intel OpenCL:
http://software.intel.com/en-us/articles/intel-opencl-sdk/
NVIDIA OpenCL: http://www.nvidia.ru/object/cuda_opencl_new_ru.html
AMD OpenCL: http://www.amd.com/us/products/technologies/stream-technology/opencl/Pages/opencl.aspx
Описание слайда:
Материалы OpenCL – официальный сайт: http://www.khronos.org/opencl/ Intel OpenCL: http://software.intel.com/en-us/articles/intel-opencl-sdk/ NVIDIA OpenCL: http://www.nvidia.ru/object/cuda_opencl_new_ru.html AMD OpenCL: http://www.amd.com/us/products/technologies/stream-technology/opencl/Pages/opencl.aspx



Похожие презентации
Mypresentation.ru
Загрузить презентацию