2013-05-14 9 views
9

Przeczytałem here, że Intel wprowadził SSE 4.2 instructions w celu przyspieszenia przetwarzania ciągów.Czy gcc używa instrukcji Intel SSE 4.2 do przetwarzania tekstu, jeśli są dostępne?

Cytat z artykułu:

GSS 4.2 zestaw instrukcji, pierwszy realizowany w i7 Intel Core zapewnia ciąg i instrukcje przetwarzania tekstu (STTNI), które wykorzystują operacji SIMD dla danych znakowych przetwarzanie. Chociaż pierwotnie stworzony w celu przyspieszenia przetwarzania łańcuchów, tekstu i XML, nowe potężne możliwości tych instrukcji są użyteczne poza domenami i warto ponownie przejrzeć etapy wyszukiwania i rozpoznawania różnych aplikacji wykorzystujących STTNI do ulepszenia wydajność

  • czy gcc skorzystać z tych instrukcji, jeśli są one dostępne?
  • Jeśli tak, to która wersja?
  • Jeśli tak, to czy są dostępne biblioteki open source , które to oferują?
+2

Wątpię, że GCC będzie w stanie rozpoznać konkretnego zadania jako przetwarzanie testowe i używać ich automatycznie. Ale nie byłbym zaskoczony, gdyby funkcje takie jak 'strcpy()' zostały wykonane przy użyciu SSE4.2 przez kompilator. – Mysticial

+0

@Mysticial Myślę, że miałem na myśli 'strcpy' et al; ale co ważniejsze 'atoi' itp. i ich odpowiedniki C++ 11' std :: stoi' etc –

+1

zobacz http://stackoverflow.com/questions/7919304/gcc-sse-code-optimization Musisz powiedzieć gcc. Biblioteki są już skompilowane, więc tylko Twój kod zostanie zmieniony, chyba że przekompilujesz biblioteki. – imel96

Odpowiedz

4

W odniesieniu do bibliotek oprogramowania przyjrzałbym się Asmlib firmy Agner Fog. Posiada zbiór wielu procedur, w tym kilka manipulacji ciągami, które używają SSE4.2, zoptymalizowane w montażu. Niektóre inne użyteczne funkcje, z których korzystam, zwracają informacje o procesorze, takie jak rozmiar pamięci podręcznej dla każdego poziomu i które rozszerzenia (np. SSE4.2) są obsługiwane.

http://www.agner.org/optimize/asmlib.zip

Aby włączyć SSE4.2 w GCC skompilować z -msse4.2 lub jeśli masz procesor z AVX użytku -mavx

1

Nie jestem pewien, czy gcc używa, ale to nie powinno mieć znaczenia, ponieważ przetwarzanie tekstu odbywa się zwykle za pomocą glibc. Jeśli używasz standardowych funkcji łańcuchowych z string.h (prawdopodobnie cstring zrobi to samo) i masz rozsądną glibc powinieneś używać ich automatycznie.

Szukałem dla niej i wydaje glibc 2.15 (ewentualnie starsze mają go) ma już SSE4.2 strcasecmp optymalizacje:

http://upstream.rosalinux.ru/changelogs/glibc/2.15/changelog.html

Powiązane problemy