1 |
Am 02.01.2017 um 22:41 schrieb Uwe Scholz: |
2 |
> Weiß jemand, was passiert, wenn man bei den CFLAGS das march-Flag |
3 |
> einfach weg lässt? Wird das dann automatisch auf das |
4 |
> prozessorspezifische Flag gesetzt - in meinem Fall auf "sandybridge"? |
5 |
|
6 |
Hallo Uwe! |
7 |
|
8 |
Das -march Flag sorgt dafür, dass der Compiler binaries erzeugt, die |
9 |
prozessorspezifische Instruktionen beinhalten können, die dann nur auf |
10 |
Prozessoren laufen, die diese Instruktionen kennen. Z.B. sowas wie SSE4 |
11 |
Befehle. |
12 |
|
13 |
Auf allen Prozessoren, die dann SSE4 unterstützen, würde das binary |
14 |
laufen, aber halt nicht auf Prozessoren, die kein SSE4 kennen. |
15 |
|
16 |
Wenn du das -march Flag weglässt, dann erzeugt der Compile einfache |
17 |
binaries ohne derartige Instruktionen, sodass die binaries theoretisch |
18 |
auf allen Prozessoren (gleicher Architektur) lauffähig sind. Es gibt |
19 |
natürlich auch Programme, bei denen im Quelltext selbst noch |
20 |
Inline-Assembler eingebaut ist, wo derartige Instruktionen einhalten |
21 |
sein können. Dort findet aber in der Regel im Programmcode auch eine |
22 |
Prüfung der CPU statt bevor derartige Befehle genutzt werden. |
23 |
|
24 |
Anstatt des -march Flag kannst du auch das -mtune Flag verwenden, damit |
25 |
bleiben deine binaries auch auf andere Prozessoren lauffähig, können |
26 |
aber optimierten Code für speziell deine CPU enthalten. Die binaries |
27 |
sind dadurch natürlich etwas größer. |
28 |
|
29 |
LG |
30 |
Martin |