«Параллельные вычисления на платформе OpenCL» План спецкурса для магистров ОПМ физфака МГУ Антонюк В.А., 2016 0. OpenCL -- открытый язык для параллельного программирования. Терминология. Исполнение OpenCL-приложения. Доступные виды памяти. Платформы и устройства. Работа с кодом ядра. Получение информация о возможностях платформ/устройств. 1. Заголовочные файлы OpenCL и их содержимое: cl.h, cl_platform.h; cl_ext.h, cl_gl.h, cl_gl_ext.h; opencl.h. 2. C++-интерфейс к OpenCL. Содержимое заголовочного файла cl.hpp (на примере версии 1.1). Используемые пространства имён. Примеры программ и полезные фрагменты кода: получение объекта ядра из исходного кода и запуск ядра на исполнение. 3. Расширения (Device Extensions). Их типы и схема поименования. Компиляция при использовании расширений. Информация о расширениях в заголовочных файлах cl_ext.h, cl_gl_ext.h. Расширения консорциума Khronos. Использование расширения в коде ядра (на примере cl_khr_fp64). Некоторые расширения производителей. 4. Сосуществование реализаций OpenCL. Перебор реализаций (ICD-библиотек) в Windows, Linux, Android и работа с ними. Стандартный (от Khronos) и альтернативный (ocl-icd) ICD-загрузчики. Варианты построения OpenCL-программ. 5. Объекты памяти и работа с ними в OpenCL. Буферные объекты: флаги, чтение, запись и копирование. Отображение буферных объектов. Объекты изображений и их описатели. Поддерживаемые форматы. Чтение, запись, копирование объектов изображений. Отображение объектов изображений. Получение информации об объектах, общие функции для работы с объектами памяти. Сэмплеры. Практические примеры программ: варианты для буферов и для изображений. 6. OpenCL-OpenGL Interoperability. Совместное владение и синхронизация. Создание контекста для совместной работы и совместно используемых объектов. Координирование работы OpenCL и OpenGL. Практические примеры программ: GLinterop, sinewave. Варианты реализации совместного владения OpenCL-OpenGL. 7. Существующие реализации OpenCL, их особенности и целевые устройства. Варианты от AMD, Intel, NVidia. Реализации OpenCL для мобильных устройств. Реализации OpenCL с открытым кодом: Beignet (установка, особенности пакета), POCL (установка, особенности пакета). Установка пакетов из исходного кода. Особенности наличия множественных реализаций. 8. Новые возможности OpenCL 2.0: поддержка разделяемой виртуальной памяти, динамический параллелизм, обобщённое адресное пространство, улучшенная поддержка изображений, подмножество атомарных операций из стандарта C++11, новые объекты памяти (Pipes) и др. 9. OpenCL «под капотом»: библиотеки Boost.Compute, ViennaCL, VexCL, ArrayFire. Привязка к OpenCL из других языков: PyOpenCL (Python), OpenCL.jl (Julia). Сайт консорциума Khronos. Открытые репозитории OpenCL-кода на GitHub.com.