PoCL 1.6, una implementación independiente del estándar OpenCL
Se acaba de presentar el lanzamiento de la nueva versión del proyecto PoCL 1.6 (Portable Computing Language OpenCL), de los aspectos destacados de la versión 1.6 es la compatibilidad con Clang/LLVM 11.0, asi como el trabajo realizado para mejorar el rendimiento y funciones de CUDA, compatibilidad mejorada con PowerPC y uso mejorado de depuración de OpenCL.
Para quienes desconocen de PoCL, debe saber que es una implementación portátil de código abierto (con licencia MIT) del estándar OpenCL (1.2 con algunas características 2.0 compatibles). Además de ser una implementación OpenCL de código abierto de múltiples dispositivos (verdaderamente heterogénea) 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.
El compilador del kernel de OpenCL se basa en LLVM y Clang se utiliza como interfaz para OpenCL C. Para proporcionar portabilidad y rendimiento adecuados, el compilador del kernel de OpenCL puede generar funciones combinadas que pueden utilizar varios recursos de hardware para paralelizar la ejecución de código, como VLIW, superescalar, SIMD, SIMT, multinúcleo y subprocesos múltiples. Hay soporte para controladores ICD (controlador de cliente instalable). Hay backends para proporcionar trabajo a través de CPU, ASIP (TCE/TTA), GPU basada en arquitectura HSA y GPU NVIDIA (CUDA).
Principales novedades de PoCL 1.6
En esta nueva versión de PoCL 1.6 se destaca la capacidad de compilar esta implementación con controladores de dispositivo habilitados en el momento de la compilación, asi como la disponibilidad del dispositivo se verificará al inicio (anteriormente, los sistemas en los que se construye y ejecuta PoCL deberían haber tenido el mismo soporte de controlador). Implementó la capacidad de usar el administrador de paquetes conda para distribuir paquetes binarios PoCL con soporte CUDA para sistemas Linux-x86_64 y Linux-ppc64le.
Otro de los cambios que se destaca es el soporte para LLVM 11 junto con las posibilidades ampliadas para depurar código OpenCL cuando se usa el controlador de CPU.
Además, se destaca que se realizó la optimización del rendimiento del backend CUDA, lo que permitió agilizar significativamente las operaciones relacionadas con el uso de memoria local (FFT, GEMM).
Los puntos de referencia que utilizan puntos de referencia SHOC (que ahora se prueban continuamente muestran que estas optimizaciones dieron como resultado un rendimiento mucho mejor, en particular para los puntos de referencia que implican memoria local como FFT y GEMM, en comparación con una ejecución de referencia anterior . PoCL ahora a menudo alcanza un rendimiento competitivo con el controlador OpenCL patentado de Nvidia). Agradecemos las contribuciones para identificar y eliminar las causas fundamentales de las áreas problemáticas restantes. También agradecemos las contribuciones para mejorar la cobertura de funciones para los estándares OpenCL 1.2 / 3.0.
- El rendimiento de PoCL en muchas pruebas ahora está cerca del controlador OpenCL patentado de NVIDIA.
- Se agregó el parámetro de compilacion HARDENING_ENABLE para habilitar las opciones del compilador para generar un libpocl.so más seguro a costa de la degradación del rendimiento.
- Soporte devuelto para sistemas PowerPC 8/9, para los cuales el nivel de implementación de OpenCL cuando se usan dispositivos pthread y CUDA corresponde al nivel CUDA en sistemas x86_64.
- Se cambió la ABI para los núcleos CUDA que usan __ bloques locales. Después de la actualización, los usuarios deben eliminar la caché pocl.
- Se eliminó el soporte para la opción de compilación SINGLE_LLVM_LIB, en lugar de usar STATIC_LLVM y llvm-config para definir a qué bibliotecas enlazar.
Finalmente si quieres conocer más al respecto de esta nueva versión, puedes consultar los detalles en el anuncio original.
Mientras que para los interesados en conocer más al respecto de esta implementación, pueden consultar el sitio web oficial de esta, donde podrán encontrar la documentación y archivos de descarga.
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.