Le traitement hétérogène exige la parallélisation des données : SYCL et DPC++ sont un bon début

Le traitement hétérogène exige la parallélisation des données : SYCL et DPC++ sont un bon début

James Reinders

Ingénieur chez Intel et avec plus de trente ans d’expérience dans le domaine du calcul parallèle, il est l’auteur/co-auteur/éditeur de dix ouvrages techniques liés à la programmation parallèle. James travaille chez Intel à la promotion de la programmation parallèle dans un monde hétérogène (XPU).

Voici son article publié sur The New Stack.

J’aime à dire que « tout tourne autour des XPU ».

Nous vivons une époque merveilleuse où l’innovation matérielle conduit à une explosion des CPU, GPU, FPGA, DSP, ASIC et autres – que j’abrège simplement en XPU. XPUs est une abréviation pour dire « tout type d’unité de traitement », tout matériel pouvant aider une application à calculer.

En tant que développeurs, l’assaut des XPU signifie que nous sommes de plus en plus mis au défi de coder pour une plus grande collection d’unités de traitement diverses. Nous devons prendre en compte le temps supplémentaire (et le cout) pour réécrire et tester le code afin d’améliorer les performances des applications pour les nouvelles architectures.

Plus que jamais, pour préserver notre santé mentale et la maintenabilité de notre code, il est primordial que le code que nous écrivons soit applicable à autant de XPU que possible.

Le passage à des modèles inter-architectures pour le développement d’applications a montré que cela pouvait permettre aux organisations de gagner beaucoup de temps et d’argent, et cela devient une préoccupation encore plus pressante avec la montée en puissance de l’informatique hétérogène.

Aujourd’hui, nous sommes en train de repenser notre monde, car il est en train de devenir rapidement un monde d’XPUs qui finira par transformer toute l’informatique.

XPUs : Réinventer le logiciel pour le calcul accéléré

  • CUDA, un système de programmation de logiciels propriétaires largement utilisés, a été conçu et est efficace pour les GPU NVIDIA.
  • OpenCL a adopté une approche ouverte et a atteint un certain niveau de support multifournisseur. Mais il avait ses propres défauts, notamment le fait d’être centré sur le C et de ne pas répondre aux besoins du C++.

CUDA et OpenCL ont bien rempli leur mission. À l’avenir, les développeurs auront besoin d’une approche véritablement ouverte et multifournisseurs pour tenir les promesses des XPUs.

Pourquoi SYCL et Data Parallel C++ (DPC++) offrent-ils la meilleure voie à suivre ?

Les enseignements tirés de CUDA et d’OpenCL ont ouvert la voie à l’émergence d’une solution véritablement populaire et ouverte pour le parallélisme des données basé sur C++ sur les systèmes hétérogènes.

Cette solution est SYCL, un modèle de programmation de plus haut niveau destiné à améliorer la productivité de la programmation sur plusieurs accélérateurs matériels.

Il a rapidement obtenu le soutien de nombreux fournisseurs, un intérêt général et le soutien de plusieurs projets de compilateurs sérieux.

SYCL est important car une programmation efficace dans notre monde de plus en plus hétérogène exige que nous offrions un accès performant pour tous les XPU. Seule une approche véritablement ouverte peut y parvenir.

SYCL est une norme ouverte pour la programmation de données parallèles C++ à source unique pour le matériel hétérogène, ou XPU.

SYCL permet une compilation à source unique en C++ pour cibler plusieurs périphériques sur un système, plutôt que d’utiliser C++ pour l’hôte et un ou plusieurs langages de noyau spécifiques au domaine pour le ou les périphériques.

SYCL apporte au C++ la programmation de type noyau et un mécanisme permettant de localiser, d’interroger et d’utiliser les accélérateurs dans un système.

La programmation basée sur le noyau est un style de programmation important pour exploiter le parallélisme des données, qui était également pris en charge par OpenCL et CUDA. La possibilité d’énumérer et d’accéder aux accélérateurs, de manière standard, avait déjà été introduite par OpenCL.

Jetez également un œil au DPC++ (Data Parallel C++), qui fournit une implémentation ouverte à la communauté LLVM, avec l’ambition de tout intégrer en amont dans les compilateurs LLVM C++. DPC++ vise à implémenter SYCL avec quelques extensions.

DPC++ a été le pionnier de nombreuses fonctionnalités qui sont maintenant dans SYCL 2020, et a donc eu une longueur d’avance dans la mise en œuvre d’une grande partie de SYCL 2020 avant même que l’encre ne sèche sur le standard.

Il reste encore du travail pour achever l’alignement avec l’ensemble de la spécification SYCL 2020 ; tout le travail est facile à observer dans le dépôt open source très actif.

DPC++ est utilisé par Intel pour cibler les CPU, GPU et FPGA d’Intel.

DPC++ est également utilisé par Codeplay pour cibler les GPU NVIDIA.

Un autre compilateur SYCL, hipSYCL, prend en charge les CPU et GPU AMD en se connectant à HIP/ROCm d’AMD.

Le fait de disposer de plusieurs compilateurs open source pour SYCL est fantastique pour la communauté, et cela démontre que SYCL bénéficie d’un support large, diversifié et ouvert.

Au cours des années 2019 et 2020, j’ai travaillé avec une petite équipe dédiée pour créer le premier livre sur SYCL et DPC++. Vous pouvez en télécharger un exemplaire gratuit sur le site d’Apress.

Peu de temps après sa publication, Khronos Group a annoncé la spécification finalisée de SYCL 2020.

La récente ratification de la spécification SYCL 2020 est une étape importante. Il s’agit véritablement d’une spécification ouverte promise à un bel avenir. Cette spécification est le fruit d’années de développement par de nombreuses personnes dévouées issues de l’industrie. Basée sur C++17, SYCL 2020 permet d’accélérer plus facilement les applications C++ standard et de se rapprocher de la feuille de route ISO C++.

Khronos Group a souligné, dans son annonce de SYCL 2020, un certain nombre de fonctionnalités de SYCL 2020, notamment la prise en charge de la mémoire partagée unifiée (USM), les réductions intégrées, l’utilisation étendue de la CTAD et les opérations atomiques qui s’alignent sur les opérations atomiques standard du C++.

Les XPU sont l’avenir, gardons-les ouverts pour bénéficier de la diversité des XPU et de la sécurité de programmation.

SYCL et DPC++ nous aideront à utiliser efficacement les XPU. Ils font partie d’un mouvement plus large en faveur de la prise en charge des XPU qui s’étend aux bibliothèques et à tous les outils de développement logiciel, en s’appuyant sur les ambitions de SYCL et de ses compilateurs.

C’est l’origine de l’initiative industrielle oneAPI, qui me passionne vraiment et à laquelle j’ai été ravi de participer lorsque j’ai réintégré Intel.

Le soutien à ce sujet, qui vise à faciliter l’utilisation ouverte de tous les XPU, suscite l’intérêt pour SYCL et oneAPI.

Un bon exemple est l’utilisation de la bibliothèque oneAPI : Deep Neural Network (oneDNN), initialement hautement optimisée pour les processeurs Intel, qui accélère l’ordinateur le plus rapide du monde (avec des processeurs ARM).

Par conséquent, oneDNN bénéficie désormais d’un support solide pour les processeurs ARM. L’ouverture des bibliothèques et outils SYCL et oneAPI contribue à inaugurer une nouvelle ère d’ouverture et de performance pour nous donner un accès utile à la programmation de tous les XPU.

Ensemble, la communauté des développeurs de logiciels a l’opportunité de créer des normes, dont SYCL, qui servent l’ensemble de l’industrie et soutiennent fortement l’adoption de la programmation hétérogène (XPUs) et du C++ moderne qui adopte le parallélisme.

SYCL offre un standard ouvert avec un large soutien, de nombreuses possibilités de participation, de multiples implémentations open-source et des possibilités apparemment infinies.

DPC++ fournit un compilateur ouvert basé sur LLVM afin de réduire l’effort de prise en charge de SYCL et d’encourager une forte compatibilité entre les XPU.

oneAPI offre un forum permettant de discuter et de promouvoir un accès ouvert et performant aux XPUs dans tous les aspects du développement logiciel.

J’espère que vous saisirez l’occasion de vous informer sur SYCL, DPC++ et oneAPI, car les XPU représentent l’avenir de l’informatique.

Nous devrions façonner le support des XPU ensemble, en toute transparence, et profiter des avantages de l’énorme diversité des XPU disponibles pour une programmation efficace.

Traduit par RITME