Seite 2 von 2

Re: [C++] Schnelleres sin/cos/tan

Verfasst: 18.06.2015, 01:15
von Krishty
Krishty hat geschrieben:Lustig: Mein sincos() ist bloß 15 % schneller als je ein Aufruf an das CRT-sin() und -cos() zusammen.

Aber jetzt kommt’s: Daraufhin habe ich mit Intrinsics alles in astreinen SSE2-Text verwandelt, der Sinus und Kosinus als Vektor zweier doubles schön vektorisiert berechnet –

– und jetzt dauert ein Aufruf so lange wie vier CRT-sin() zusammen.
Weil ich in letzter Zeit viel mit SSE zu tun habe, habe ich mich dem Problem nochmal angenommen. Die SSE-optimierte Variante, die sincos() vektorisiert ausrechnet, ist tatsächlich gut 30 % schneller als die skalare Variante. Und 2,3× so schnell wie cos() und sin() der Visual C++ 2013-CRT. Ich habe es diesmal wieder auf einem Core i7 getestet, jedoch auf was aus der Ivy Bridge-Ära (der Core i7 der früheren Tests hat mittlerweile ein halbes Jahrzehnt auf dem Buckel). Also sowohl eigenes sincos() als auch SSE-vektorisierung lohnen sich. Der Quelltext, den ich früher gepostet habe, sieht auch völlig in Ordnung aus.

Mit 40 % Zeitanteil ist der langsamste Teil der Funktion jetzt übrigens das Kopieren des Rückgabewerts – wegen diesem „keine NRVO mit float“-Bug in Visual C++. Bin gespannt, ob sie den im 2015er Compiler behoben haben.