Wie gut wird SSE* von den Compilern unterstützt/benutzt?



  • Generieren die Compiler hier guten Code, wenn man SSE* nutzen will?


  • Mod

    Ja. Aber erwarte keine Wunder.



  • Mit Intrinsics schon, wenn du aber darauf wartest, dass der Compiler selbst bei allen Gelegenheiten guten SSE-Code erzeugt, kannst du z.T. lange warten.
    Der ICC soll darin recht gut sein, aber mit dem gcc ist es mir erst einmal vorgekommen, dass sich die Performanz beim Anschalten von SSE "von alleine" stark verbessert hat (dafür war es überraschend, ich hielt den Code nur für bedingt SSE-fähig).

    Bei einem kleinen Test fande ich es gerade recht putzig vom gcc, dass er das hier tatsächlich vektorisiert bekommen hat:

    const int asize=1000;
      byte a1[asize];
      byte a2[asize];
      for (int i=0;i<asize;i++)
      {
        a1[i]=i;
        a2[i]=i*2;
      }
    

    Das hatte zur Folge, dass sich der Loop-Body von drei "normalen" Instruktionen auf 54 SSE-Instruktionen vergrößert hat, aber das Ergebnis war tatsächlich etwas schneller.


Anmelden zum Antworten