Dans le cadre d'un projet de recherche
Pour tester
À 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.
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.
Source: opennet.ru