Le consortium Khronos, responsable du développement des spécifications des familles OpenGL, Vulkan et OpenCL, a annoncé l'achèvement du développement des spécifications OpenCL 3.0, qui définissent l'API et les extensions du langage C pour organiser des calculs parallèles multiplateformes en utilisant des CPU multicœurs, GPU, FPGA, DSP et d'autres puces spécialisées, allant de celles utilisées dans les supercalculateurs et les serveurs cloud, aux puces rencontrées dans les appareils mobiles et les systèmes embarqués. La norme OpenCL est entièrement ouverte et ne nécessite aucun paiement de redevances. Des entreprises telles qu'IBM, NVIDIA, Intel, AMD, Apple, ARM, Electronic Arts, Qualcomm, Texas Instruments et Toshiba ont participé à l'élaboration de la norme.
À ce stade, la spécification a reçu le statut provisoire, ce qui implique la possibilité de révisions basées sur les retours soumis via . Une fois que les commentaires auront été pris en compte, la spécification obtiendra le statut final et un ensemble de tests définitif sera publié pour vérifier la compatibilité des implémentations existantes.
Les plus remarquables :
- L'API OpenCL 3.0 couvre désormais toutes les versions d'OpenCL (1.2, 2.x), sans fournir de spécifications distinctes pour chaque version. OpenCL 3.0 permet d'étendre la fonctionnalité de base par l'intégration de spécifications supplémentaires qui seront empilées sous forme d'options, sans bloquer la nature monolithique d'OpenCL 1.2/2.X.
- Seule la fonctionnalité correspondant à OpenCL 1.2 est obligatoire, tandis que toutes les capacités proposées dans les spécifications OpenCL 2.x sont considérées comme optionnelles. Cette approche simplifiera la création d'implémentations spécialisées compatibles avec OpenCL 3.0 et élargira la gamme d'appareils sur lesquels OpenCL 3.0 peut être utilisé. Par exemple, les fabricants peuvent implémenter le support d'OpenCL 3.0 sans mettre en œuvre des fonctionnalités spécifiques d'OpenCL 2.x. Pour accéder aux fonctionnalités optionnelles du langage, OpenCL 3.0 ajoute un système de requêtes de vérification, permettant d'évaluer le support d'éléments particuliers de l'API, ainsi que des macros spéciales.
- L'unification avec les spécifications publiées précédemment facilite la portabilité des applications vers OpenCL 3.0. Les applications OpenCL 1.2 pourront fonctionner sur des dispositifs supportant OpenCL 3.0 sans modifications. Les applications OpenCL 2.x ne nécessiteront également aucune modification de code, mais si l'environnement OpenCL 3.0 fournit les fonctionnalités nécessaires (pour assurer la portabilité des futures applications OpenCL 2.x, il est recommandé d'ajouter des requêtes de vérification pour évaluer le support des fonctionnalités OpenCL 2.x utilisées). Les développeurs de pilotes avec des implémentations OpenCL pourront facilement mettre à jour leurs produits vers OpenCL 3.0 en ajoutant simplement le traitement des requêtes pour certaines API, et progressivement élargir les fonctionnalités avec le temps.
- La spécification OpenCL 3.0 a été alignée sur l'environnement, les extensions et les spécifications de la représentation intermédiaire universelle SPIR-V, qui est également utilisée dans l'API Vulkan. Le support de la spécification SPIR-V 1.3 a été intégré dans la version de base d'OpenCL 3.0 en tant que fonctionnalité optionnelle. À travers l'utilisation de la représentation intermédiaire pour les unités de calcul, le support des opérations de sous-groupes a été ajouté.
- Le support d'une extension pour exécuter des opérations DMA asynchrones (Asynchronous DMA) a été ajouté, pris en charge dans les puces similaires à DSP avec accès direct à la mémoire. L'Asynchronous DMA permet d'utiliser des transactions DMA pour transférer des données entre la mémoire globale et la mémoire locale de manière asynchrone, parallèlement aux calculs ou à d'autres opérations de transfert de données.
- La spécification des extensions de programmation parallèle pour le langage C a été mise à jour vers , et le développement des extensions linguistiques OpenCL pour C++ a été arrêté au profit du projet « C++ for OpenCL ». C++ for OpenCL est un compilateur basé sur Clang/LLVM et les noyaux en C++ et OpenCL C en représentation intermédiaire SPIR-V ou en code machine de bas niveau. Grâce à la transpilation en SPIR-V, la construction d'applications C++ utilisant la bibliothèque de templates SYCL, qui simplifie la création d'applications parallèles, est également facilitée.
- Pour la transpilation d'OpenCL via l'API Vulkan, un compilateur a été proposé , transformant les noyaux OpenCL en représentation Vulkan SPIR-V, et une couche pour assurer le fonctionnement de l'API OpenCL au-dessus de Vulkan.
Source : opennet.ru
