Publication de HPVM 2.0, compilateur pour CPU, GPU, FPGA et accélérateurs matériels

Le projet LLVM a annoncé la sortie de HPVM 2.0 (Heterogeneous Parallel Virtual Machine), un compilateur visant à simplifier la programmation pour les systèmes hétérogènes et à fournir des outils de génération de code pour les CPU, GPU, FPGA et accélérateurs matériels spécifiques à un domaine. Le code du projet est distribué sous la licence Apache 2.0.

La programmation pour des systèmes parallèles hétérogènes est compliquée par la présence de composants dans le même système qui utilisent différents modèles pour réaliser le parallélisme (cœurs CPU, instructions vectorielles, GPU, etc.), différents jeux d'instructions et différentes hiérarchies de mémoire. Chaque système utilise sa propre combinaison de ces composants. L'idée principale du projet HPVM est d'utiliser une représentation unifiée de programmes exécutés en parallèle lors de la compilation, qui peut être utilisée pour différents types de matériel prenant en charge le calcul parallèle, notamment les GPU, les instructions vectorielles, les processeurs multicœurs, les FPGA et diverses puces accélératrices spécialisées.

Contrairement à d'autres systèmes, HPVM a essayé de combiner trois capacités pour organiser l'informatique hétérogène : un langage de programmation et une représentation intermédiaire (IR) indépendante du matériel, une architecture de jeu d'instructions virtuelles (V-ISA) et une planification d'exécution :

  • La représentation intermédiaire HPVM étend la représentation intermédiaire LLVM des instructions en utilisant un graphe de flux de données hiérarchique pour capturer le parallélisme au niveau des tâches, des données et du pipeline. La représentation intermédiaire HPVM comprend également des instructions vectorielles et une mémoire partagée. L’objectif principal de l’utilisation d’une représentation intermédiaire est la génération et l’optimisation efficaces de code pour les systèmes hétérogènes.
  • L'architecture de jeu d'instructions virtuelles (V-ISA) résume les fonctionnalités matérielles de bas niveau et unifie diverses formes de parallélisme et d'architectures de mémoire en utilisant uniquement un modèle de parallélisme de base : le graphe de flux de données. V-ISA permet d'obtenir une portabilité entre différents types d'équipements pour le calcul parallèle et permet de ne pas perdre de performances lors de l'utilisation de différents éléments de systèmes hétérogènes. Virtual ISA peut également être utilisé pour fournir un code de programme exécutable universel pouvant s'exécuter à l'aide de CPU, de GPU, de FPGA et de divers accélérateurs.
  • Des politiques de planification flexibles pour le processus de calcul sont appliquées au moment de l'exécution et sont mises en œuvre à la fois sur la base d'informations concernant le programme (structure graphique) et via la compilation de nœuds de programme individuels pour exécution sur l'un des dispositifs informatiques cibles disponibles dans le système.

Les générateurs de code développés par le projet sont capables de traduire les nœuds d'application définis à l'aide d'un ISA virtuel pour une exécution à l'aide de GPU NVIDIA (cuDNN et OpenCL), d'instructions vectorielles Intel AVX, de FPGA et de processeurs x86 multicœurs. Il est à noter que les performances des traducteurs HPVM sont comparables à celles du code OpenCL écrit à la main pour les GPU et les appareils informatiques vectoriels.

Innovations clés de HPVM 2.0 :

  • Une interface de langage hétéro-C++ a été proposée, qui simplifie la parallélisation du code d'application en C/C++ pour la compilation dans HPVM. Hetero-C++ définit des extensions pour le parallélisme au niveau des données et les tâches hiérarchiques qui correspondent aux graphiques de thread HPVM.
  • Un backend FPGA a été ajouté pour fournir la prise en charge de l'exécution de code sur les FPGA Intel. Pour organiser l'exécution, le SDK Intel FPGA pour OpenCL est utilisé.
  • Le cadre DSE (Design Space Exploration) a été ajouté, qui comprend des optimisations du compilateur et des mécanismes permettant d'identifier les goulots d'étranglement pour le réglage automatique des applications pour une plate-forme matérielle donnée. Le framework contient un modèle de performances prêt à l'emploi pour les FPGA d'Intel et permet de connecter vos propres processeurs pour l'optimisation de tous les appareils pris en charge par HPVM. Les optimisations peuvent être appliquées aux niveaux des graphiques de flux de données HPVM et LLVM.
  • Les composants LLVM ont été mis à jour vers la version 13.0.
  • Le code a été réorganisé pour faciliter la navigation dans la base de code, les bibliothèques et les utilitaires.
  • L'infrastructure de test a été améliorée, de nouveaux tests ont été ajoutés pour divers composants HPVM.

Source: opennet.ru

Ajouter un commentaire