Vous n'êtes pas identifié(e).
Pages : 1
et
Et voilà le résultat pour mon processeur apollo lake (nom de code goldmont):
-march: skylake
-mtune: generic
Malgrès ça, le noyau semble fonctionner. Apparemment ma version de gcc ne gère pas encore les goldmont. Mais sur le site web de gcc il y a de grosses différences entre un skylake et un goldmont:
‘skylake’
Intel Skylake CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC and XSAVES instruction set support.
et:
‘goldmont’
Intel Goldmont CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT and FSGSBASE instruction set support.
Donc, je me demande si il y a un moyen de donner à GCC les options goldmont sans utiliser les -march et -mtune ? EDIT: je viens de lire sur la page des option gcc qu'il fallait passer les options de la façon suivante: -m suivit du nom de l'instruction par exemple: "-mmmx -mmovbe -msse".
Mais je me demande aussi si le -march=native et -mtune=native fonctionnent correctement ?
Sinon, comme j'ai un autre pc à optimiser, je me demande où sur internet trouver la liste des instructions supportées par un microprocesseur ?
Dernière modification par Lunix64 (18-09-2020 07:28:35)
Hors ligne
Bonjour à tous,
J'ai compilé un noyau pour Buster avec les options: -O3 -march=native -mtune=native
Le système me parait plus réactif avec ce noyau. Mais j'ai vérifié à quoi correspondait le "native", avec les commandes:gcc -march=native -Q --help=target|grep march
etgcc -march=native -mtune=native -Q --help=target|grep mtune
Et voilà le résultat pour mon processeur apollo lake (nom de code goldmont):
-march: skylake
-mtune: generic
Malgrès ça, le noyau semble fonctionner. Apparemment ma version de gcc ne gère pas encore les goldmont. Mais sur le site web de gcc il y a de grosses différences entre un skylake et un goldmont:‘skylake’
Intel Skylake CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC and XSAVES instruction set support.
et:‘goldmont’
Intel Goldmont CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT and FSGSBASE instruction set support.
Donc, je me demande si il y a un moyen de donner à GCC les options goldmont sans utiliser les -march et -mtune ? EDIT: je viens de lire sur la page des option gcc qu'il fallait passer les options de la façon suivante: -m suivit du nom de l'instruction par exemple: "-mmmx -mmovbe -msse".
Mais je me demande aussi si le -march=native et -mtune=native fonctionnent correctement ?
Sinon, comme j'ai un autre pc à optimiser, je me demande où sur internet trouver la liste des instructions supportées par un microprocesseur ?
Essaye de voir ici :
https://www.intel.fr/content/www/fr/fr/ … =title:asc
Si tout le monde pense pareil, c'est qu'aucune personne ne pense beaucoup.
Intel® Core™2 Duo E8500 × 2
4,0 Gio DDR3 - 1333 MHz
Et si vous cherchiez votre solution dans le wiki => https://debian-facile.org/accueil
Hors ligne
Hors ligne
Malgrès ça, le noyau semble fonctionner. Apparemment ma version de gcc ne gère pas encore les goldmont. Mais sur le site web de gcc il y a de grosses différences entre un skylake et un goldmont:
Quelle est ta version de gcc ?
Aussi la majorité des processeur intel sortis post-skylake sont des dérivés du skylake donc après c'est normal qu'il detecte skylake si il ne supporte pas les cpu plus recents.
C'est déjà plus optimisé que l'optimisation march=x86_64 qui se base sur les premiers x86_64 pour rester générique et avoir des binaires compatible avec tous les cpu x86_64.
L'intérêt du générique cependant c'est d'être compatible avec tous cpu x86_64 et si tu veux changer le disque de la machine pour une machine différente (genre opti skylake sur ryzen......) c'est pas forcement stable de ne pas être générique et ça peut crasher voir juste pas fonctionner.
Tu peux dire à gcc d'utiliser des instructions en particulier également, la doc gcc les listes toutes (après faut connaitre ta version de gcc pour savoir quelles optimisations cpu sont supportées par ta version)
D'ailleurs tu n'es pas obligé de mettre -march=native si tu trouves que la détection ne te correspond pas, tu peux directement mettre -march=goldmont (si supporté par le compilo).
Aussi par curiosité comment lances-tu la compil du kernel avec les options, tu modifie les makefiles ou tu ajoute les args ?
En fait dans tout les cas je te conseilles de faire un diff entre le binaire d'un kernel linux build avec ou sans tes optimisations avec les memes sources et la meme config sans rien toucher.
En théorie tu ne devrais pas avoir de différences en arg (et potentiel crash si on modifie les sources hors connaissances avancées de cause) car le kernel normalement n’interprètes pas tes optimisations que tu pourrais lui donner en arg et cet article explique mieux que moi le pourquoi sans patch (qui n'ont pas étés accepté en upstream) pourquoi on ne compile pas un kernel linux avec ce genre d'optimisation (histoires notamment de stabilitée et de maintenabilité).
D'ailleurs tout ce que je dis dans ce post on parle d'optimisation cpu mais pas que, des optimisation aussi juste du compilo pour optimiser les sorties ou la vitesse de traitement comme -Ofast entre autres et tout un tas d'autres.
Le kernel gère la mémoire, de tous les trucs en espace noyau: tout un tas de choses bas niveau et critiques, et faire certaines options d'optimisation spéciques et non génériques ont beaucoup plus de possibilités d'impact indésirables qu'on pourrait penser, les options par default dans les makefiles des sources sont choisis avec grand soins.
Sur un programme destiné à tourner en espace utilisateur c'est déjà moins risqué ni problématique et c'est un peu ce que permet gentoo principalement (et les devs gentoo font aussi de recommendations et des gros warnings sur les optimisations et choisissent souvent de faire leurs patchs touchant à ce genre de chose avec grand soin également pour éviter les problèmes).
Pour conclure appliquer des optimisation c'est pas "yes je vais gagner beaucoup de perf et c'est sans conséquences...". Il y a des impacts en fonction du types d'optimisation à prendre en compte, voir https://wiki.gentoo.org/wiki/GCC_optimization
Dernière modification par naguam (18-09-2020 12:05:04)
Unixien?
Compiler son kernel!
Hors ligne
Quelle est ta version de gcc ?
La 8.3, celle de Buster.
Aussi par curiosité comment lances-tu la compil du kernel avec les options, tu modifie les makefiles ou tu ajoute les args
J'ai modifé le makefile à la racine du dossier du noyau. C'est un kernel 5.8.4, J'ai remplacé l'option "-O2" par "-O3 -march=native -mtune=native".
Makefile d'origine, la deuxième ligne:
Makefile modifié, seulement la deuxième ligne, à la place de -O2:
Pour conclure appliquer des optimisation c'est pas "yes je vais gagner beaucoup de perf et c'est sans conséquences...". Il y a des impacts en fonction du types d'optimisation à prendre en compte
OK, merci pour toutes ces infos. Du coup je me dit qu'un -O3 est peut-être pas une bonne idée, mais les optimisations basées sur les instructions spécifiques à un processeur ?
En fait, je voit pas trop l'intérêt de faire des processeurs avec des instructions spécifiques qui sont sensées accélérer les logiciels, si ni le noyau, ni les logiciels, ne les utilisent. Pour moi, c'est au moins le noyau qui doit les utiliser, les logiciels eux font en général des appels systèmes au noyau et pour le reste, c'est mieux qu'ils les utilisent, mais pour ça il faut avoir leur code source et qu'il soit compilable sur la machine.
J'ai aussi essayé de compiler gnu icecat avec les mêmes optimisations, résultat: j'ai une librairie .so de 2 Giga, et des erreurs qui s'affichent dans le terminal, mais icecat semble fonctionner quand même. En tout cas, ces erreurs et cet librairie de 2 Giga, ça ne me met pas en confiance pour utiliser le logiciel.
Par contre pour le noyau, compiler avec les optimisations ne m'a jamais posé de problèmes sauf une fois avec un vieux kernel: un warning dans le pilote AMDGPU sur la longueur d'une chaine de carractère, j'ai corrigé le code source, et plus de warning. Le warning n'apparaissait qu'avec -O3, pas en -O2.
Hors ligne
Dernière modification par naguam (18-09-2020 22:01:07)
Unixien?
Compiler son kernel!
Hors ligne
Pages : 1