Antworten:
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
Beide Vektor- / Matrix-Bibliotheken haben optimierten SSE2-Code, Sony hat auch einen Altivec for PowerPC-Kompilierungsschalter:
Sonys Vektormath SSE2 und Altivec
Bullet's Linearmath SSE2
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
simdvectormath
bestimmte Datei in Bullet-Dateien zu finden
Es ist noch nicht da. Es wird aber (hoffentlich) eine boost.simd-Bibliothek geben. Schauen Sie sich diese Präsentation an (letzte Woche auf der boostcon)
https://github.com/boostcon/2011_presentations/blob/master/thu/simd.pdf
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.