SIMD C ++ Bibliothek [geschlossen]

14

In der Vergangenheit habe ich Visual Studio mit der DirectX XNA-Mathematikbibliothek verwendet. Jetzt verwende ich die GNU-Compiler-Sammlung. Kann mir jemand eine SIMD-Mathematikbibliothek mit einer guten Dokumentation empfehlen?

itun
quelle

Antworten:

15

Sie können dies auch "selbst" tun, indem Sie die SSE-Anweisungen (Streaming SIMD Extensions) und die Intrinsics (* mmintrin.h-Dateien) Ihres Compilers / Proc verwenden.


Tutorials

Hier ist ein Beispiel für die Verwendung von SSE-Anweisungen mit Assembly:
http://neilkemp.us/src/sse_tutorial/sse_tutorial.html

Und hier ist ein Tutorial zur Verwendung von SSE-Anweisungen mit Intrinsics:
http://www.codeproject.com/KB/recipes/sseintro.aspx

Eine praktische Anleitung zur Verwendung von SSE SIMD mit C ++:
http://sci.tuomastonteri.fi/programming/sse/printable


Nützliche Informationen

Intel C ++ Intrinsics-Referenz (nützlich, um die Liste der Anweisungen abzurufen ):
http://cache-www.intel.com/cd/00/00/34/76/347603_347603.pdf

SSE & SSE2 Intrinsic-Unterstützung für die erweiterten Befehlssätze, die von Intel- und AMD-Prozessoren unterstützt werden (nützlich für alle Arten von Informationen zu SSE und SIMD):
http://msdn.microsoft.com/en-us/library/y0dh78ez%28v= vs.71% 29.aspx

Allgemeine Anweisungsliste und Informationen zu SSE, SSE2, SSE3, SSSE3, SSE4, 3DNow usw. (verschiedene Versionen von SSE für verschiedene Prozessarchitekturen):
http://softpixel.com/~cwright/programming/simd/sse.php


Wenn Sie ein lineares Algebra-Framework bevorzugen, habe ich über Eigen berichtet:
http://eigen.tuxfamily.org/
http://eigen.tuxfamily.org/index.php?title=FAQ#Vectorization (zur SIMD-Unterstützung)

Und wenn Sie weitere Antworten zu C ++ SIMD Frameworks benötigen, finden Sie hier einen StackOverflow-Link . (C ++ SSE SIMD-Framework):
/programming/4953121/c-sse-simd-framework

Valkea
quelle
Vielen Dank, aber ich habe keine Zeit für so viel Routine.
23.
Vielleicht ist es beim nächsten Mal nicht so schwer, wie es aussieht;). Allerdings habe ich unten ein paar Links hinzugefügt, die helfen könnten.
Valkea
Gute Antwort. SIMD Mathe macht Spaß. Ich erinnere mich an Tage, als ich SSE zur Beschleunigung des Raytracing verwendete. Aber warum kleines Spielzeug spielen, wenn wir jetzt GPGPU haben :)
Notabene
3

Beide Vektor- / Matrix-Bibliotheken haben optimierten SSE2-Code, Sony hat auch einen Altivec for PowerPC-Kompilierungsschalter:

  1. Sonys Vektormath SSE2 und Altivec

  2. Bullet's Linearmath SSE2

Maik Semder
quelle
1
Beide Links sind tot.
Vexe
1

Ich denke, Sie können die Mathematikbibliothek von bullet verwenden. bullet selbst ist eine OpenSource-Physik-Engine, und es scheint eine leistungsstarke Mathematikbibliothek daneben zu haben. Hier finden Sie eine Verknüpfung zum Herunterladen des Links http://sourceforge.net/projects/bullet/files/SIMD%20and%20amp_%20Vector%20Math%20library/simd%20math%201.02%20and%20vector%20math%201.01/simdvectormath.tgz /herunterladen

Ali1S232
quelle
Ich habe es gesehen, aber wie es kompiliert wird, habe ich nicht verstanden
23.38 Uhr
3
Anstatt nur einen Download-Link zu speichern, ist möglicherweise ein Link zur eigentlichen Website mit der Dokumentation, dem Wiki und der API-Referenz hilfreicher. bulletphysics.org
Bob Somers
@ Bob Ich wollte nur diesen Download-Link zum Ausdruck bringen, da es nur einige Zeit dauert, simdvectormathbestimmte Datei in Bullet-Dateien zu finden
Ali1S232
0

AMD hat das Open-Source- SSEPlus- Projekt, obwohl ich es noch nie verwendet habe. Daher kann ich keine Aussage zu dessen Qualität oder Anwendbarkeit machen.

Bob Somers
quelle
0

Ich bin zwar nicht gerade auf die Verwendung von SIMD fokussiert, finde es aber mich glm eine sehr gute universelle Mathematikbibliothek ist, wenn es um Spiele geht. Es unterstützt keine willkürlichen Matrizen und dergleichen, hat jedoch optimierte Funktionen für die Verwendung mit 3D-Grafiken und Funktionen, die SSE sowie einige schnellere Implementierungen gängiger Algorithmen ermöglichen.

Obwohl es speziell für die Verwendung mit OpenGL entwickelt wurde, hat es sich für eine Vielzahl von Aufgaben als sehr nützlich erwiesen. Es wird in hohem Maße eine Überladung von Operatoren verwendet, wodurch es sehr einfach ist, den Code, der es verwendet, zu verwenden und zu warten.

Es basiert auf der OpenGL GLSL-Sprache, die über eine sehr solide Dokumentation verfügt, und alle Unterschiede sind ebenfalls gut dokumentiert.

akaltar
quelle