2011-02-10 11 views
20

Czy ktoś zna bibliotekę wewnętrzną SIMD biblioteki C++ x86 SIMD?C++ SSE SIMD framework

Intel dostarcza dokładnie to, czego potrzebuję w swojej bibliotece zintegrowanych operacji wydajnościowych, ale nie mogę jej używać z powodu praw autorskich w każdym miejscu.

EDIT

już wiem intrinsics dostarczonych przez kompilatory. Potrzebuję wygodnego interfejsu, aby z nich korzystać.

+0

Które funkcje dokładnie potrzebujesz? –

+0

SSE1/2 z możliwością aktualizacji do wersji SSE3/4/AVX w przyszłości. IMO dobrze utrzymana biblioteka dodalaby wsparcie dla wszystkich z nich już –

+2

SSE2 i obiektowych? brzmi zbyt niezwiązane ze mną. – YeenFei

Odpowiedz

20

Zapoznaj się z biblioteką otokową C++ SIMD z nagłówkiem.

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. Obsługiwane są wszystkie Clang, GCC, MSVC i ICC.

Wszelkie różnice między zestawami instrukcji są rozwiązywane przez wprowadzenie brakujących instrukcji jako kombinacji obsługiwanych. Jako bonus, możliwe jest skompilowanie tego samego kodu dla kilku zestawów instrukcji, powiązanie wynikowych plików obiektów z jednym plikiem wykonywalnym i użycie wygodnego mechanizmu dynamicznej wysyłki do uruchomienia implementacji najbardziej dostosowanej do obecnego procesora.

+1

Czy libdimdpp jest nadal obsługiwany i rozwijany? – Walter

+0

Nie wiem, ale poszliśmy z wersją 1.0, ponieważ 2.0 była nadal w wersji beta i była całkowicie rozczarowana. Nie tylko, że nie ma dokumentacji: nie było sposobu na załadowanie wartości do rejestru (funkcje z nazwami sugerującymi, że tego nie robią) i kod z rejestrami float nie będzie się nawet kompilował. Całkowicie odradzam używanie go. –

+2

@Sebastian Powinieneś zajrzeć do wersji 2.0, która jest teraz na etapie kandydowania do wydania. Powinno wystarczyć bardzo niewiele błędów, ponieważ wszystkie obsługiwane konfiguracje są nieustannie testowane. Dokumentacja również uległa znacznej poprawie. Zastrzeżenie: jestem autorem biblioteki. – p12

4

Wystarczy popatrzeć na AMD's SSEPlus project, może być co się po

+0

Nie ma już żadnej wzmianki o czymkolwiek, co nazywa się SSEPlus. –

+0

@VioletGiraffe: AMD ma ten denerwujący zwyczaj łamania linków, zaktualizował link do strony sourceforge – Necrolis

+0

Ostatnia aktualizacja była w 2009 roku, czy jest stabilna? –

1

Możecie zajrzeć do macstl - mimo że został pierwotnie opracowany dla Mac (i PowerPC) teraz działa na Linux i x86 też.

Ponadto, jeśli pracujesz z obrazami, spójrz na OpenCV - ma to zoptymalizowane pod względem SSE procedury dla wielu typowych zadań przetwarzania obrazów i ma API C i C++.

4

Napisałem kod GLSL-style library, który zamieni się na prawie idealny kod ASM.

Bardzo często operacja - iloczyn:

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

będą konwertowane do tego kodu assemly 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 

Prosimy pamiętać, że biblioteka nie jest jeszcze doskonały, a większość prawdopodobnie mają nieuzasadnione błędy, ponieważ są wciąż nowe.

1

Firma Microsoft właśnie wydała nową wersję: "DirectXMath" library. Obejmuje wsparcie dla elementów wewnętrznych SSE2 i NEON. Dokumentacja również wygląda na przyzwoitą.

DirectXMath API zapewnia SIMD przyjazne C++ rodzaje i funkcje dla wspólnych algebra liniowa i grafiki matematycznych operacji wspólnych dla DirectX zastosowań. Biblioteka zapewnia zoptymalizowane wersje dla systemu Windows 32-bitowe (x86), 64-bitowe (x 64) i Windows na ARM przez SSE2 i wsparcie wewnętrzne wewnętrzne ARM-NEON w kompilatorze Visual Studio.

2

to kolejna biblioteka C++, która implementuje klasy wektorowe i umożliwia pisanie kodu wektorowego, który jest niezależny od rzeczywistego zestawu instrukcji, który jest używany.

+3

Vc nie obsługuje NEON na ARM, prawda? –

+1

Nie, nie ma. –

11

Istnieje kilka bibliotek, które pojawiły się w ostatnich latach w celu opracowania wyraźnego programowania SIMD. Do najważniejszych z nich:

Najważniejszą rzeczą szukać jest posiadanie użytecznego zestawu typów, które poprawnie wykreślają najlepsze dostępne rejestry SIMD i instrukcje dla danego celu. I, oczywiście, pełna przenośność na systemy bez wsparcia SIMD.

+2

Biblioteka Vectorclass nie jest objęta licencją permisywną - tylko GPL lub komercyjna. – p12