_mm_shuffle explained

_mm_shuffle explained

Robiąc pierwsze kroki z SSE starłem się z instrukcją _mm_shuffle. Dokumentacja od microsoftu umiarkowanie rozjaśniła jak się tego używa, ale dalej nie wszystko rozumiałem. Naskrobałem więc prosty programik, którym można sprawdzić jak się zachowa _mm_shuffle dla zadanej maski:

Binarka
Źródło

Programik wykorzystuje .NET / WPF / C# / XAML. Sorry, ale wine tego raczej nie pociągnie.

W oryginale _mm_shuffle_ps używa 2 zmiennych typu m128 zawierajacych po 4 floaty, zaś tutaj są inty, ale to nie zmienia zasady działania. Przecież chodzi tylko o przetasowanie wartości!

Kod referencyjny w C: __m128 a,b,c; a.m128_f32[0]=10; a.m128_f32[1]=11; a.m128_f32[2]=12; a.m128_f32[3]=13;
b.m128_f32[0]=20; b.m128_f32[1]=21; b.m128_f32[2]=22; b.m128_f32[3]=23;
c=_mm_shuffle_ps(a,b,_MM_SHUFFLE(3,2,1,0));
std::cout<< "3 2 1 0 "<<std::endl
<<c.m128_f32[3]<<" "
<<c.m128_f32[2]<<" "
<<c.m128_f32[1]<<" "
<<c.m128_f32[0]<<" ";
Dokumentacja od microsoftu Dokładne wyjaśnienie działania shuffle’a

  • Fajnie ładnie, ale uwaga techniczna co do notki – źródło mógłbyś na jakiś pastebin np. wklej.org wrzucić, żeby można było podejrzeć szybciej bez ściągania, dla leniwych 😉

  • Dla leni:
    http://pastebin.com/a4PfjnYh – window1.xaml.cs
    http://pastebin.com/4S4dDWxJ – window1.xaml

    Jednak do grzebania lepszy będzie pliczek z projektem z vs…