GCC 6.1 disponible : la norme C++ 14 utilisée par défaut
Attention aux migrations
Le 28 avril 2016 à 14h50
3 min
Logiciel
Logiciel
Après plus d’un an depuis GCC 5.0, la version 6.1 de la suite de compilation est disponible pour tous. Il s’agit d’une mouture particulièrement importante, notamment par son utilisation de la norme C++ 14 en lieu et place de C++ 98.
En dépit de son numéro de version, GCC 6.1 est bien la première vraie version de la branche 6.X pour les développeurs. Les améliorations sont particulièrement nombreuses et importantes. La principale est clairement l’utilisation par défaut de la norme C++ 14 pour la compilation. Jakub Jelinek (Red Hat) prévient d’ailleurs dans l’annonce qu’en fonction des projets, il faudra peut-être revoir une partie du code ou activer d’anciens modes de compilation. Parallèlement, le support expérimental de C++ 17 progresse.
OpenMP, OpenAAC et architectures
GCC 6.1 est également compatible avec les spécifications OpenMP 4.5 pour le parallélisme des calculs, ainsi qu’OpenAAC 2.0a pour les différentes méthodes d’accélérations de ces derniers, notamment en leur permettant d’être lancés sur des GPU NVIDIA. Idem pour la technologie HSA (Heterogeneous System Architecture).
Côté support des architectures, de nombreux points sont à souligner. GCC 6.1 supporte pleinement Zen chez AMD, Skylake chez Intel (avec les extensions AVX-512) et z13 chez IBM. Les architectures AR64 et Power sont également mieux exploitées. D’autres par contre, anciennes, seront supprimées dans de prochains versions. C’est notamment de toutes celles qui vont d’arm2 à strongarm1110.
Des optimisations renforcées
La nouvelle version de la suite de compilation comprend également une foule d’améliorations diverses, notamment dans tout ce qui touche aux optimisations automatiques du code, qui se veulent plus efficaces. Deux domaines sont particulièrement concernés : les optimisations inter-procédurales et celles du linker. Pour ce dernier, GCC 7 supportera d’ailleurs les optimisations incrémentielles.
Les diagnostics se veulent en outre beaucoup plus pratiques dans leurs résultats, avec des emplacements plus précis, des suggestions pour les éléments identifiants mal écrits, les noms d’options et ainsi de suite. GCC fournit en complément des suggestions sur les corrections à apporter. Enfin, de nouveaux avertissements ont été mis en place.
La récupération de GCC 6.1 pourra se faire depuis une liste de miroirs sur cette page. Ceux qui souhaitent consulter la (très) longue liste des modifications et améliorations pourront le faire sur le site officiel.
GCC 6.1 disponible : la norme C++ 14 utilisée par défaut
-
OpenMP, OpenAAC et architectures
-
Des optimisations renforcées
Commentaires (45)
Vous devez être abonné pour pouvoir commenter.
Déjà abonné ? Se connecter
Abonnez-vousLe 28/04/2016 à 14h56
Je m’en vais recompiler mon kernel avec mon gpu de suite " />
Le 28/04/2016 à 15h08
GCC 6.1 supporte pleinement Zen chez AMD
Ah ouai, ‘sont au taquet. Bien.
Le 28/04/2016 à 15h10
Le 28/04/2016 à 15h25
Je t’avoue que la seule chose que je recompile de temps à autre c’est FFMpeg…
D’ailleurs est-ce que le kernel implémente au moins openAAC ?
Le 28/04/2016 à 15h30
Le 28/04/2016 à 15h54
Ça permettrait du coup à GCC d’être compilé avec les openMP et openAAC pour paralléliser la compil sur GPU… Non ? " />
Le 28/04/2016 à 16h04
On passe de C++ 98 à C++14 en attendant C++ 17.
Ils font un random sur les numéros de version ?
Le 28/04/2016 à 16h06
C++ (19)98 à C++ (20)14, je pense.
Le 28/04/2016 à 16h12
Je suis un boulet, je ne trouve pas de quoi signaler l’erreur…
Ce n’est pas OpenAAC, mais OpenACC.
Le 28/04/2016 à 17h09
Le 28/04/2016 à 17h30
Le 28/04/2016 à 17h32
de mémoire, la 4.8
Le 28/04/2016 à 17h38
Y aurai-t-il une synergie avec Vulkan? " />
Le 28/04/2016 à 18h04
Le 28/04/2016 à 20h01
Sans doute pas trop d’intérêt, la compilation c’est une tâche pleine de branches, pas spécialement adaptée aux GPU (SIMD : Same Instruction Multiple Data, autrement dit tout le monde fait la même chose ou presque).
Le 28/04/2016 à 20h03
Toutes depuis 4.8 effectivement il me semble, mais le support par défaut était resté à C++98 (il fallait passer le flag -std=c++11 pour activer). Je ne sais pas quoi en fait (" />), mais quelques cas doivent être gérés différemment par les deux standards, et l’idée était de garder la rétro-compatibilité.
Le 28/04/2016 à 20h06
C’est moins performant que le compilateur de Visual Studio je suppose ?
Le 28/04/2016 à 20h07
blague ? Vulkan c’est une API C, qui n’a pas grand chose à voir avec C++14 (dommage, ça la rendrait sans doute plus digeste). Des interfaces C++ existent, mais pas grand chose à voir avec GCC dans tous les cas.
Si c’est le support HSA qui te fait penser à ça, c’est pas trop pour le même but a priori : Vulkan est orienté graphismes et très bas niveau (vise à maximiser l’utilisation GPU pour du rendu), alors que le support HSA est plutôt pour le calcul (ou les tâches lourdes et parallélisables en général, mais pas que graphisme) et vise à remonter l’abstraction, à rendre l’utilisation conjointe CPU/GPU plus facile (par exemple en fusionnant les espaces mémoire CPU/GPU)
Le 28/04/2016 à 20h07
GCC supporte le C++11⁄14 depuis longtemps, la différence est que maintenant il n’y a plus besoin de spécifier explicitement le standard (-std=c++14 est implicitement activé par défaut) " />
Du coup plus besoin de convaincre ton chef obsolète d’activer le C++11 pour profiter des nouveautés ! " />
Le 29/04/2016 à 09h06
Le 29/04/2016 à 09h49
Je plussoie avec vigueur ! Non, faire poiroter un programmeur n’augmentera pas la qualité de son travail, au contraire. Et je pense qu’on peut remplacer “programmeur” par n’importe quel métier dans cette phrase.
Le 29/04/2016 à 10h18
Le 29/04/2016 à 10h43
Plutôt que d’attendre 1/2h pour tester une simple modif, il vaut mieux créer un test unitaire en isolant une partie du code quand c’est possible.
Mais la rapidité de compilation reste très importante pour la productivité.
Ils ont quand même mis un coup d’accélérateur appréciable sur l’avancement de la norme et son intégration dans les outils. Heureusement pour ce langage qui commençait à dépérir face à des concurrents de mieux en mieux armés face aux avantages du C++.
Le 29/04/2016 à 10h56
Le 29/04/2016 à 11h40
OpenMP, OpenAAC et architectures
Perso, je préfère compiler mes vidéos en OpenDTS ou OpenAC3 .
" />
Le 29/04/2016 à 12h41
Le 29/04/2016 à 12h46
Le 29/04/2016 à 12h50
Le 29/04/2016 à 13h05
Le 29/04/2016 à 13h15
Le 29/04/2016 à 13h28
Le 28/04/2016 à 20h12
“Performant” pour un compilo, ça peut prendre pas mal de colorations différentes :
Le compilateur de Visual Studio (msvc) est super lent (plus que gcc, c’est dire… surtout qu’il ne connait pas ccache par exemple), les binaires de sortie sont à ma connaissance comparables à gcc, mais il est super en retard sur le support des standards (C++11 vient tout juste d’être supporté). Par contre Clang (llvm) met tout le monde d’accord sur la vitesse de compilation, de loin
Le 28/04/2016 à 20h20
Le 28/04/2016 à 20h39
Quand ton travail c’est coder, attendre 10 à 30 min à chaque fois que tu fais une modif c’est chiant.
Quand il faut attendre plus de 2h pour que tous ton projet soit recompilé depuis 0 c’est long aussi.
Le 28/04/2016 à 21h00
ninja + ccache sur un ramdisk " /> miam miam
@guy02 :
- Intérêt ci-dessus, c’est effectivement super casse-pieds quand tu codes.
Après chacun ses priorités, tu peux avoir des secteurs d’activités dans lesquels la vitesse du binaire est effectivement le plus important
Le 28/04/2016 à 21h11
On a déjà des ssd avec des 6 coeurs, ce qui prend du temps c’est le link qui lui est pas multi threadé
Le 29/04/2016 à 05h49
Le 29/04/2016 à 06h56
Le 29/04/2016 à 07h21
Le 29/04/2016 à 07h28
Le 29/04/2016 à 07h40
Le 29/04/2016 à 07h40
Non, ça fait un moment que O3 produit du code strictement plus rapide que O2 :
http://www.phoronix.com/scan.php?page=news_item&px=GCC-5.3-New-Opt-Tests
Le 29/04/2016 à 07h57
Rapport avec la choucroute ? On parle de compiler rapidement, pas de coder rapidement.
Compiler rapidement, ça permet d’avoir plus de temps pour tester (la présence de bugs, et l’impact des optimisations qu’on produit nous même par exemple), ce qui permet justement de s’assurer que le code est pas développé avec les pieds … Qu’il contient un minimum de bug, qu’il a des performances convenables, etc. Parce qu’on produit pas un code parfait du premier coup.
Pas mal de boîtes optimisent le time-to-market et s’en foutent de produire du soft moisi, mais ça n’a absolument rien à voir avec le besoin d’un compilateur qui produit rapidement des binaires.
Le 29/04/2016 à 08h32
Les tests sont fait à priori sur un Xeon qui possède une grosse quantité de cache et est donc moins sensible aux défauts de cache.
Le problème du niveau 3, c’est qu’il a tendance à réduire les appels de fonction et tout ce que est instructions de saut dans le code en en “inlinant” les fonctions (ça permet par exemple de ne pas se taper la mise sur la pile des paramêtres ni d’aller chercher à l’autre bout du code) ou en déroulant les boucles.
Mais du coup, en faisant ça, tu as un exécutable plus gros. Et là, c’est très dépendant des codes et des processeurs mais on peut avoir d’énorme problème de défauts de cache.
Le 29/04/2016 à 08h56