La version 6.0 du projet PoCL (Portable Computing Language OpenCL) a été publiée. Ce projet développe une implémentation du standard OpenCL, indépendante des fabricants de GPU, et permettant d'utiliser divers backends pour exécuter des noyaux OpenCL sur différents types de processeurs graphiques et centraux. Le code du projet est distribué sous la licence MIT. Il est pris en charge sur les plateformes X86_64, MIPS32, ARM v7, AMD HSA APU, GPU NVIDIA et différents processeurs ASIP (Application-Specific Instruction-set Processor) et TTA (Transport Triggered Architecture) avec architecture VLIW.
L'implémentation du compilateur de noyaux OpenCL est basée sur LLVM, et Clang est utilisé comme frontend pour OpenCL C. Pour garantir une portabilité et des performances appropriées, le compilateur de noyaux OpenCL peut générer des fonctions combinées qui exploitent différentes ressources matérielles pour paralléliser l'exécution du code, telles que VLIW, la superscalarité, SIMD, SIMT, la multicoeur et le multitâche. Un support pour les pilotes ICD est inclus.
(Installable Client Driver). Des backends sont présents pour assurer le fonctionnement via CPU, ASIP (TCE/TTA), GPU basés sur l'architecture HSA et GPU NVIDIA (via libcuda).
Dans la nouvelle version :
- Ajout du support de Clang/LLVM 18.0, fin du support pour LLVM 10, 11, 12 et 13.
- Un nouveau backend cpu-tbb a été implémenté, utilisant la bibliothèque OneTBB, développée par Intel, pour le parallélisme des opérations et la planification des tâches.
- Dans le backend cpu, qui exécute les noyaux OpenCL sur CPU, le support de la norme de programmation parallèle OpenMP a été ajouté, ainsi que la méthode clGetDeviceAndHostTimer(), et des extensions expérimentales cl_pocl_svm_rect, cl_pocl_command_buffer_svm et cl_pocl_command_buffer_host_buffer ont été mises en œuvre.
- Dans le backend « Remote », destiné à organiser des calculs distribués en délocalisant l'exécution des commandes OpenCL vers d'autres hôtes connectés à un processus en arrière-plan pocld, le soutien à CG SVM (Coarse-Grain Shared Virtual Memory) a été ajouté, la possibilité d'accéder au backend via le protocole de communication Vsock, et le support de la compilation et de l'édition des programmes par les fonctions clCompileProgram() et clLinkProgram().
- Dans le backend LevelZero, utilisant l'API Level Zero, il est désormais possible de créer des buffers de plus de 4 Go, et des optimisations pour les processus de synchronisation ont été mises en œuvre.
- Dans le backend CUDA, les opérations sub_group_shuffle et sub_group_shuffle_xor ont été implémentées, et la limite CL_DEVICE_MAX_MEM_ALLOC_SIZE a été augmentée.
Source : opennet.ru
