Le projet LLVM a introduit HPVM 1.0, un compilateur pour CPU, GPU, FPGA et accélérateurs

Les développeurs du projet LLVM ont publié la version du compilateur HPVM 1.0 (Heterogeneous Parallel Virtual Machine), visant à simplifier la programmation pour les systèmes hétérogènes et à fournir des outils pour générer du code pour les CPU, GPU, FPGA et accélérateurs matériels spécifiques au domaine (prise en charge de Les FGPA et les accélérateurs n'étaient pas inclus dans la version 1.0). Le code du projet est distribué sous la licence Apache 2.0.

L'idée principale de HPVM est de fournir une représentation unifiée de programmes exécutables en parallèle lors de la compilation, qui peut être utilisée pour l'exécution à l'aide de divers 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 tenté de combiner trois capacités pour organiser l'informatique hétérogène : la représentation intermédiaire indépendante du langage et du matériel, l'architecture de jeu d'instructions virtuelles (ISA) et la planification d'exécution.

La représentation intermédiaire (IR) indépendante de la cible de HPVM s'appuie sur la représentation des instructions intermédiaires LLVM 9.0 et l'étend avec 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 (ISA) permet la portabilité entre différents types de matériel informatique parallèle et permet de ne pas perdre en 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.

Au stade actuel de développement, HPVM propose des générateurs de code 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 et de processeurs x86 multicœurs. Au moment de l'exécution, HPVM applique des politiques de planification de processus informatiques flexibles, mises en œuvre à la fois sur la base des informations du programme (structure graphique) et en compilant des nœuds de programme individuels pour une exécution sur l'un des périphériques informatiques cibles disponibles dans le système.

Il est à noter que l’utilisation de HPVM peut permettre une augmentation significative de la productivité. Les performances des traducteurs HPVM sont comparables à celles du code OpenCL écrit à la main pour les GPU et les appareils informatiques vectoriels.

Par rapport à la première version préliminaire, HPVM 1.0 inclut la prise en charge des opérations tensorielles d'algèbre linéaire, des interfaces pour Pytorch et Keras, les approximations d'opérateurs de convolution et un cadre de réglage d'approximation qui sélectionne automatiquement les approximations optimales pour des opérations tensorielles spécifiques et sélectionne la configuration qui offre des performances optimales.

Source: opennet.ru

Ajouter un commentaire