opencl-headers
Официальный набор заголовочных файлов C для OpenCL (Open Computing Language), поддерживаемый Khronos Group. Эти заголовки определяют API для гетерогенных вычислений, позволяя программам на C взаимодействовать с вычислительными устройствами, такими как GPU, CPU и другими ускорителями. Библиотека представляет собой "unified headers", которые поддерживают все версии OpenCL в одном наборе файлов, что упрощает разработку и поддержку кода.
Особенности
- унифицированные заголовки (unified headers), работающие со всеми версиями OpenCL;
- поддержка C и C++ (через отдельный пакет
opencl-clhpp-headers); - возможность выбора целевой версии OpenCL через макрос
CL_TARGET_OPENCL_VERSION; - минимальные зависимости, простая интеграция в проекты;
- широкая поддержка в пакетных менеджерах (Debian, NetBSD, openSUSE, FreeBSD и др.).
Основные компоненты
OpenCL-Headers предоставляет набор заголовочных файлов, которые определяют типы, константы и функции OpenCL API (подробнее с документацией можно ознакомиться здесь).
Структура заголовочных файлов
Репозиторий содержит унифицированное дерево заголовков, расположенное в директории CL/. Основные файлы включают:
cl.h— основной заголовок OpenCL API;cl_platform.h— платформозависимые определения и типы;cl_version.h— определения версий OpenCL;cl_ext.hиcl_ext_intel.h— расширения OpenCL;cl_gl.h,cl_egl.h,cl_d3d11.h— заголовки для взаимодействия с графическими API;opencl.h— удобный заголовок, включающий все основные определения.
Управление версиями OpenCL
Унифицированные заголовки позволяют разработчикам выбирать целевую версию OpenCL с помощью макроса препроцессора CL_TARGET_OPENCL_VERSION. Значение задаётся трёхзначным десятичным числом, представляющим версию API.
Пример использования:
#define CL_TARGET_OPENCL_VERSION 120 // Использовать OpenCL 1.2 API
#include <CL/opencl.h>
Поддержка экосистемы
OpenCL-Headers является фундаментальным компонентом для сборки других частей экосистемы OpenCL:
- opencl-icd-loader — загрузчик установленных реализаций OpenCL (требует заголовки для сборки);
- opencl-clhpp-headers — заголовки C++ для OpenCL, предоставляющие более удобный интерфейс;
- Mesa — реализация OpenCL (RustiCL, Clover) использует заголовки для совместимости.
Установка и распространение
Заголовки OpenCL распространяются через пакетные менеджеры большинства операционных систем:
- Debian/Ubuntu:
opencl-c-headers(C заголовки),opencl-headers(метапакет); - NetBSD:
parallel/opencl-headers; - openSUSE:
opencl-headers; - FreeBSD:
devel/opencl; - Buildroot: пакет
opencl-headers.
Версии обычно следуют тегам официального репозитория KhronosGroup.
Интеграция с другими языками
Помимо C и C++, заголовки OpenCL используются для создания привязок к другим языкам программирования:
- Python: через модули
pyopenclилиclmath; - Java: через JOCL (Java bindings for OpenCL);
- Rust: через крейты
oclилиrust-opencl.