IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 767
    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 (tutoriels, FAQ, traductions) ou 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 averti
    Femme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Décembre 2017
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Décembre 2017
    Messages : 60
    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, 17h24
  2. Réponses: 1
    Dernier message: 03/09/2011, 14h01
  3. commande gcc qui ne fonctionne pas
    Par bilinemiline dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 24/02/2010, 17h00
  4. Réponses: 13
    Dernier message: 15/02/2009, 19h37
  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, 12h44

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