Frage

kann jede tragbare SIMD-Bibliothek empfehlen, die ein C / C ++ API bietet, funktionieren auf Intel und AMD Erweiterungen und Visual Studio, GCC kompatibel. Ich sehe die Dinge zu beschleunigen wie eine 512x512-Array von Doppel Skalierung. Vektor-Punktprodukte, Matrixmultiplikation etc.

Bisher ist die einzige, die ich gefunden ist: http://simdx86.sourceforge.net/ aber als die erste Seite sagt, es ist nicht auf visuelle nicht kompiliert Studio.

Es gibt auch Intel IPP, die nicht auf AMD funktioniert von dem, was ich sammeln. Und es gibt Framewave von AMD, aber ich war ein paar Probleme mit Kompilieren und Linken ihre Bibliothek und ihre Foren sind komplett tot. Wer verwaltet Framewave überall zu benutzen?

Danke.

War es hilfreich?

Lösung

Da Sie erwähnen High-Level-Operationen auf Matrizen und Vektoren, ATLAS , Intel MKL , PLASMA und FLAME von Interesse sein können.

Einige C ++ Matrix Mathematikbibliotheken umfassen uBLAS von Boost, Armadillo, Eigen, IT ++ und Newmat. Die POOMA Bibliothek wahrscheinlich enthält auch einige dieser Dinge. Diese Frage bezieht sich auch auf MTL.

Wenn Sie auf niedrigere Ebene Portabilität Primitiven suchen, ein Kollege von mir hat einen Wrapper um SSE2, AltiVec, VSX, Larrabee und Zell SPE Vektoroperationen entwickelt. Es kann in unserem Quellrepository , aber seine Lizenz (akademische) möglicherweise nicht geeignet, wenn Sie es als Teil Ihrer Arbeit verteilen möchten. Es ist auch nach wie vor unter erheblicher Entwicklung den Bereich abzudecken, die Anwendung muss, dass es bei gezielt wird.

Andere Tipps

Eigen ist ein MPL2 -licensed Kopf nur C ++ Bibliothek, die Vektor / Matrix Mathematik hat, die für SSE, Neon und AltiVec optimiert ist. Sie haben mehr anspruchsvollere mathematische Operationen in der Add-on-Module.

Schauen Sie sich macstl: http://www.pixelglow.com/macstl/

Versuchen Sie liboil oder die zugehörige ORC . Besonders interessant ORC; Sie implementiert eine High-Level-Assembler-Sprache, die in architekturspezifischen Code kompiliert wird. Ziemlich anspruchsvoll, viel mehr als eine einfache Wrapper-Bibliothek.

Wenn Sie nichts dagegen nicht immer nach unten und schmutzig mit Assembler dann können Sie immer die intrinsischen Funktionen für alle SIMD-Befehle verwenden. Sie werden Prozessor spezifisch sein, das heißt SSE4 intrinsics nur laufen auf SSE4 CPUs aktiviert und es liegt an Ihnen, um sicherzustellen, dass die Erweiterungen gibt.

Es ist ein guter Artikel hier über SIMD Anwendung .

Sie könnten jedoch verwenden einen Compiler, der für Sie ohne externe Bibliotheken SIMD-Code generiert. VectorC sollte gut sein, obwohl ich es nie persönlich in Anspruch genommen habe. Es sind keine besonderen Bibliotheken verlangen, soweit ich weiß, es spots nur jene Bits von Quellcode, der von SIMD und kompiliert auf welcher Ebene auch immer von SSE benfit können Sie angeben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top