1

Est-ce que le drapeau -march dans les compilateurs (par exemple: gcc) a vraiment de l'importance?Benchmark du compilateur -march flag?

serait-il plus rapide si je compile tous mes programmes et le noyau à l'aide -march = my_architecture au lieu de -march = i686

+3

Eh oui, c'est important. Sinon, cette option n'existerait pas. Cela affecte le jeu d'instructions et la planification que le compilateur va générer. – Mysticial

Répondre

3

Oui, il fait, bien que les différences ne sont parfois pertinentes. Ils peuvent cependant être assez gros si votre code peut être vectorisé pour utiliser SSE ou d'autres ensembles d'instructions étendus qui sont disponibles sur une architecture mais pas sur l'autre. Et bien sûr, la différence entre 32 et 64 bits peut (mais pas toujours) être perceptible (c'est -m64 si vous le considérez comme un type de paramètre -march).

Comme preuve anegdotic, quelques années je rencontre un bug drôle dans gcc où un morceau de code particulier qui a été exécuté sur un Pentium 4 serait environ 2 fois plus lent lorsqu'il est compilé avec -march=pentium4 que lorsqu'il est compilé avec -march=pentium2 . Donc, souvent, il n'y a pas de différence, et parfois il y en a, parfois c'est l'inverse que vous attendez. Comme toujours: mesurez avant de décider d'utiliser des optimisations qui vont au-delà de la plage «sûre» (par exemple, en utilisant votre modèle de CPU exact au lieu d'un modèle plus générique).

1

Il n'y a aucune garantie que tout code que vous compilez avec march sera plus rapide/plus lent w.r.t. l'autre version. Cela dépend vraiment du type de code et le résultat réel ne peut être obtenu que par mesure. Par exemple, si votre code a beaucoup de potentiel pour la vectorisation, les résultats peuvent être différents avec et sans "mars". D'autre part, parfois le compilateur fait un travail médiocre pendant la vectorisation et cela peut entraîner un code plus lent lorsqu'il est compilé pour une architecture spécifique.