PoCL 5.0 llega con un nuevo backend, mejoras y más
Se dio a conocer hace unos días el lanzamiento de la nueva versión de PoCL 5.0 y dentro de las principales novedades que presenta la nueva versión se destaca un nuevo backend que permite descargar comandos OpenCL a través de una red a uno o más servidores, también se destacan las mejoras para CUDA, mejoras de soporte y más.
Para quienes desconocen de PoCL, debe saber que es una implementación portátil de código abierto (con licencia MIT) del estándar OpenC, además de ser una implementación OpenCL de código abierto de múltiples dispositivos fácilmente portátil. Un objetivo principal de este proyecto es mejorar la interoperabilidad de la diversidad de dispositivos compatibles con OpenCL integrándolos en una única plataforma orquestada centralmente.
Además, uno de los objetivos clave a más largo plazo es mejorar la portabilidad del rendimiento de los programas OpenCL en los tipos de dispositivos que utilizan tiempo de ejecución y técnicas de compilación
Principales novedades de PoCL 5.0
En esta nueva versión que se presenta de PoCL 5.0, tal como se mencionó al inicio, la novedad más importante es el nuevo backend «PoCL-Remote» el cual está diseñado para descargar comandos OpenCL a través de una red hacia uno o más servidores que ejecutan el demonio ‘pocld’, incluido con PoCL. Al permitir la compatibilidad con OpenCL en otros sistemas en red, PoCL-Remote permite utilizar OpenCL sin problemas en esos hosts remotos.
Se menciona que a diferencia de las soluciones de descarga en red existentes para OpenCL, PoCL-Remote utiliza la infraestructura de administración de memoria de PoCL para realizar un seguimiento de los objetos de memoria y solo copiarlos cuando sea realmente necesario. Cuando se necesita una migración de objetos de memoria, se elige automáticamente la ruta más eficiente para la transferencia.
Otra de las novedades que presenta la nueva versión de PoCL 5.0, son las nuevas características añadidas del controlador NVIDIA CUDA para brindar soporte parcial a OpenCL 3.0 El controlador CUDA ha sido ampliado con nuevas funciones para respaldar características opcionales de OpenCL 3.0, varias extensiones esenciales para optimizar la ejecución en chipStar, asi como también la adición de operaciones atómicas de OpenCL 2.x/3.x.
De las mejoras de soporte se menciona el soporte para SVM Coarse-grain fine-grain, cuando el dispositivo CUDA es compatible, asi como también la introducción de soporte inicial para subgrupos: intel_sub_group_shuffle, intel_sub_group_shuffle_xor, get_sub_group_local_id, sub_group_barrier, sub_group_ballot.
Además de ello, en esta versión, se ha mejorado la compatibilidad con CPU RISC-V. PoCL fue probado en Starfive VisionFive 2 utilizando una imagen preinstalada de Ubuntu 23.10. Con LLVM 17 y GCC 13.2, se logró pasar el 98% de las pruebas (solo 4 pruebas de 253 fallaron).
De los demás cambios que se destacan de esta nueva versión:
- Se implementaron numerosas mejoras adicionales en el controlador de la CPU, impulsadas principalmente por las necesidades de chipStar.
- Implementación de cl_ext_float_atomics con soporte para FP32 y FP64.
- Actualización de la implementación de cl_khr_command_buffer a la versión 0.9.4.
Backend FPGA experimental integrado en la biblioteca del kernel. - Se ha propuesto un backend experimental de AlmaIF para FPGA que permite la reconfiguración transparente de FPGA de diferentes proveedores utilizando una base de datos de flujos de bits. Este trabajo forma parte de una investigación en curso y puede considerarse como un avance significativo. La base de datos con los flujos de bits es generada por el proyecto AFOCL.
- Se eliminó el soporte incompleto para la representación intermedia de los sombreadores SPIR 1.x/2.0. SPIR-V está declarado como el lenguaje de sombreado intermedio recomendado.
- Activación de la compatibilidad con FP16 y espacio de direcciones genérico mediante la entrada SPIR-V.
- Se agregó soporte para Clang/LLVM 17.0.
- Implementación de cl_ext_float_atomics (en FP32 + FP64) cuando se utiliza LLVM 17.
- La compatibilidad con Clang/LLVM 10-13 ha quedado obsoleta.
Finalmente, cabe mencionar que PoCL-Remote se considera listo para pruebas fuera del laboratorio, ya que se ha integrado de manera oficial en esta nueva versión 5.0. Si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.
Para los interesados en el proyecto, deben saber que el código del proyecto se distribuye bajo la licencia MIT y el trabajo es admitido en plataformas X86_64, MIPS32, ARM v7, AMD HSA APU y varios procesadores TTA especializados con la arquitectura VLIW.