• [^] # Ou est le problème?

    Posté par (site web personnel, Mastodon) . En réponse au lien Linus Torvalds critique violemment les « niveaux » introduits pour l’architecture x86. Évalué à 5.

    D'après la page wikipedia liée dans l'article: These levels define specific features that can be targeted by programmers to provide compile-time optimizations."

    L'idée est donc de fournir une version du cpu sur lequel on va exécuter le code au compilateur. Ce dernier ne peut pas utiliser les bits cpuid parce qu'il n'a aucune idée si le code généré va tourner sur la même machine que le compilateur lui même.

    L'option pour faire ça existe depuis très longtemps dans gcc (-march) et configure un ensemble d'instructions utilisables. On peut ensuite affiner avec des options supplémentaires (-msse2 par exemple pour activer l'utilisation sse2). On peut aussi utiliser -march=native pour dire au compilateur de détecter le cpu de la machine de compilation et d'optimiser pour ce dernier (si on est utilisateur de Gento par exemple).

    Donc quel est le problème? Le problème est que les valeurs données à l'option -march sont assez arbitraires, souvent des noms de processeurs "représentatifs" (pentium, pentium3, k6, ...). C'est difficile de s'y retrouver. Pouvoir dire "x86_64 v3" est plus précis et un fabricant de processeur peut clairement identifier si un processeur est compatible avec une telle spécification. Ce qui bien sûr n'empêche pas de proposer des options qui ne seront "de base" que dans les générations suivantes (ou peut-ètre jamais), et de fournir les bits cpuid pour tout ce qui peut être décidé à l'exécution (pas à la compilation).