SIMD-математические библиотеки для SSE и AVX

Я ищу математические библиотеки SIMD (предпочтительно с открытым исходным кодом) для SSE и AVX. Я имею в виду, например, если у меня есть регистр AVX v с 8 значениями float, я хочу, чтобы sin (v) сразу возвращал грех из всех восьми значений.

AMD имеет библиотеку propreitery, LibM http://developer.amd.com/tools/cpu-development/libm/, которая имеет некоторые SIMD-математические функции, но LibM использует только AVX, если обнаруживает FMA4, который Intel У CPU нет. Также я не уверен, что он полностью использует AVX, поскольку все имена функций заканчиваются на s4 (d2), а не s8 (d4). Это дает лучшую производительность, чем стандартные математические библиотеки на процессорах Intel, но это не намного лучше.

Intel имеет SVML как часть этого компилятора С++, но пакет компилятора очень дорог в Windows. Кроме того, Intel калечит библиотеку на процессорах, отличных от Intel.

Я нашел следующую библиотеку AVX, http://software-lisc.fbk.eu/avx_mathfun/, которая поддерживает несколько математических функций (exp, log, sin, cos и SinCos). Это дает очень быстрые результаты для меня, быстрее, чем SVML, но я не проверял точность. Он работает только с единой плавающей точкой и не работает в Visual Studio (хотя это было бы легко исправить). Он основан на другой библиотеке SSE.

Есть ли у кого-нибудь другие предложения?

Изменить: я нашел поток SO, у которого много ответов на эту тему Векторизованные функции Trig в C?

Ответ 1

Я реализовал Vecmathlib https://bitbucket.org/eschnett/vecmathlib/ в качестве общих библиотек для двух других проектов (The Einstein Toolkit и pocl http://pocl.sourceforge.net/). Vecmathlib является открытым исходным кодом и написан на С++.

Ответ 2

Gromacs - это высоко оптимизированный программный пакет молекулярной динамики, написанный на С++, который использует SIMD. Насколько я знаю, функциональность SIMD для математики еще не была разделена на отдельную библиотеку, но я предполагаю, что реализация может быть полезной для других, тем не менее.

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