Dans le cadre d'un projet de recherche le travail a commencĂ© pour ajouter Ă GCC la capacitĂ© de diviser le processus de compilation en plusieurs threads exĂ©cutĂ©s en parallĂšle. Actuellement, pour amĂ©liorer la vitesse de compilation sur des systĂšmes multicĆurs, il est utilisĂ© un lancement de processus de compilateur distincts au niveau de l'outil make, chacun d'eux effectuant la compilation d'un fichier de code distinct. Le nouveau projet expĂ©rimente la parallĂ©lisation au niveau du compilateur, ce qui pourrait potentiellement amĂ©liorer l'efficacitĂ© de fonctionnement sur des systĂšmes multicĆurs.
Pour les tests une branche de parallĂ©lisation distincte de GCC, pour laquelle un nouveau paramĂštre «âparam=num-threads=N» a Ă©tĂ© proposĂ© pour dĂ©finir le nombre de threads. Ă ce stade initial, les optimisations interprocĂ©durales, qui sont appelĂ©es de maniĂšre cyclique pour chaque fonction et se prĂȘtent bien Ă la parallĂ©lisation, ont Ă©tĂ© exĂ©cutĂ©es dans des threads distincts. Les opĂ©rations GIMPLE responsables des optimisations indĂ©pendantes du matĂ©riel, Ă©valuant l'interaction entre les fonctions, ont Ă©tĂ© dĂ©placĂ©es dans des threads sĂ©parĂ©s.
Au stade suivant, il est également prévu de déplacer dans des threads distincts les optimisations RTL interprocédurales, prenant en compte les spécificités de la plateforme matérielle. Ensuite, il est prévu de réaliser la parallélisation des optimisations intraprocedurales (IPA) appliquées au code à l'intérieur de la fonction, indépendamment des caractéristiques de l'appel. La limitation actuelle est le ramasse-miettes, auquel une verrouillage global a été ajouté, désactivant les opérations de ramassage pendant l'exécution en mode multithread (à l'avenir, le ramasse-miettes sera adapté à l'exécution multithread de GCC).
Pour Ă©valuer le changement de performance, un ensemble de tests a Ă©tĂ© prĂ©parĂ©, qui compile le fichier gimple-match.c, contenant plus de 100 000 lignes de code et 1700 fonctions. Les tests sur un systĂšme avec un CPU Intel Core i5-8250U avec 4 cĆurs physiques et 8 virtuels (Hyperthreading) ont montrĂ© une rĂ©duction du temps d'exĂ©cution des optimisations intra procĂ©durales GIMPLE de 7 Ă 4 secondes lors de l'exĂ©cution de 2 threads et Ă 3 secondes lors de l'exĂ©cution de 4 threads, soit une augmentation de la vitesse de la phase considĂ©rĂ©e de compilation de 1,72 et 2,52 fois, respectivement. Les tests ont Ă©galement montrĂ© que l'utilisation de cĆurs virtuels lors de l'Hyperthreading n'entraĂźne pas d'augmentation de performance.

Le temps de compilation a Ă©tĂ© rĂ©duit d'environ 10 %, mais selon les prĂ©visions, le parallĂ©lisme des optimisations RTL permettra d'obtenir des rĂ©sultats plus significatifs, car cette Ă©tape prend beaucoup plus de temps lors de la compilation. Approximativement, aprĂšs le parallĂ©lisme RTL, le temps de compilation devrait ĂȘtre rĂ©duit d'un facteur de 1,61. Par la suite, il sera encore possible de rĂ©duire le temps de compilation de 5 Ă 10 % grĂące au parallĂ©lisme des optimisations IPA.

Source : opennet.ru
