Se ha publicado la versión del proyecto PoCL 6.0 (Portable Computing Language OpenCL), que desarrolla una implementación del estándar OpenCL independiente de los fabricantes de aceleradores gráficos y permite utilizar diferentes backends para ejecutar núcleos de OpenCL en varios tipos de procesadores gráficos y centrales. El código del proyecto se distribuye bajo la licencia MIT. Se admite el funcionamiento en plataformas X86_64, MIPS32, ARM v7, APU HSA de AMD, GPU NVIDIA y varios ASIP (Application-Specific Instruction-set Processor) y procesadores TTA (Transport Triggered Architecture) con arquitectura VLIW.
La implementación del compilador de núcleos OpenCL se basa en LLVM, y se utiliza Clang como frontend para OpenCL C. Para garantizar la adecuada portabilidad y rendimiento, el compilador de núcleos OpenCL puede generar funciones combinadas que pueden utilizar diferentes recursos de hardware para paralelizar la ejecución del código, como VLIW, superescalares, SIMD, SIMT, multicores y multihilo. Se proporciona soporte para controladores ICD.
(Installable Client Driver). Se incluyen backends para garantizar el funcionamiento a través de CPU, ASIP (TCE/TTA), GPU basadas en la arquitectura HSA y GPU NVIDIA (a través de libcuda).
En la nueva versión:
- Se ha añadido soporte para Clang/LLVM 18.0, mientras que el soporte para LLVM 10, 11, 12 y 13 ha sido retirado.
- Se ha implementado un nuevo backend cpu-tbb, que utiliza la biblioteca OneTBB, desarrollada por Intel, para la paralelización de operaciones y la planificación de tareas.
- En el backend cpu, que proporciona la ejecución de núcleos de OpenCL en CPU, se ha añadido soporte para el estándar de programación paralela OpenMP, se ha incluido el método clGetDeviceAndHostTimer(), y se han implementado extensiones experimentales cl_pocl_svm_rect, cl_pocl_command_buffer_svm y cl_pocl_command_buffer_host_buffer.
- En el backend 'Remote', destinado a organizar cálculos distribuidos mediante la externalización del procesamiento de comandos OpenCL a otros hosts en la red donde se ejecuta el proceso en segundo plano pocld, se ha añadido soporte para CG SVM (Coarse-Grain Shared Virtual Memory), la posibilidad de acceder al backend utilizando el protocolo de comunicación Vsock y soporte para la compilación y enlace de programas mediante las funciones clCompileProgram() y clLinkProgram().
- En el backend LevelZero, que utiliza la API Level Zero, se permite crear búferes de más de 4 GB y se han implementado optimizaciones para los procesos de sincronización.
- En el backend CUDA se han implementado las operaciones sub_group_shuffle y sub_group_shuffle_xor, y se ha incrementado el límite de CL_DEVICE_MAX_MEM_ALLOC_SIZE.
Fuente: opennet.ru
