2013-03-30 16 views
14

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?

+1

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. –

+0

Tutaj można uzyskać logarytmy: https://stackoverflow.com/a/45898937/1915854 –

+0

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. –

Odpowiedz

7

I wprowadziły Vecmathlib https://bitbucket.org/eschnett/vecmathlib/ jako ogólny bibliotek dla dwóch innych projektów (Einsteina Toolkit i POCI http://pocl.sourceforge.net/). Vecmathlib jest open source i jest napisany w C++.

+1

To wydaje się być dokładnie takim pakietem, jakiego szukam. Dam ci spróbować i wrócę do ciebie. –

+1

Ta biblioteka wygląda obiecująco, ale napotkałem na kilka problemów: a) wersja na bitbucket nie kompiluje się z powodu braku #endif b) dane benchmarku wyglądają bardzo rozczarowująco, zazwyczaj VML jest wolniejszy o rząd wielkości w moich testach - tutaj MINGW na windws. I wydaje się, że nie można skompilować z MSVC – ibell