Gibt es ein einfaches Tutorial für mich, um in SSE, SSE2 und SSE3 in GNU C++ auf Hochtouren zu kommen? Wie können Sie Code-Optimierung in SSE tun?SSE SSE2 und SSE3 für GNU C++
Antwort
Tut mir leid, ich kenne kein Tutorial.
Ihre beste Wette (IMHO) besteht darin, SSE über die "intrinsischen" Funktionen zu verwenden, die Intel bietet, um (allgemein) einzelne SSE-Anweisungen einzubinden. Diese werden über eine Reihe von Include-Dateien mit dem Namen * mmintrin.h zur Verfügung gestellt, z. B. xmmintrin.h ist der ursprüngliche SSE-Befehlssatz.
Beginnen Sie vertraut mit den Inhalten der Intel Optimierung Reference Manual ist eine gute Idee (siehe Abschnitt 4.3.1.2 für ein Beispiel von intrinsics) und die SIMD-Abschnitte sind wesentliche Lesung. Die Referenzhandbücher für den Befehlssatz sind ebenfalls sehr hilfreich, da die Dokumentation jedes Befehls die zugehörige "intrinsische" Funktion enthält.
Sie verbringen einige Zeit den Assembler vom Compiler aus intrinsics erzeugt Inspektion und Profilierung/Leistungsmessung (Sie werden eine Menge lernen) (Sie vermeiden, wenig Rendite der Aufwand Zeit SSE-ing Code verschwenden).
-Update 2011-05-31: Es gibt einige sehr schöne Abdeckung von Spezifika und Vektorisierung in Agner Fog optimization PDFs (thanks), obwohl es ein wenig Verbreitung über (zB Abschnitt 12 des first one und Abschnitt 5 des second one) ist . Dies sind nicht gerade Tutorial-Material (in der Tat gibt es eine Warnung "diese Handbücher sind nicht für Anfänger"), aber sie behandeln SIMD (ob über Asm, intrinsics oder Compiler-Vektorisierung verwendet) zu Recht als nur ein Teil der größeren Optimierung Toolbox.
Update 2012-10-04: Ein nice little Linux Journal article auf gcc Vektor intrinsics verdient eine Erwähnung hier. Allgemeiner als nur SSE (deckt auch PPC- und ARM-Erweiterungen ab). Es gibt eine gute Sammlung von Referenzen auf der last page, die mich auf Intels "intrinsics manual" aufmerksam gemacht hat.
Überprüfen Sie die Optionen -mtune und -march, -mss * und -mfpmath natürlich. All dies ermöglicht GCC, SSE-spezifische Optimierungen durchzuführen.
Alles darüber hinaus ist das Reich von Assembler, fürchte ich.
Kein Assembler benötigt. GCC hat Erweiterungen, um spezielle Datentypen und "Funktionsaufrufe" für die Verwendung von MMX/SSE zu unterstützen. –
Zugegeben, das sind dünn verkleidete Wrapper für die Assembly. Wenn Sie also SSE nicht in Asm programmieren können, werden Ihnen die Erweiterungen nicht viel helfen. –
Eigentlich sind intrinsics mehr als nur Wrapper um Assembly. Sie ermöglichen dem Compiler, den Code für maximale Leistung neu anzuordnen. Aber Sie müssen gut verstehen, wie SIMD funktioniert. –
Ein einfaches Tutorial? Nicht, dass ich davon Wüste.
Aber alle Informationen über die Verwendung von MMX oder einer beliebigen Version von SSE sind nützlich für das Lernen, ob für GCC oder für ICC oder VC.
Um mehr über die Vektorerweiterungen von GCC zu erfahren, geben Sie "info gcc" ein und gehen Sie zu Node: Vector Extensions.
Die einfachste zu verwendende Optimierung besteht darin, dass gcc SSE-Code ausgibt.
Flags: -msse, -msse2, -msse3, -march =, -mfpmath = sse
Für eine kurze Liste über 386 Optionen finden http://gcc.gnu.org/onlinedocs/gcc-4.3.3/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options, genauere Dokumentation für Ihre spezifische Compiler-Version gibt es: http://gcc.gnu.org/onlinedocs/.
Zur Optimierung immer Agner Fogs: http://agner.org/optimize/.Ich denke, er hat keine SSE-Tutorials für intrinsics, aber er hat einige wirklich ordentliche std-C++ - Tricks und bietet auch viele Informationen über die Codierung von SSE-Assembly (die oft in intrinsics transkribiert werden kann).
'-mftree-vectorize' gibt auch SSE aus. – LiraNuna
Nicht unbedingt. Aus dem Handbuch: "Loop-Vektorisierung auf Bäumen durchführen. Dieses Flag ist standardmäßig bei -O3 aktiviert." Also das Flag selbst erwähnt keine bestimmte Plattform (könnte auch mehrere Bytes in 32-Bit-Standardregistern verarbeiten). –
MSDN hat eine ziemlich gute Beschreibung von SSE-Compiler-Einbauten (und diese eingebauten sind De-facto-Standard, sie funktionieren sogar in Clang/XCode).
- http://msdn.microsoft.com/en-us/library/26td21ds.aspx
- http://msdn.microsoft.com/en-us/library/kcwz153a.aspx
Das Schöne an dieser Referenz ist, daß sie äquivalent Pseudo-Code zeigt, so z.B. Sie können lernen, dass ADDPD Anweisung:
r0 := a0 + b0
r1 := a1 + b1
Und hier ist eine gute Beschreibung einer kryptischen Shuffle Anweisung: http://www.songho.ca/misc/sse/sse.html
- 1. Extrahieren SSE gemischt 32-Bit-Wert mit nur SSE2
- 2. CPU-Befehl auf i5-2500k: MMX, SSE, SSE2-Bits sind nicht gesetzt
- 3. Gibt es eine SSE2-Entsprechung für _mm_insert_epi32?
- 4. SSE3/SSSE3 + AES/RDRAND/RDSEED unter Sun Studio
- 5. Prozessorunterstützung für SSE2 ermitteln?
- 6. Punkt Produkt - SSE2 vs BLAS
- 7. Ist SSE Fließkommaarithmetik reproduzierbar?
- 8. Universal-Binärdatei für verschiedene SSE-Versionen
- 9. GNU Fortran und C Interoperabilität
- 10. SIMD Mathematikbibliotheken für SSE und AVX
- 11. Wie aktiviere ich den SSE/SSE2-Befehlssatz in Visual Studio 2008 (mit CMake)?
- 12. SSE optimiert Emulation von 64-Bit-Integer
- 13. Speicherleckerkennung unter Windows für GNU C/C++
- 14. Pthreads v. SSE schwache Speicherordnung
- 15. SSE2-Option in Visual C++ (x64)
- 16. sse und avx Leistung auf Sandybridge und IvyBridge
- 17. glibc und SSE Funktionalität
- 18. Intel x86_64 hinzufügen Assembly ganze Zahl mit doppelter Genauigkeit Schwimmer SSE, SSE2
- 19. GNU C++ - Fehlermeldungen
- 20. Intel SSE und AVX Beispiele und Lernprogramme
- 21. Simulation der packusdw-Funktionalität mit SSE2
- 22. gcc -mno-sse2 Runde
- 23. aws vordefinierte URL für SSE-C-spezifische Verschlüsselung
- 24. numpy calling sse2 über ctypes
- 25. Java und GNU gettext für die Internationalisierung
- 26. Summenreduzierung von vorzeichenlosen Bytes ohne Überlauf, mit SSE2 auf Intel
- 27. 10 GNU CC und Windows
- 28. Funktioniert GNU/Flex C++ überhaupt?
- 29. Unterschiede zwischen GNU C++ und Microsoft Visual C++
- 30. Atomic Swap in GNU C++
ich eine Bibliothek schrieb SSE2 Optimierungen leicht zu machen - https://github.com/LiraNuna/glsl -sse2 – LiraNuna
Ich fand dies [Blog-Post] (http://minchechiu.blogspot.com/2009/05/sse.html) mit vielen hochwertigen Links auf SSE. – Philip
Ich fand ein interessantes Dokument hier: http://ds9a.nl/gcc-simd/index.html –