Projet pour ajouter le support de la parallélisation du processus de compilation à GCC

Dans le cadre d'un projet de recherche CCG parallèle Les travaux ont commencé pour ajouter une fonctionnalité à GCC qui permet de diviser le processus de compilation en plusieurs threads parallèles. Actuellement, pour améliorer la vitesse de construction sur les systèmes multicœurs, l'utilitaire make utilise le lancement de processus de compilation distincts, chacun créant un fichier de code distinct. Le nouveau projet expérimente la parallélisation au niveau du compilateur, ce qui pourrait potentiellement améliorer les performances sur les systèmes multicœurs.

Pour tester préparé par une branche de parallélisation distincte de GCC, qui propose un nouveau paramètre « -param=num-threads=N » pour définir le nombre de threads. Au stade initial, nous avons mis en œuvre le transfert des optimisations interprocédurales dans des threads séparés, appelés cycliquement pour chaque fonction et pouvant être facilement parallélisés. Les opérations GIMPLE responsables des optimisations indépendantes du matériel qui évaluent l'interaction des fonctions les unes avec les autres sont placées dans des threads séparés.

À l'étape suivante, il est également prévu de déplacer les optimisations RTL interprocédurales dans des threads séparés, en tenant compte des caractéristiques de la plate-forme matérielle. Après cela, nous prévoyons d'implémenter la parallélisation des optimisations intraprocédurales (IPA) appliquées au code à l'intérieur de la fonction, quelles que soient les spécificités de l'appel. Le lien limitant pour l'instant est le garbage collector, qui a ajouté un verrou global qui désactive les opérations de garbage collection lors de l'exécution en mode multi-thread (à l'avenir, le garbage collector sera adapté pour l'exécution multi-thread de GCC).

Pour évaluer les changements de performances, une suite de tests a été préparée qui rassemble le fichier gimple-match.c, qui comprend plus de 100 1700 lignes de code et 5 8250 fonctions. Les tests sur un système équipé d'un processeur Intel Core i4-8U avec 7 cœurs physiques et 4 cœurs virtuels (Hyperthreading) ont montré une diminution du temps d'exécution des optimisations intra-procédurales GIMPLE de 2 à 3 secondes lors de l'exécution de 4 threads et à 1.72 secondes lors de l'exécution de 2.52. fils, c'est-à-dire Une augmentation de la vitesse de l'étape d'assemblage considérée a été obtenue respectivement de XNUMX et XNUMX fois. Les tests ont également montré que l'utilisation de cœurs virtuels avec Hyperthreading n'entraîne pas d'augmentation des performances.

Projet pour ajouter le support de la parallélisation du processus de compilation à GCC

Le temps global de construction a été réduit d'environ 10 %, mais selon les prévisions, la parallélisation des optimisations RTL permettra d'obtenir des résultats plus tangibles, car cette étape prend beaucoup plus de temps lors de la compilation. Environ après la parallélisation RTL, le temps total d'assemblage sera réduit de 1.61 fois. Après cela, il sera possible de réduire encore le temps de construction de 5 à 10 % en parallélisant les optimisations IPA.

Projet pour ajouter le support de la parallélisation du processus de compilation à GCC

Source: opennet.ru

Ajouter un commentaire