Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GCC Discussion :

Paralléliser le fonctionnement de GCC


Sujet :

GCC

  1. #1
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    août 2008
    Messages
    24 980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2008
    Messages : 24 980
    Points : 176 618
    Points
    176 618
    Par défaut Paralléliser le fonctionnement de GCC
    Les compilateurs C++ sont souvent décriés pour leur lenteur, notamment dans le cas de gros fichiers source. Cela est notamment dû à leur fonctionnement en série : ils ont été conçus à une ère où les processeurs multicœurs étaient rares (par exemple, GCC a débuté son existence en 1987). Depuis lors, l’amélioration de performance des processeurs ne se fait plus par une augmentation de fréquence, mais plutôt du nombre de cœurs. La question de la parallélisation devient donc plus pressante. C’est notamment pourquoi LLVM retravaille certaines parties de son infrastructure pour être mieux exploité en contexte multifil.

    Un projet GSoC (Google summer of code) a consisté en l’étude de la parallélisation d’une partie des opérations de GCC, plus particulièrement la partie intermédiaire du compilateur, celle qui s’occupe d’effectuer des optimisations du code indépendantes du processeur ciblé (cette phase se passe sur la représentation intermédiaire GIMPLE). La partie intermédiaire prend une quinzaine de pour cent du temps d’exécution total sur un fichier de test (gimple-match.c, qui représente 100 358 lignes de code C++). Cette phase se passe en deux temps : les optimisations intraprocédurales (optimiser une fonction sans considérer ses interactions avec d’autres) et interprocédurales (avec les interactions, appelées IPA par GCC : inter process analysis).

    L’architecture proposée des optimisations se base sur une file producteur-consommateur pour chaque passe d’optimisation, chaque fil d’exécution pouvant prendre un élément dans cette file. De la sorte, si toutes les fonctions à optimiser sont bien équilibrées, on peut espérer diviser le temps d’exécution par le nombre de cœurs disponibles.


    Le résultat est assez intéressant : en passant d’un à huit fils d’exécution (le processeur de test disposant de quatre cœurs), le temps complet d’exécution des optimisations est divisé par 2,52 (au vu des parties qui ne sont pas parallélisées, on pouvait espérer un facteur théorique de 2,7). Le temps complet de compilation ne descend que de neuf pour cent. En appliquant la même technique aux optimisations spécifiques aux processeurs (en travaillant au niveau RTL plutôt que GIMPLE), les gains sont plus marqués, cette partie représentant une portion plus importante du temps de compilation : on peut gagner soixante et un pour cent en temps d’exécution en utilisant huit fils d’exécution !


    Ces développements ne sont pas encore intégrés dans le code de GCC, mais cela devrait arriver, au vu des gains que l’on peut espérer. Une parallélisation plus fine pourrait encore diminuer les temps de compilation.

    Source : présentation GNU Cauldron 2019.
    Vous souhaitez participer aux rubriques Qt ou PyQt (tutoriels, FAQ, traductions), HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  2. #2
    Membre habitué
    Femme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    décembre 2017
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : décembre 2017
    Messages : 39
    Points : 187
    Points
    187
    Par défaut
    Je vois que ça parle de make -j dans leurs slides, mais où est le gain par rapport à ça dans une situation réelle ? C'est pas clair, ça s'étale sur les gains de perfs par rapport à un seul fichier, dont la taille est déjà en soi une erreur à ne pas commettre. On gagnerait plus de temps de compilation à le séparer en plusieurs fichiers, sans pour autant tomber dans l'extrême inverse où on passe plus de temps à multiplier les process et à linker qu'à effectuer la compilation.

    Est-ce qu'on a vraiment besoin de paralléliser GCC ou est-ce que c'est juste un projet de recherche ? Personnellement quand je veux compiler un projet, j'enlève cette maudite option -j parce que j'ai envie de faire autre chose en attendant et que j'apprécie pas trop le ventilateur.

Discussions similaires

  1. SDL ne fonctionne pas avec GCC version 4
    Par hbx360 dans le forum SDL
    Réponses: 6
    Dernier message: 16/04/2015, 18h24
  2. Réponses: 1
    Dernier message: 03/09/2011, 15h01
  3. commande gcc qui ne fonctionne pas
    Par bilinemiline dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 24/02/2010, 18h00
  4. Réponses: 13
    Dernier message: 15/02/2009, 20h37
  5. champs de bits dans une structure - option de gcc pour bon fonctionnement
    Par matdakillah dans le forum RedHat / CentOS / Fedora
    Réponses: 1
    Dernier message: 08/10/2008, 13h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo