Poszukuję bibliotek matematycznych SIMD (najlepiej open source) dla SSE i AVX. Mam na myśli na przykład, jeśli mam rejestr AVX v z 8 wartościami float, chcę, aby sin (v) zwrócił grzech wszystkich ośmiu wartości naraz.Biblioteki matematyczne SIMD dla SSE i AVX
AMD ma bibliotekę podręczną, LibM http://developer.amd.com/tools/cpu-development/libm/, która ma kilka funkcji matematycznych SIMD, ale LibM używa tylko AVX, jeśli wykryje FMA4, których procesory Intela nie mają. Nie jestem też pewien, czy w pełni używa AVX, ponieważ wszystkie nazwy funkcji kończą się s4 (d2), a nie s8 (d4). Zapewnia lepszą wydajność niż standardowe biblioteki matematyczne na procesorach Intela, ale nie jest o wiele lepsza.
Intel ma SVML jako część swojego kompilatora C++, ale pakiet kompilatorów jest bardzo drogi w systemie Windows. Ponadto Intel okaleczy bibliotekę na procesorach innych niż Intel.
Znalazłem następującą bibliotekę AVX, http://software-lisc.fbk.eu/avx_mathfun/, która obsługuje kilka funkcji matematycznych (exp, log, sin, cos i sincos). Daje mi to bardzo szybkie wyniki, szybsze niż SVML, ale nie sprawdziłem dokładności. Działa tylko na pojedynczym zmiennoprzecinkowym i nie działa w Visual Studio (choć byłoby to łatwe do naprawienia). Opiera się na innej bibliotece SSE.
Czy ktoś ma jakieś inne sugestie?
Edit: znalazłem SO wątku, który ma wiele odpowiedzi na ten temat Vectorized Trig functions in C?
Chociaż jest to autorskie rozwiązanie, Math Kernel Library Intela jest dość wszechstronne rozwiązanie. Jednak działa najlepiej tylko na procesorach Intela. Wydaje mi się, że w przeszłości znane było przekierowywanie niezoptymalizowanej ścieżki kodu podczas działania na procesorze innym niż Intel. Nie jestem pewien, czy tak jest w przypadku współczesnych wersji. –
Tutaj można uzyskać logarytmy: https://stackoverflow.com/a/45898937/1915854 –
Agner Fog's [Biblioteka klasy wektorowej] (http://agner.org/optimize/#vectorclass) jest GPL. Jest to bardziej opakowanie dla intrinetyki Intela, aby uczynić ręczną wektoryzację wygodniejszą, ale istnieją pewne funkcje matematyczne, takie jak exp i log. –