C++ SSE SIMD framework [zamknięty]

Czy ktoś zna otwartoźródłową bibliotekę C++ x86 SIMD?

Intel dostarcza dokładnie to, czego potrzebuję w ich zintegrowanej bibliotece primitives performance, ale nie mogę tego użyć ze względu na prawa autorskie wszędzie.

EDIT

Znam już wewnętrzne elementy dostarczane przez kompilatory. Potrzebuję wygodnego interfejsu, by z nich korzystać.

Author: p12, 2011-02-10

8 answers

Spójrz na libsimdpp tylko nagłówek C++ SIMD wrapper library.

Biblioteka obsługuje kilka zestawów instrukcji za pośrednictwem jednego interfejsu: SSE2, SSE3, SSSE3, SSE4. 1, AVX, AVX2, AVX512F, XOP, FMA3/4, NEON, NEONv2, Altivec. Wszystkie Clang, GCC, MSVC i ICC są wspierane.

Wszelkie różnice między zestawami instrukcji są rozwiązywane przez implementację brakujących instrukcji jako kombinacji obsługiwanych instrukcji. Jako bonus można skompilować ten sam kod dla kilku zestawy instrukcji, łączą wynikowe pliki obiektowe z pojedynczym programem wykonywalnym i wykorzystują wygodny dynamiczny mechanizm dyspozytorski do uruchomienia implementacji najbardziej dostosowanej do bieżącego procesora.

 21
Author: p12,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-17 02:21:11

Istnieje kilka bibliotek, które pojawiły się w ostatnich latach do abstrakcyjnego programowania SIMD. Najważniejsze:

  • Vc
  • Boost:: simd (właściwie nie w boost-część NT2)
  • Biblioteka Prof. Agnera Foga Vectorclass

Najważniejszą rzeczą do szukania jest posiadanie użytecznego zestawu typów, które poprawnie abstrakują najlepsze dostępne rejestry SIMD i instrukcje dla danego celu. I oczywiście pełne możliwość przenoszenia do systemów bez obsługi SIMD.

 11
Author: Vir,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-14 11:52:17

Napisałem bibliotekę w stylu GLSL , która konwertuje do prawie doskonałej jakości kodu ASM.

Bardzo powszechne działanie - iloczyn krzyżowy:

vec4 cross(const vec4 &a, const vec4 &b)
{
    return a.yzxw * b.zxyw - a.zxyw * b.yzxw;
}

Zostanie przekonwertowany do tego kodu przy użyciu glsl-sse2:

_Z5crossRK4vec4S1_:
    movaps    (%rsi), %xmm1
    movaps    (%rdx), %xmm2
    pshufd    $201, %xmm1, %xmm5
    pshufd    $210, %xmm2, %xmm0
    pshufd    $210, %xmm1, %xmm4
    pshufd    $201, %xmm2, %xmm3
    mulps     %xmm0, %xmm5
    mulps     %xmm3, %xmm4
    subps     %xmm4, %xmm5
    movaps    %xmm5, (%rdi)
    ret

Proszę zauważyć, że biblioteka nie jest jeszcze idealna i najprawdopodobniej ma nierozwiązane błędy, ponieważ jest wciąż nowa.

 5
Author: LiraNuna,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-01 05:03:32

Spójrz na projekt AMD SSEPlus , może być tym, co po

 4
Author: Necrolis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-23 15:36:49

Microsoft udostępnił właśnie nową bibliotekę "DirectXMath" . Zawiera wsparcie dla SSE2 i neon intrinsics. Dokumentacja też wygląda przyzwoicie.

DirectXMath API zapewnia przyjazne dla SIMD typy i funkcje C++ dla wspólne operacje matematyczne z algebrą liniową i grafiką wspólne dla DirectX aplikacje. Biblioteka udostępnia zoptymalizowane wersje dla systemu Windows 32-bitowy (x86), Windows 64-bitowy (x64) i Windows on ARM poprzez SSE2 i podpory ARM-NEON w Kompilator Visual Studio.

 2
Author: Jarrod Smith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-25 14:29:04
 2
Author: Robert Rüger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-06 06:21:44

Może warto spojrzeć na macstl - chociaż pierwotnie został opracowany dla Mac (i PowerPC), teraz działa również na Linuksie i x86.

Ponadto, jeśli pracujesz z obrazami, spójrz na OpenCV - ma procedury zoptymalizowane pod kątem SSE dla wielu popularnych zadań przetwarzania obrazów i ma interfejsy API C i C++.

 1
Author: Paul R,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-10 11:25:11
 0
Author: selbie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-10 03:49:02