Learning to Parallelize with OpenMP by Augmented Heterogeneous AST Representation
Ce document propose Graph2Par, une nouvelle approche d'apprentissage basée sur les graphes utilisant une représentation AST hétérogène augmentée et un nouvel ensemble de données OMP_Serial pour atteindre une précision de 85 % dans la détection de boucles parallélisables avec OpenMP, surpassant ainsi les méthodes basées sur les jetons de l'état de l'art.
Article original sous licence CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Ceci est une explication générée par l'IA de l'article ci-dessous. Elle n'a pas été rédigée ni approuvée par les auteurs. Pour une précision technique, consultez l'article original. Lire la clause de non-responsabilité complète
Les ordinateurs modernes sont devenus comme de vastes villes peuplées de minuscules travailleurs, chacun capable d'accomplir une tâche en une fraction de seconde. Pour que ces machines fonctionnent rapidement, les programmeurs doivent leur apprendre à envoyer de nombreux travailleurs accomplir des tâches simultanément, plutôt que de les aligner pour travailler un par un. Cette pratique, connue sous le nom de parallélisation, est essentielle pour tirer le meilleur parti du matériel puissant d'aujourd'hui. Cependant, dire à un ordinateur comment diviser son travail est difficile. Cela nécessite une compréhension profonde de la manière dont les différentes parties d'un programme dépendent les unes des autres. Si un programmeur se trompe, le programme peut planter ou produire un mauvais résultat. Depuis des décennies, des experts ont construit des outils pour trouver automatiquement ces opportunités de travail d'équipe, mais ces outils sont souvent trop prudents, manquant de nombreuses occasions d'accélérer les choses, ou ils sont confus par des structures de code complexes.
Dans une étude récente, des chercheurs ont cherché à apprendre aux ordinateurs à reconnaître ces opportunités par eux-mêmes, en utilisant une méthode inspirée de la façon dont les machines apprennent à comprendre le langage. L'équipe, dirigée par Le Chen et ses collègues de l'Université de l'État de l'Iowa et d'Intel Labs, s'est concentrée sur un type spécifique d'instruction utilisé dans le langage de programmation C appelé OpenMP. Ces instructions agissent comme des panneaux de signalisation, indiquant à l'ordinateur où il est sûr de lancer plusieurs travailleurs à la fois. Le défi était que les outils existants, qui reposent sur des règles mathématiques rigides, échouent souvent à voir la forêt derrière l'arbre. Ils peuvent manquer une boucle parfaitement parallélisable simplement parce qu'elle contient un appel de fonction ou une structure imbriquée qui semble complexe pour un analyseur traditionnel. Les chercheurs ont réalisé que pour résoudre cela, ils avaient besoin d'une nouvelle façon de montrer à l'ordinateur ce à quoi le code ressemble réellement, non pas seulement comme une suite de mots, mais comme une carte de sa structure et de son sens.
Pour relever ce défi, l'équipe a d'abord dû construire une immense bibliothèque d'exemples, un ensemble de données qu'ils ont nommé OMP Serial. Ils ont rassemblé près de 18 600 exemples de boucles qui étaient déjà marquées comme parallèles et environ 14 000 boucles qui ne l'étaient pas. Ils les ont extraits de milliers de projets logiciels réels trouvés sur Internet, ainsi que d'exemples synthétiques soigneusement élaborés pour tester des modèles spécifiques. Cette collection leur a fourni un terrain fertile pour l'apprentissage. Mais posséder les données n'était que la moitié de la bataille ; ils avaient besoin d'un moyen de les injecter dans un modèle d'apprentissage automatique capable de véritablement comprendre le code. Au lieu de traiter le code comme une phrase dans un livre, où l'ordre des mots importe le plus, ils ont décidé de le traiter comme une carte complexe. Ils ont créé une représentation appelée arbre de syntaxe abstraite hétérogène augmenté. En termes simples, il s'agit d'un graphe détaillé qui connecte chaque élément du code. Il montre non seulement la hiérarchie du programme — comme une commande parente et ses commandes enfants — mais aussi comment le code circule d'une étape à la suivante et comment les mots du code sont positionnés les uns par rapport aux autres dans le texte. Cette carte capture le squelette structurel du programme tout en préservant les relations subtiles entre les différentes parties qu'une simple liste de mots manquerait.
Avec cette nouvelle carte en main, les chercheurs ont entraîné un modèle d'apprentissage sophistiqué connu sous le nom de transformeur de graphe hétérogène. Imaginez ce modèle comme un étudiant à qui l'on montre des milliers de ces cartes, accompagnées de la bonne réponse pour chacune d'elles : si la boucle est sûre à paralléliser ou non. Le modèle apprend à repérer les motifs cachés qui indiquent la sécurité. Il prête attention aux différents types de connexions dans la carte, comprenant qu'un lien entre un appel de fonction et une variable peut signifier quelque chose de différent qu'un lien entre deux opérations mathématiques. Une fois entraîné, le modèle a été testé sur sa capacité à prédire quelles boucles pouvaient être parallélisées et, surtout, quel type spécifique d'instruction devrait être utilisé pour le faire. Les résultats ont été frappants. Le modèle a atteint une précision de 85 pour cent dans la détection des régions parallélisables, surpassant de manière significative les meilleurs outils existants qui reposent sur l'analyse statique traditionnelle.
L'étude a également révélé précisément là où les anciens outils échouaient. Les chercheurs ont découvert que les erreurs les plus courantes commises par les logiciels traditionnels concernaient les boucles incluant des appels de fonctions, les boucles réduisant une grande quantité de données en une seule valeur, et les boucles imbriquées dans d'autres boucles. Ce sont les cas délicats où le code semble désordonné pour un analyseur rigide mais est en réalité sûr pour un travail parallèle. La nouvelle approche d'apprentissage automatique, en revanche, a géré ces structures complexes avec beaucoup plus de succès. Elle ne s'est pas contentée de deviner ; elle a appris la logique sous-jacente de la forme du code. Les chercheurs ont démontré qu'en combinant une vue structurelle riche du code avec des algorithmes d'apprentissage puissants, il est possible d'automatiser une tâche qui a longtemps nécessité l'intuition humaine. Ce travail suggère que l'avenir de l'écriture de logiciels rapides ne réside peut-être pas dans de meilleurs recueils de règles pour les ordinateurs, mais dans l'apprentissage de la vision du code telle qu'un programmeur humain expérimenté le voit : comme un système vivant et interconnecté plutôt que comme une séquence statique de commandes.
Noyé(e) sous les articles dans votre domaine ?
Recevez des digests quotidiens des articles les plus récents correspondant à vos mots-clés de recherche — avec des résumés techniques, dans votre langue.