SSE Zeitvergleich

Benutzeravatar
AlexPi11
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 154
Registriert: 18. Apr 2009 15:32

SSE Zeitvergleich

Beitrag von AlexPi11 » 8. Nov 2014 02:13

Ich würde gerne einen Laufzeiten Vergleichs-Thread starten, um einschätzen zu können wie gut/schlecht die eigenen Werte denn nun sind.

Bei win32:
SSE2: 1.1 schneller (vor Edit: 1.14 langsamer)
SSE4: 1.2 schneller

Bei 64bit (hier tut sich bei SSE4 nochmal ordentlich was):
SSE2: 1.15 schneller (vor Edit: 1.2 langsamer)
SSE4: 1.34 schneller

Bin gespannt was ihr so habt. :?:

Edit: Neue SSE2 Werte dank weiterer Optimierung.
Zuletzt geändert von AlexPi11 am 10. Nov 2014 10:47, insgesamt 2-mal geändert.

RobDangerous
Computerversteher
Computerversteher
Beiträge: 363
Registriert: 14. Okt 2014 17:05

Re: SSE Zeitvergleich

Beitrag von RobDangerous » 8. Nov 2014 11:19

Exquisite Idee.
Aber nicht, dass wir uns falsch verstehen - SSE-Optimierungen sollen manuell durchgeführt werden, wie in der Folie, auf die das Übungsblatt verweist.

Dennis Wandschura
Windoof-User
Windoof-User
Beiträge: 25
Registriert: 17. Okt 2014 14:18

Re: SSE Zeitvergleich

Beitrag von Dennis Wandschura » 9. Nov 2014 15:39

64bit, SSE2, O3, Intel v15.0 Compiler
bei mir habe ich eine verbesserung von ~2x mit SIMD multiplikation im vergleich zur float multiplikation.

alle werte in den matrizen sind zufallsgeneriert.

Sascha-Thorsten
Mausschubser
Mausschubser
Beiträge: 51
Registriert: 4. Okt 2010 09:20

Re: SSE Zeitvergleich

Beitrag von Sascha-Thorsten » 9. Nov 2014 17:08

bei mir ist sse um Faktor 2,5 schneller als die normale float variante auf einem 64 bit ubuntu auf einem Core i5 2500k

gcc -march=native -O2

alle Werte in der Matrix sind wie bei Dennis zufallsgeneriert

Dennis Wandschura
Windoof-User
Windoof-User
Beiträge: 25
Registriert: 17. Okt 2014 14:18

Re: SSE Zeitvergleich

Beitrag von Dennis Wandschura » 9. Nov 2014 23:19

Sascha-Thorsten hat geschrieben:bei mir ist sse um Faktor 2,5 schneller als die normale float variante auf einem 64 bit ubuntu auf einem Core i5 2500k

gcc -march=native -O2

alle Werte in der Matrix sind wie bei Dennis zufallsgeneriert
warum is bei mir langsamer :(

hab nochma den SIMD teil bissl optimiert XD
ca. 9% - 10% schneller.

Sascha-Thorsten
Mausschubser
Mausschubser
Beiträge: 51
Registriert: 4. Okt 2010 09:20

Re: SSE Zeitvergleich

Beitrag von Sascha-Thorsten » 10. Nov 2014 00:42

Der Code kann langsamer werden, wenn man iden Compiler anweist, mehr optimierungen durchzuführen. Ich hab das ganze jetzt mit -O3 gemacht und ich hatte tatsächlich ein wenig langsameren Code bekommen, da er bei O3 auch Optimierungen durchführt, die den Code größer machen können.

Benutzeravatar
AlexPi11
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 154
Registriert: 18. Apr 2009 15:32

Re: SSE Zeitvergleich

Beitrag von AlexPi11 » 10. Nov 2014 11:11

Hab' mich nochmal drangesetzt, nachdem unsere Werte so nachhinken

Leider hat sich nur etwas bei der SSE2 Variante getan:
64bit, O2, MSVC, 1.4 mal schneller :? [Edit: neuer Wert]

Mehr Sorgen macht mir momentan aber nun, dass die SS4 Variante, genauer: _mm_dp_ps, bei mir zu unterschiedlichen Ergebnissen so ab der achten Ziffer führt. :!:

[Edit:]
SSE4 64bit: 1.54 mal schneller
Zuletzt geändert von AlexPi11 am 13. Nov 2014 19:51, insgesamt 1-mal geändert.

Dennis Wandschura
Windoof-User
Windoof-User
Beiträge: 25
Registriert: 17. Okt 2014 14:18

Re: SSE Zeitvergleich

Beitrag von Dennis Wandschura » 10. Nov 2014 15:11

AlexPi11 hat geschrieben:Hab' mich nochmal drangesetzt, nachdem unsere Werte so nachhinken

Leider hat sich nur etwas bei der SSE2 Variante getan:
64bit, O2, MSVC, 1.27 mal schneller :?

Mehr Sorgen macht mir momentan aber nun, dass die SS4 Variante, genauer: _mm_dp_ps, bei mir zu unterschiedlichen Ergebnissen so ab der achten Ziffer führt. :!:
bei floating point sind doch rundungsfehler normal-

Benutzeravatar
AlexPi11
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 154
Registriert: 18. Apr 2009 15:32

Re: SSE Zeitvergleich

Beitrag von AlexPi11 » 10. Nov 2014 16:23

Ja das schon. Aber bei gleichen Input sollte schon immer das gleiche rauskommen.
Also denke ich mal, dass die Reihenfolge der Multiplikationen/Addition anders ist (oder vll anders gerundet wird?) bei _mm_dp_ps.

Bei Größenordnung 10^10 ist der Unterschied z.B. schon in der Ordnung 100. Und so Ergebnisse erhält man ja schon bei Inputgrößen um die 10^5.

Naja wir benutzten nun einfach SSE2; das stimmt mit der normalen Variante überein. Schade nur das sich zeitlich bei uns wohl erstmal nichts mehr tut.

simon.r
Mausschubser
Mausschubser
Beiträge: 59
Registriert: 4. Okt 2010 16:13

Re: SSE Zeitvergleich

Beitrag von simon.r » 10. Nov 2014 22:05

Weil bisher noch niemand dazu etwas geschrieben hat: Wie viele Iterationen habt ihr für eure Messungen jeweils durchgeführt?

Zum Intel Compiler: http://www.agner.org/optimize/blog/read.php?i=49#49

simon.r
Mausschubser
Mausschubser
Beiträge: 59
Registriert: 4. Okt 2010 16:13

Re: SSE Zeitvergleich

Beitrag von simon.r » 10. Nov 2014 23:20

Unsere Speedup-Ergebnisse, jeweils 1000000 Matrixmultiplikationen, Win7 64Bit, Core i5-2400:

MSVC2012:
Win32:
SSE2: 1.32
SSE4: 1.64

x64:
SSE2: 1.16
SSE4: 1.63


GCC 4.8.1 (i686-w64-mingw32), march=native:
O2:
SSE2: 2.12
SSE4: 2.28
Hinweis: Der Speedup ist hier sehr trügerisch und kommt dadurch zu stande, dass die reguläre Variante nur einen absoluten Wert von 0.058199 erreicht! MSVC kommt hier auf 0.044543 bzw. 0.037944. Vermutlich erklären sich auch so die von anderen berichteten Speedups jenseits der 2.0!

O3:
SSE2: 0.87
SSE4: 1.97
-> Hier ist wohl der Vektorisierer von gcc angesprungen und hat deutlich performanteren Code als die manuellen SSE2 Intrinsics erzeugt.

Dennis Wandschura
Windoof-User
Windoof-User
Beiträge: 25
Registriert: 17. Okt 2014 14:18

Re: SSE Zeitvergleich

Beitrag von Dennis Wandschura » 13. Nov 2014 21:24

ich habe 1000000 iterationen gemacht.
für eine einzelne multiplikation ergeben sich dann für mich folgende werte:
FLOAT: 0.000022 ms
SIMD: 0.000011 ms

Antworten

Zurück zu „Archiv“