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).
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