- CLHandleType
- CLGetInfoInteger
- CLGetInfoString
- CLContextCreate
- CLContextFree
- CLGetDeviceInfo
- CLProgramCreate
- CLProgramFree
- CLKernelCreate
- CLKernelFree
- CLSetKernelArg
- CLSetKernelArgMem
- CLSetKernelArgMemLocal
- CLBufferCreate
- CLBufferFree
- CLBufferWrite
- CLBufferRead
- CLExecute
- CLExecutionStatus
Trabajo con OpenCL
Los programas en OpenCL sirven para ejecutar los cálculos en las tarjetas gráficas con el soporte del estándar OpenCL 1.1 o superior. Las tarjetas gráficas modernas cuentan con centenares de pequeños procesadores especializados que son capaces de realizar simultáneamente las operaciones matemáticas sencillas con los flujos de datos entrantes. El lenguaje OpenCL se encarga de estos cálculos paralelos y permite alcanzar una aceleración increíble para algunos tipos de tareas.
En algunas tarjetas gráficas, por defecto, está desactivado el modo de trabajo con los números del tipo double lo que provoca el error de compilación 5105. Para activar el modo del soporte de los números double, hay que insertar la siguiente directiva en el texto del programa OpenCL: #pragma OPENCL EXTENSION cl_khr_fp64 : enable. No obstante, si la tarjeta gráfica no soporta double, la inserción de esta directiva no servirá de nada.
Es recomendable escribir el código fuente de OpenCL en archivos CL aparte, que después se puedan incluir en el programa MQL5 con la ayuda de las variables de recurso.
Procesamiento de archivos en programas OpenCL
Para obtener la información sobre el último error en un programa OpenCL, se usarán las funciones CLGetInfoInteger y CLGetInfoString, que permiten obtener el código de error y la descripción textual.
Código de error OpenCL: para obtener el último error OpenCL, use la llamada CLGetInfoInteger, en este caso, además, el parámetro handle será ignorado, es decir, no tendrá ningún valor (se puede indicar cero). Descripción de errores: https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS.
Para un código de error desconocido, se retornará la línea "unknown OpenCL error N", donde N será el código de error. Ejemplo:
//--- el primer parámetro de handle se ignorará al obtener el último código de error
|
Mensaje textual del error OpenCL: para obtenr el último error OpenCL, use la llamada CLGetInfoString, en este caso, además, como parámetro handle se transmitirá el código del error.
Descripción del error: https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS. Si se transmite CL_LAST_ERROR en lugar del código de error, la función retornará la descripción del último error. Ejemplo:
//--- obtener el último código de error de OpenCL
|
Hasta ahora, como descripción del error se daba el nombre de la enumeración interna, cuya decodificación se puede ver en la página. https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS. Por ejemplo, si se obtiene el valor CL_INVALID_KERNEL_ARGS, la descripción del mismo será "Returned when enqueuing a kernel when some kernel arguments have not been set or are invalid."
Funciones para ejecutar programas en OpenCL:
Función |
Acción |
---|---|
Devuelve el tipo de manejador OpenCL como un valor de la enumeración ENUM_OPENCL_HANDLE_TYPE |
|
Devuelve el valor de una propiedad de números enteros para el objeto o dispositivo OpenCL |
|
Crea el contexto OpenCL |
|
Elimina el contexto OpenCL |
|
Recibe la propiedad del dispositivo desde el controlador de dispositivo OpenCL |
|
Crea un programa OpenCL desde el código fuente |
|
Elimina un programa OpenCL |
|
Crea la función del arranque OpenCL |
|
Elimina la función del arranque OpenCL |
|
Establece un parámetro para la función OpenCL |
|
Establece el búfer OpenCL como el parámetro de la función OpenCL |
|
Define el búfer local como argumento de la función núcleo |
|
Crea el búfer OpenCL |
|
Elimina el búfer OpenCL |
|
Escribe un array en el búfer OpenCL |
|
Lee el búfer OpenCL en un array |
|
Ejecuta un programa OpenCL |
|
Retorna el estado de ejecución del programa OpenCL |
Véase también