Um mal noch kurz einzustreuen, wie das bei Free Pascal ist:
Da die FPU nur unter Windows 64-Bit als "deprecated" deklariert ist, nicht aber unter Linux, Mac
OS X und Co verwenden wir nur unter Win64 per default die SSE
Unit (Standard ist hier SSE Version 1) mit maximal Double-Precision, aber unter den anderen x86_64-Systemen verwenden wir weiterhin per Default die FPU mit Extended-Precision. Es gibt übrigens ein Define für den Compiler, welches es erlaubt auch die FPU für Win64 zu verwenden, dieses ist aber standardmäßig deaktiviert (und wahrscheinlich auch nicht wirklich getestet). Dies funktioniert aber deswegen, weil Windows trotzdem die FPU Register sichern muss, damit 32-Bit Anwendungen (welche ja die FPU erwarten) weiterhin korrekt laufen. Die Verwendung von SSE bedeutet aber nicht automatisch, dass der Compiler auch Vectorizing oder ähnliche Späße macht. In dem Zusammenhang wird SSE einfach nicht als SIMD, sondern als SISD (Single Instruction Single Data) verwendet...
Das es manchmal sinnvoll sein kann von SSE auf SSE2 oder SSE3 zu wechseln zeigt
dieser Bugreport in dem die Laufzeit eines Algorithmus unter x86_64 von 125ms auf 64ms gedrückt werden konnte (und noch ein paar Millisekunden mehr nach einer weiteren Optimierung).
Ein anderer Fall ist "reine Pascalcode" vs. "Assemblercode". Da hatten wir das
Beispiel von
Move
und
FillChar
. Die Einführung von Assemblerroutinen für diese beiden Basisfunktionen hat bei einem Nutzer den Code von etwa 4 Sekunden auf etwa 500ms beschleunigt.
Nebenbei erwähnt: FPC erlaubt es auch für x86_64 die Verwendung von inline Assembler Abschnitten (es muss also nicht die gesamte Routine Assembler sein).
Gruß,
Sven