- CLHandleType
- CLGetInfoInteger
- CLGetInfoString
- CLContextCreate
- CLContextFree
- CLGetDeviceInfo
- CLProgramCreate
- CLProgramFree
- CLKernelCreate
- CLKernelFree
- CLSetKernelArg
- CLSetKernelArgMem
- CLSetKernelArgMemLocal
- CLBufferCreate
- CLBufferFree
- CLBufferWrite
- CLBufferRead
- CLExecute
- CLExecutionStatus
Работа с OpenCL
Программы на OpenCL предназначены для выполнения вычислений на видеокартах с поддержкой стандарта OpenCL 1.1 или выше. Современные видеокарты содержат сотни небольших специализированных процессоров, которые могут одновременно выполнять простые математические операции над входящими потоками данных. Язык OpenCL берёт на себя организацию таких параллельных вычислений и позволяет добиться огромного ускорения для некоторого класса задач.
На некоторых видеокартах по умолчанию отключен режим работы с числами типа double, что приводит к возникновению ошибки компиляции 5105. Для включения режима поддержки чисел double в текст OpenCL-программы нужно добавить директиву #pragma OPENCL EXTENSION cl_khr_fp64 : enable. Однако, если видеокарта не поддерживает double, то включение данной директивы не поможет.
Исходный код OpenCL рекомендуется писать в отдельных CL-файлах, которые затем можно подключать к MQL5-программе с помощью ресурсных переменных.
Обработка ошибок в OpenCL программах
Для получения информации о последней ошибке в OpenCL-программе необходимо использовать функции CLGetInfoInteger и CLGetInfoString, которые позволяют получить код ошибки и текстовое описание.
Код последней ошибки OpenCL: Для получения последней ошибки OpenCL используйте вызов CLGetInfoInteger, при этом параметр handle игнорируется, то есть не имеет значения (можно указать ноль). Описание ошибок: https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS.
Для неизвестного кода ошибки вернётся строка "unknown OpenCL error N", где вместо N будет код ошибки. Пример:
//--- первый параметр handle игнорируется при получении кода последней ошибки
|
Текстовое описание ошибки OpenCL: Для получения последней ошибки OpenCL используйте вызов CLGetInfoString, при этом в качестве параметра handle следует передать код ошибки.
Описание ошибок: https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS. Если вместо кода ошибки передать CL_LAST_ERROR, то функция вернёт описание последней ошибки. Пример:
//--- получить код последней OpenCL ошибки
|
Пока в качестве описания ошибки отдаётся имя внутреннего перечисления, расшифровку которого можно посмотреть на странице https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS. Например, если получено значение CL_INVALID_KERNEL_ARGS, описание для него "Returned when enqueuing a kernel when some kernel arguments have not been set or are invalid."
Функции для выполнения программ на OpenCL:
Функция |
Действие |
---|---|
Возвращает тип OpenCL хендла в виде значения из перечисления ENUM_OPENCL_HANDLE_TYPE |
|
Возвращает значение целочисленного свойства для OpenCL-объекта или устройства |
|
Возвращает строковое значение свойства для OpenCL-объекта или устройства |
|
Cоздает контекст OpenCL |
|
Удаляет контекст OpenCL |
|
Получает свойство устройства из OpenCL драйвера |
|
Создает OpenCL программу из исходного кода |
|
Удаляет OpenCL программу |
|
Создает функцию запуска OpenCL |
|
Удаляет функцию запуска OpenCL |
|
Выставляет параметр для функции OpenCL |
|
Выставляет буфер OpenCL в качестве параметра функции OpenCL |
|
Задаёт локальный буфер в качестве аргумента kernel-функции |
|
Создает буфер OpenCL |
|
Удаляет буфер OpenCL |
|
Записывает массив в буфер OpenCL и возвращает количество записанных элементов |
|
Читает буфер OpenCL в массив и возвращает количество прочитанных элементов |
|
Выполняет OpenCL программу |
|
Возвращает состояние выполнения OpenCL программы |
Смотри также