RSS

Szybkość SSE w wykonaniu różnych mikroprocesorów

Liczba odsłon: 14

Wczoraj pisałem, jak to asembler wciąż się przydaje do przyspieszania kodu. Różne mikroprocesory jednak w różny sposób reagują na ręczną asemblację algorytmu; w przypadku niektórych mozolna praca przynosi rewelacyjne efekty, zaś w przypadku innych jest tylko stratą czasu.

Na załączonym obrazku przedstawiam czasy działania opisywanego wczoraj programu testowego na czterech różnych mikroprocesorach. Już na pierwszy rzut oka widać, że AMD Athlon XP, niestety, niemiłosiernie się kompromituje. Jest to jednak konstrukcja sprzed paru dobrych lat, nie obsługuje w ogóle SSE2 (stąd myślniki przy pozycjach odpowiadających liczbom typu double) i generalnie niezbyt dobrze sprawuje się w zastosowaniach obliczeniowych (co nie oznacza, że równie źle w innych). Co najciekawsze, optymalizacja asemblerowa w przypadku Athlona XP przynosi znikome zyski: kod napisany w C i skompilowany z wykorzystaniem SSE jest niewiele wolniejszy, niż ręcznie stworzony kod asemblerowy.

Niestety, nie miałem pod ręką komputera z mikroprocesorem Athlon 64. W układach tych znacząco poprawiono jednostkę strumieniową, można się zatem spodziewać, że uzyskane wyniki byłyby znacznie lepsze.

Intel Pentium 4 prezentuje się całkiem nieźle, szczególnie w momencie uruchomienia jednostek strumieniowych. W jednym z testów procesor ten zdobył nawet pierwsze miejsce, deklasując konkurencję! Przyzwoite wyniki opłacone są jednak bardzo wysoką częstotliwością taktowania układu, nie dającą szansy dalszego rozwoju. Nic dziwnego, że koncern Intel zrezygnował z dalszego podążania ślepą ścieżką.

Core Duo to zupełnie inna klasa. Mimo wyraźnie niższego taktowania w każdym teście pokonywał (i to co najmniej dwukrotną przewagą) Athlona XP, ale też (choć nie tak spektakularnie) Pentium 4 z tej samej „stajni”. Aż cztery zwycięstwa to doskonały wynik.

Również cztery najlepsze wyniki zaliczył najnowszy produkt firmy Intel, Core 2 Duo. Wynik ten jest szczególnie ciekawy biorąc pod uwagę o 200 MHz taktowanie mikroprocesora i fakt, że testowałem energooszczędną wersję układu. Gdyby nie brak wyników najnowszych układów firmy AMD, zaryzykowałbym stwierdzenie, że Core 2 Duo to najlepsze obecnie układy do szybkiego przetwarzania danych numerycznych.

Wszystkie mikroprocesory firmy Intel wyraźnie faworyzują oprogramowanie pisane w asemblerze. Fakt, stosowałem kompilator gcc, niekoniecznie generujący optymalny dla nich kod (niestety, nie mam zamiaru kupować na potrzeby testu komercyjnego Intel C Compiler :)). Widać jednak wyraźnie, że w wielu przypadkach zastosowanie asemblera umożliwiło skrócenie czasów o od 25% do 50%; choć nie musi się to przekładać na wyraźnie szybsze działanie programu jako całości, na pewno nie pozostaje bez wpływu.


Chętnie przetestuje program.
Mam debiana amd64 i korzystam z notebooka z procesorem Turion X2 TL-50 (max: 1,6 GHz, min: 800 MHz).

Pozdrawiam
Intel udostępnia linuksiane wersje swoich kompilatorów (32-, 64-bitowego i IA-64) darmo do zastosowań niekomercyjnych (nie widzę reklam na blogu, więc on się chyba łapie, ale może adblock mi je wycina ;)) – http://www.intel.com/cd/software/products/asmo-na/eng/277618.htm .
Mam wyniki z kilku kolejnych procesorów, w tym z Athlona X2 4400+. W najbliższym czasie opublikuję je. Skorzystam jednak z oferty i w ciągu paru dni postaram się przesłać na maila linuksową wersję programu do przetestowania tego Turiona.