Chcę dowiedzieć się więcej na temat korzystania z SSE.Pierwsze kroki z SSE
Jakie są sposoby nauki poza oczywistym odczytaniem Intel® 64 and IA-32 Architectures Software Developer's Manuals?
Głównie chciałbym pracować z GCC X86 Built-in Functions.
Chcę dowiedzieć się więcej na temat korzystania z SSE.Pierwsze kroki z SSE
Jakie są sposoby nauki poza oczywistym odczytaniem Intel® 64 and IA-32 Architectures Software Developer's Manuals?
Głównie chciałbym pracować z GCC X86 Built-in Functions.
Po pierwsze, nie polecam używania wbudowanych funkcji - nie są one przenośne (przez kompilatory tego samego łuku).
Użyj intrinsics, GCC does a wonderful job do optymalizacji kodu wewnętrznego SSE w jeszcze bardziej zoptymalizowany kod. Zawsze możesz rzucić okiem na zespół i zobaczyć, jak wykorzystać SSE do jego pełnego potencjału.
intrinsics są proste - tak jak normalnych wywołań funkcji:
#include <xmmintrin.h>
__m128 vector1 = _mm_set1_ps(4, 3, 2, 1); // Little endian, stored in 'reverse'
__m128 vector2 = _mm_set1_ps(7, 8, 9, 0);
// Addition
__m128 result = _mm_add_ps(vector1, vector2); // result = vector1 + vector 2
// A more advanced function, called shuffle
vector1 = _mm_shuf_ps(vector1, vector1, _MM_SHUFFLE(0,1,2,3));
// vector1 is now (1, 2, 3, 4) (above shuffle reversed it)
Oczywiście istnieje dużo więcej opcji, SSE jest naprawdę mocny i moim zdaniem stosunkowo łatwy do opanowania.
Ponieważ poprosiłeś o zasoby:
A practical guide to using SSE with C++: Dobry koncepcyjne przegląd tego, jak efektywnie korzystać z SSE, z przykładami.
MSDN Listing of Compiler Intrinsics: Kompleksowe odniesienie do wszystkich potrzeb wewnętrznych. To jest MSDN, ale prawie wszystkie wymienione tutaj elementy są obsługiwane również przez GCC i ICC.
Christopher Wright's SSE Page: Krótki przegląd znaczenia kodów SSE. Wydaje mi się, że Instrukcje Intel mogą obsługiwać tę samą funkcję, ale jest to szybsze.
Prawdopodobnie najlepiej jest napisać większość kodu w języku wewnętrznym, ale sprawdź objdump danych wyjściowych kompilatora, aby upewnić się, że tworzy efektywny kod. Generowanie kodu SIMD jest wciąż całkiem nową technologią i bardzo możliwe, że kompilator może w niektórych przypadkach go uszkodzić.
Uważam, że badania dr. Agnera Foga są bardzo cenne! Ma także kilka narzędzi do testowania bibliotek, których jeszcze nie próbowałem. http://www.agner.org/optimize/
Czy wiesz, że możesz zrobić gorący produkt z dwiema tablicami int32 elementów? – psihodelia
Zadaj pytanie, a ja postaram się pomóc :) – LiraNuna