Odpowiedzi:
Możesz także zrobić to „samodzielnie”, korzystając z instrukcji SSE (Streaming SIMD Extensions) i wewnętrznych (plików * mmintrin.h) kompilatora / proc.
Poradniki
Oto przykład użycia instrukcji SSE z asemblerem:
http://neilkemp.us/src/sse_tutorial/sse_tutorial.html
A oto samouczek dotyczący korzystania z instrukcji SSE z elementami wewnętrznymi:
http://www.codeproject.com/KB/recipes/sseintro.aspx
Praktyczny przewodnik po użyciu SSE SIMD z C ++:
http://sci.tuomastonteri.fi/programming/sse/printable
Przydatne informacje
Dokumentacja Intrinsics firmy Intel C ++ (przydatna do uzyskania listy instrukcji):
http://cache-www.intel.com/cd/00/00/34/76/347603_347603.pdf
SSE i SSE2 Wewnętrzna obsługa rozszerzonych zestawów instrukcji obsługiwanych przez procesory Intel i AMD (przydatne do wszelkiego rodzaju informacji dotyczących SSE i SIMD):
http://msdn.microsoft.com/en-us/library/y0dh78ez%28v= vs.71% 29.aspx
Ogólna lista instrukcji i informacje o SSE, SSE2, SSE3, SSSE3, SSE4, 3DNow itp. (Różne wersje SSE dla różnych architektur proc):
http://softpixel.com/~cwright/programming/simd/sse.php
Jeśli wolisz szkielet algebry liniowej, słyszałem o Eigen:
http://eigen.tuxfamily.org/
http://eigen.tuxfamily.org/index.php?title=FAQ#Vectorization (o obsłudze SIMD)
I na koniec, jeśli potrzebujesz więcej odpowiedzi na temat C ++ SIMD Framework, oto link StackOverflow . (C ++ SSE SIMD framework):
/programming/4953121/c-sse-simd-framework
Oba te biblioteki wektor / macierz mają zoptymalizowany kod SSE2, Sony ma również przełącznik kompilacji Altivec dla PowerPC:
Sony vectormath SSE2 i Altivec
Bullet's Linearmath SSE2
myśląc, że możesz użyć biblioteki matematycznej bulleta, sama kula jest silnikiem fizyki typu open source i wydaje się, że ma obok niej potężną bibliotekę matematyczną. tutaj jest skrót do pobierania linku http://sourceforge.net/projects/bullet/files/SIMD%20and%20amp_%20Vector%20Math%20library/simd%20math%201.02%20and%20vector%20math%201.01/simdvectormath.tgz /Ściągnij
simdvectormath
określonego pliku w plikach pocisków zajmuje trochę czasu
Jeszcze go tu nie ma. Ale będzie biblioteka boost.simd (mam nadzieję). Spójrz na tę prezentację (podaną w zeszłym tygodniu na boostcon)
https://github.com/boostcon/2011_presentations/blob/master/thu/simd.pdf
AMD ma projekt SSEPlus typu open source , chociaż nigdy go nie użyłem, więc nie mogę komentować jego jakości ani możliwości zastosowania.
Chociaż niezbyt koncentruję się na korzystaniu z SIMD, uważam, że glm jest bardzo dobrą biblioteką matematyczną ogólnego zastosowania, jeśli chodzi o gry. Nie obsługuje dowolnych matryc i tym podobnych, ale ma usprawnione funkcje do użytku z grafiką 3D i ma funkcje umożliwiające SSE, a także niektóre szybsze implementacje popularnych algorytmów.
Chociaż jest specjalnie zaprojektowany do pracy z OpenGL, uważam, że jest bardzo przydatny do różnych zadań. W dużym stopniu wykorzystuje przeciążenie operatora, co czyni go bardzo łatwym w użyciu i utrzymuje kod, który go używa.
Opiera się na języku OpenGL GLSL, który ma bardzo solidną dokumentację, a wszelkie różnice są również dobrze udokumentowane.