Ich arbeite hier gerade auf einem drei Jahre alten Intel Atom an einer gleitkommaintensiven Anwendung. Das Optimization Manual sagt:
So. Würde ich ja gern machen, aber mein Atom ist bloß x86. Visual C++ 2010 nutzt in x86 den FP Stack, selbst mit /Arch:SSE2 wandern nur wenige Operationen durch die XMM-Register.Assembly/Compiler Coding Rule 9. (MH impact, H generality)
For Intel Atom processors, prefer SIMD instructions operating on XMM register over X87 instructions using FP stack. Use Packed single-precision instructions where possible.
Der Unterschied im Manual ist minimal; 20 % geringere Latenz für einige Befehle. Parallelisierung, die den Durchsatz verdoppeln würde, kriegt Visual C++ nicht hin. Allerdings setze ich an einigen Stellen explizit Intrinsics ein, und die Werte werden dann ständig zwischen XMM-Registern und FP Stack hin- und hergeschoben. Das macht mir Sorgen.
Wie kriege ich jetzt so hübschen schlanken Maschinentext, wie mir x64 auf meinem PC ausspuckt, in mein x86-Kompilat?
Bitte keine Intrinsics. Ja; damit würde ich das alles doppelt und dreimal (so, wie ich mich kenne, wohl auch zehnmal) so schnell kriegen. Dann würde ich aber auch noch 100 Jahre dransitzen. Außerdem habe ich kein Internet und Auflösung 1024×768, also könnte ich garnicht so viel in der MSDN nachschlagen wie ich an Intrinsics brauche.
Gruß, Ky