PoCL 1.6, une implémentation autonome du standard OpenCL

Le lancement de la nouvelle version du projet PoCL 1.6 (Portable Computing Language OpenCL), l'un des points forts de la version 1.6 est la prise en charge de Clang / LLVM 11.0, ainsi que le travail effectué pour améliorer les performances et les fonctions de CUDA, une meilleure compatibilité avec PowerPC et une meilleure utilisation du débogage OpenCL.

Pour ceux qui ne connaissent pas PoCL, vous devez savoir ce que c'est une implémentation open source portable (sous licence du MIT) du standard OpenCL (1.2 avec certaines fonctionnalités 2.0 prises en charge). En plus d'être une implémentation OpenCL open source multi-appareils (vraiment hétérogènes) facilement portables, un objectif principal de ce projet est d'améliorer l'interopérabilité de la diversité des appareils compatibles OpenCL en les intégrant dans une plate-forme unique orchestrée de manière centralisée.

De plus, l'un des principaux objectifs à long terme est d'améliorer la portabilité des performances des programmes OpenCL sur les types de périphériques qui utilisent des techniques d'exécution et de compilation.

Le compilateur du noyau OpenCL est basé sur LLVM et Clang est utilisé comme interface avec OpenCL C. Pour fournir des performances et une portabilité adéquates, le compilateur du noyau OpenCL peut générer des fonctions combinées qui peuvent utiliser diverses ressources matérielles pour paralléliser l'exécution de code. , tels que VLIW, superscalaire, SIMD, SIMT, multi-core et multi-thread. Les pilotes ICD (Installable Client Driver) sont pris en charge. Il existe des backends pour fournir du travail via CPU, ASIP (TCE / TTA), GPU basé sur l'architecture HSA et NVIDIA GPU (CUDA).

Principales nouveautés de PoCL 1.6

Cette nouvelle version de PoCL 1.6 met en évidence la possibilité de compiler cette implémentation avec les pilotes de périphériques activés au moment de la compilation, ainsi que la disponibilité des périphériques sera vérifiée au démarrage (auparavant, les systèmes sur lesquels PoCL est construit et exécuté ils auraient dû avoir le même support de contrôleur). Implémentation de la possibilité d'utiliser le gestionnaire de packages conda pour distribuer des packages binaires PoCL avec le support CUDA pour les systèmes Linux-x86_64 et Linux-ppc64le.

Un autre changement qui se démarque est la prise en charge de LLVM 11 ainsi que les possibilités étendues de débogage du code OpenCL lors de l'utilisation du contrôleur CPU.

De plus, il est souligné que l'optimisation des performances du backend CUDA a été réalisée, ce qui a permis d'accélérer considérablement les opérations liées à l'utilisation de la mémoire locale (FFT, GEMM).

Les benchmarks utilisant les benchmarks SHOC (qui sont maintenant testés en permanence montrent que ces optimisations ont abouti à de bien meilleures performances, en particulier pour les benchmarks impliquant la mémoire locale tels que FFT et GEMM, par rapport à une série de référence précédente. PoCL atteint souvent des performances compétitives avec le pilote OpenCL propriétaire de Nvidia). Nous nous félicitons des contributions visant à identifier et éliminer les causes profondes des problèmes restants. Nous apprécions également les contributions pour améliorer la couverture des fonctionnalités pour les normes OpenCL 1.2 / 3.0.

  • Les performances PoCL dans de nombreux tests sont désormais proches du pilote OpenCL propriétaire de NVIDIA.
  • Ajout du paramètre de compilation HARDENING_ENABLE pour permettre aux options du compilateur de générer un libpocl.so plus sécurisé au prix d'une dégradation des performances.
  • Retour de la prise en charge des systèmes PowerPC 8/9, pour lesquels le niveau d'implémentation OpenCL lors de l'utilisation de périphériques pthread et CUDA correspond au niveau CUDA sur les systèmes x86_64.
  • ABI modifié pour les noyaux CUDA qui utilisent __ blocs locaux. Après la mise à niveau, les utilisateurs doivent vider le cache pocl.
  • La prise en charge de l'option de construction SINGLE_LLVM_LIB a été supprimée, au lieu d'utiliser STATIC_LLVM et llvm-config pour définir à quelles bibliothèques se lier.

Enfin, si vous souhaitez en savoir plus sur cette nouvelle version, vous pouvez consulter les détails dans l'annonce d'origine. 

Pour ceux qui souhaitent en savoir plus sur cette implémentation, ils peuvent consulter le site officiel à partir de là, où vous pouvez trouver la documentation et télécharger les fichiers.

Le code du projet est distribué sous la licence MIT et le travail est pris en charge sur les plates-formes X86_64, MIPS32, ARM v7, AMD HSA APU et divers processeurs TTA spécialisés avec l'architecture VLIW.


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués avec *

*

*

  1. Responsable des données: Miguel Ángel Gatón
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.