Thread View: pl.comp.lang.asm
3 messages
3 total messages
Started by Wojciech Muła
Fri, 16 May 2008 20:41
SSE2: znaczenie wyrównania danych
Author: Wojciech Muła
Date: Fri, 16 May 2008 20:41
Date: Fri, 16 May 2008 20:41
24 lines
1948 bytes
1948 bytes
Kontynuacja ostatniego tematu, tj. SSE2 wolniejsze niż MMX; testowany algorytm http://wmula.republika.pl/snippets/asm/blur.c (rozmycie obrazków grayscale). Tym razem testy przeprowadziłem na komputerze C2D E8200 -- na nim większość całkowitoliczbowych rozkazów SSE wykonuje się w jednym cyklu. Po zgrubnej zamianie nazw rejestrów i użyciu MOVDQU (dla bezpieczeństwa) doznałem szoku: kod wolniejszy niż MMX! Prawie zemdlałem. :) Spróbowałem użyć zamiast MOVDQU rozkazu LDDQU -- nie pomogło. W sumie dane mieściły się w L2, więc raczej nie mogło. Ostatecznie postanowiłem wyrównać adresy dwóch struktur, do których odwołują się procedury (obraz oraz pomocnicza tablica), wszystkie odczyty i zapisy do pamięci wykonują się poprzez MOVDQA, zaś dane niewyrównane które są potrzebne zostały wyciągnięte rozkazem PALIGNR. I wiecie co? Przyspieszenie o 95% w stosunku do kodu MMX2 (przyspieszenie 6 razy w stosunku do kodu x86). Jak się wyśpię, to doszlifuję i wrzucę na stronę kod. w.
Re: SSE2: znaczenie wyrównania danych
Author: Bogdan (bogdro)
Date: Sat, 17 May 2008 08:57
Date: Sat, 17 May 2008 08:57
36 lines
2686 bytes
2686 bytes
Wojciech Muła pisze: > Kontynuacja ostatniego tematu, tj. SSE2 wolniejsze niż MMX; > testowany algorytm http://wmula.republika.pl/snippets/asm/blur.c > (rozmycie obrazków grayscale). > > Tym razem testy przeprowadziłem na komputerze C2D E8200 -- na > nim większość całkowitoliczbowych rozkazów SSE wykonuje się w > jednym cyklu. Po zgrubnej zamianie nazw rejestrów i użyciu > MOVDQU (dla bezpieczeństwa) doznałem szoku: kod wolniejszy niż > MMX! Prawie zemdlałem. :) :) > Spróbowałem użyć zamiast MOVDQU rozkazu LDDQU -- nie pomogło. > W sumie dane mieściły się w L2, więc raczej nie mogło. > > Ostatecznie postanowiłem wyrównać adresy dwóch struktur, do > których odwołują się procedury (obraz oraz pomocnicza tablica), > wszystkie odczyty i zapisy do pamięci wykonują się poprzez > MOVDQA, zaś dane niewyrównane które są potrzebne zostały > wyciągnięte rozkazem PALIGNR. I wiecie co? Przyspieszenie > o 95% w stosunku do kodu MMX2 (przyspieszenie 6 razy w stosunku > do kodu x86). No to niezły wynik. Jednak co jedna operacja na pamięci, to nie dwie :) A nawet przy danych w L2 cache to robi różnicę. L2 jest sporo (kilkakrotnie?) wolniejsza od L1, które to z kolei jest pewnie sporo wolniejsze od rejestrów. Natrafiłeś na moment, w którym problemem wydajnościowym nie jest algorytm, lecz pamięć. Próbowałeś używać PREFETCH* do wcześniejszego pobrania danych bliżej procesora? -- Pozdrawiam/Regards - Bogdan (GNU/Linux & FreeDOS) Kurs asemblera x86 (DOS, GNU/Linux):http://rudy.mif.pg.gda.pl/~bogdro Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 www.JabberPL.org www.TorProject.org Soft (EN): miniurl.pl/bogdro-soft
Re: SSE2: znaczenie wyrównania danych
Author: Wojciech Muła
Date: Sun, 18 May 2008 19:23
Date: Sun, 18 May 2008 19:23
19 lines
1816 bytes
1816 bytes
"Bogdan (bogdro)" <bogdan@poczta.gazeta.pl> wrote: > No to niezły wynik. Jednak co jedna operacja na pamięci, to nie dwie > :) A nawet przy danych w L2 cache to robi różnicę. L2 jest sporo > (kilkakrotnie?) wolniejsza od L1, które to z kolei jest pewnie sporo > wolniejsze od rejestrów. Do L1 - kilka cykli, do L2 - kilkanaście cykli, do pamięci - więcej niż 100. Na Celeronie M to wynosi odpowiednio 3, 15, 150. > Natrafiłeś na moment, w którym problemem wydajnościowym nie jest algorytm, > lecz pamięć. Próbowałeś używać PREFETCH* do wcześniejszego pobrania danych > bliżej procesora? Z PREFETCH nie korzystałem, bo akurat ten procesor ma 6MB L2, a obrazek na którym testowałem ledwie 640x480, więc z pewnością po kilku iteracjach był już w L2. w.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads