SIMD math-Bibliotheken für die SSE-und AVX
Ich bin auf der Suche nach SIMD math-Bibliotheken (vorzugsweise open source) für die SSE-und AVX. Ich meine zum Beispiel wenn ich eine AVX-register v mit 8 float-Werte will ich sin(v), um die Sünde aller acht Werte auf einmal.
AMD hat eine propreitery Bibliothek LibM http://developer.amd.com/tools/cpu-development/libm/ die einige SIMD math-Funktionen, aber LibM nur nutzt AVX, wenn er erkennt, FMA4, die Intel CPUs nicht haben. Auch ich bin nicht sicher, dass es vollständig verwendet AVX-wie alle Funktionsnamen Ende in s4 (d2) und nicht s8 (d4). Es geben eine bessere Leistung als die standard-Mathematik-Bibliotheken, die auf Intel-CPUs, aber ist es nicht viel besser.
Intel hat die SVML als Teil der C++ - compiler, aber die compiler-suite ist sehr teuer auf Windows. Darüber hinaus werden Intel-Krüppel, die Bibliothek auf nicht-Intel-CPUs.
Fand ich die AVX-Bibliothek, http://software-lisc.fbk.eu/avx_mathfun/, unterstützt ein paar math-Funktionen (exp, log, sin, cos, und sincos). Es gibt sehr schnelle Ergebnisse für mich, schneller als SVML, aber ich habe nicht geprüft, die Richtigkeit. Es funktioniert nur auf eine einzige floating-point und funktioniert nicht in Visual Studio (obwohl, dass wäre einfach zu beheben). Es basiert auf einem anderen SSE-Bibliothek.
Hat jemand irgendwelche anderen Vorschläge?
Edit: ich fand SO ein thread, der hat viele Antworten zu diesem Thema
Vektorgrafik-Trig-Funktionen in C?
- Obwohl es eine proprietäre Lösung, die Intel Math Kernel Library ist eine ziemlich umfassende option. Allerdings führt es am besten auf Intel-CPUs nur. Ich glaube, es wurde bekannt in der Vergangenheit abzulenken, nach einem nicht optimierten code-Pfad bei der Ausführung auf einem nicht-Intel-Prozessor. Ich bin mir nicht sicher, ob das der Fall ist, auf aktuelle Versionen, wenn.
- Hier können Sie Logarithmen: stackoverflow.com/a/45898937/1915854
- Agner Fog ' s Vector Class Library ist unter der GPL. Es ist mehr ein wrapper für die Intel-Interna manuelle Vektorisierung bequemer, aber es gibt einige math-library-Funktionen wie exp und log.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich umgesetzt Vecmathlib https://bitbucket.org/eschnett/vecmathlib/ als generische Bibliotheken für die zwei anderen Projekte (Einstein Toolkit, und pocl http://pocl.sourceforge.net/). Vecmathlib ist open source und in C++ geschrieben ist.
Gromacs ist eine optimierte Molekulardynamik software-Paket in C++ geschrieben, nutzt SIMD. Soweit ich weiß, die Mathematik-SIMD-Funktionalität wurde noch nicht gespalten, in eine separate Bibliothek, aber ich denke, die Umsetzung könnte nützlich sein, für andere aber trotzdem.
https://github.com/gromacs/gromacs/blob/master/src/gromacs/simd/simd_math.h
http://manual.gromacs.org/documentation/2016.4/doxygen/html-lib/simd__math_8h.xhtml