AMD versus Intel

Krátce proč testujeme procesory

V rámci své vědecké práce se zabýváme numerickými výpočty v oblasti modelování optiky tenkých vrstev. Před deseti lety kvůli nedostatku dostatečně výkonného počítače na našem pracovišti jsem tyto výpočty prováděl na heterogenním clusteru, který obsahoval tehdejší superpočítač Masarykovy univerzity (čtyřprocesorový 64 bitový systém od SGI) a několik unixových výpočetních stanic od různých výrobců (SUN, SGI, DEC atd.), které jsem posbíral po celé univerzitě. Protože výkon tohoto clusteru mi záhy přestal stačiti a velká část kolegů v té době začínala používat PC s některou distribucí LINUXu jako svůj stolní počítač, začal jsem tyto počítače do clusteru přidávat. Díky rostoucímu výkonu stolních počítačů jsme nakonec naše výpočty přenesly na cluster, který je dnes tvořen pouze z PC s operačním systémem LINUX. Abychom dosáhli co největšího výkonu a také poměru cena/výkon, začali jsme procesory testovat. Aby testy byly pro nás objektivní, používali jsme pro testování různé části svých modelů. Protože naše testy jsou často v rozporu se všeobecně používanými benchmarkovými programy, začal jsem zkoumat příčinu tohoto faktu. Výsledkem je, že jsme vyvinuli pro naši potřebu program bm2008 pro testování rychlosti procesorů. S výsledky těchto testů bychom rádi seznámili širší veřejnost.

V současné době používáme následující tři testovací programy:

Typy testů

1. rrt

První s názvem rrt je nejstarší, který používáme pro testování procesorů. Kód reprezentuje dvojný integrál jistých komplexních funkcí. Tato část reprezentuje test, který procesor zatíží výpočty s plovoucí desetinou čárkou. Pro úplnost, RRT je zkratka poruchové teorie v optice rozptylu světla a koho by to zajímalo, uvádím referenci na článek týkající se RRT.
Reference:
Franta D., Ohlídal I., Nečas D., Influence of cross-correlation effects on the optical quantities of rough films, Optics Express 16 (2008) 7789–7803.

2. dlc

Tato část počítá dielektrickou funkci diamantu podobných vrstev (DLC) za pomocí námi vyvinutého tzv. PDOS modelu (viz. reference). V tomto kódu opět převažují výpočty s plovoucí desetinou čárkou, ale ve výsledku se kód chová jinak než rrt.
Reference:
Franta D., Nečas D., Zajíčková L., Models of dielectric response in disordered solids, Optics Express 15 (2007) 16230–16244.

3. lev

I když v našich modelech, které požíváme v praxi převažují výpočty s plovoucí desetinou čárkou, chtěli jsme doplnit náš test o část, která by otestovala procesor v celočíselné aritmetice. Proto jsme doplnili náš program o test, který je založený na Levenshteinovým algoritmu počítající vzdálenost mezi textovými řetězci.
Reference:
Levenshtein distance, Wikipedia .

Jak testujeme procesory

Absolutní rychlost procesorů (rate)

Absolutní rychlost procesorů je definována jako frekvence , na které by musel běžet referenční procesor, tak abychom dosáhli stejného času pro výpočet jako u testovaného procesoru:

kde , a je čas, který jsme dosáhli při výpočtu na testovacím procesoru, frekvence referenčního procesoru a čas, který jsme dosáhli na referenčním procesoru. Výsledné časy záleží též na optimalizaci a verzi kompilátoru. Jako referenční procesor jsme zvolili procesor Pentium 150. Tedy, má-li procesor rate 5000 MHz, znamená to, že tento procesor spočítá úlohu tak, jak by ji spočítal procesor Pentium taktovaný na 5 GHz.

Efektivita procesorů (efficiency)

Efektivita procesorů je definována jako poměr absolutní rychlosti a skutečné frekvence jádra testovaného procesoru:

Tedy procesor Pentium má efektivitu 1. Procesor, který například dosahuje efektivitu 2, spočítá úlohu dvakrát rychleji než by ji spočítal procesor Pentium taktováný na stejné frekvenci.

Výsledky testů

Pro testování procesorů je nutné procesory rodělit nejen podle výrobce, ale i podle typu jádra. Jelikož existuje značné množství typů procesorových jader a některá jádra se z hlediska testovaného výkonu příliš neliší, tak jsme zavedli následující klasifikaci:

Seznam procesorů, které byly testovány, jsou uvedeny v následující tabulce.

Vliv architektury procesoru: Multi-core, Hyper-Threading, Turbo Boost a Turbo Core technologie

V základních testech jsou uváděné výsledky testů, které byly získány na jednotlivých procesorech, kde v půběhu testu, kromě operačního systému nebyly spouštěné jiné aplikace, tj. počítač byl zatězován poze jedním procesem. Procesory pracovaly na základní frekvenci. To znamená, že nebyly přetaktovány a pracovaly na základní frekvenci. Tedy u procesorů Core i7 byl vypnutý Turbo Boost a u Phenom II procesorů byl vypnutý Turbo Core, pokud tuto technologii procesor vlastnil. Tedy reálný výkon procesoru se musí znásobit počtem jader a vzít v úvahu i Hyper-Threading a Turbo Boost (Core) technologie.

Test rrt+dlc+lev

Nejprve uvedeme výsledky souhrnného testu, který je složen ze všech tří jednotlivých testů, tj. rrt, dlc a lev. Jde tedy o jakési jejich zprůměrování, protože délka jednotlivých testů je volena tak, aby byla přibližně stejná. Výsledky jsou uvedeny v grafické formě na obrázku 1.

Obrázek 1.: Absolutní rychlost procesorů měřená testem rrt+dlc+lev pro různé procesory a různé kódy: plné čtverečky - kompilované s volbami pro daný procesor; prázdné čtverečky - ostatní 64 bitové kódy; prázdná kolečka - ostatní 32 bitové kódy. Jednotlivé typy procesorů jsou rozlišené barvami. (podrobněji tabulka)

Z obrázku 1 je vidět, že největší, nebo téměř největší, rychlost procesorů v závislosti na typu kódu dostaneme pro nativní kódy odpovídající danému procesoru. Pouze pro procesory Pentium 4 taktované na vyšších frekvencích toto tvrzení neplatí. Abychom výsledky zpřehlednili, na obrázcích 2 a 3 vybereme výsledky, kde jsou uvedeny pouze data nativního a i386 kódu.

Obrázek 2.: Absolutní rychlost procesorů měřená testem rrt+dlc+lev pro různé procesory a kódy kompilované s volbami pro daný procesor. Jednotlivé typy procesorů jsou rozlišené barvami (podrobněji tabulka).
Obrázek 3.: Absolutní rychlost procesorů měřená testem rrt+dlc+lev pro různé procesory a 32 bitový kód kompilovaný s volbou pro i386. Jednotlivé typy procesorů jsou rozlišené barvami (podrobněji tabulka).

Z obrázků 1, 2 a 3 je vidět, že rychlost závisí na typu procesoru přibližně lineárně na frekvenci procesoru. Pro posouzení kvality návrhu procesoru je účelné si výsledky zobrazit za pomocí efektivity procesoru, kterou jsme definovali dříve. Proto jsme stejné výsledky z obrázků 1, 2 a 3 zobrazili za pomocí efektivity na obrázcích 4, 5 a 6.

Obrázek 4.: Efektivita procesorů měřená testem rrt+dlc+lev pro různé procesory a různé kódy: plné čtverečky - kompilované s volbami pro daný procesor; prázdné čtverečky - ostatní 64 bitové kódy; prázdná kolečka - ostatní 32 bitové kódy. Jednotlivé typy procesorů jsou rozlišené barvami. (podrobněji tabulka)
Obrázek 5.: Efektivita procesorů měřená testem rrt+dlc+lev pro různé procesory a kódy kompilované s volbami pro daný procesor. Jednotlivé typy procesorů jsou rozlišené barvami. (podrobněji tabulka).
Obrázek 6.: Efektivita procesorů měřená testem rrt+dlc+lev pro různé procesory a 32 bitový kód kompilovaný s volbou pro i386. Jednotlivé typy procesorů jsou rozlišené barvami. (podrobněji tabulka).

Z předchozího vyplývá, že nemusíme testy dělat pro všechny procesory, ale bude stačit, když si z každého typu procesoru vybereme jeden reprezentativní (v našem případě ten s největší efektivitou) a skutečný výkon potom vypočteme tak, že efektivitu procesoru vynásobíme frekvencí jádra.

Obrázek 7.: Efektivita procesorů měřená testem rrt+dlc+lev pro různé typy procesorů kompilované s volbami pro daný procesor a pro i386. Jednotlivé typy procesorů jsou rozlišené barvami. (podrobněji tabulky pro nativní a i386 kód).

Abychom se na testované procesory podívali hlouběji, provedeme jednotlivé testy.

Test rrt

Obrázek 8.: Efektivita procesorů měřená testem rrt pro různé typy procesorů kompilované s volbami pro daný procesor a pro i386. Jednotlivé typy procesorů jsou rozlišené barvami. (podrobněji tabulky pro nativní a i386 kód).

Test dlc

Obrázek 9.: Efektivita procesorů měřená testem dlc pro různé typy procesorů kompilované s volbami pro daný procesor a pro i386. Jednotlivé typy procesorů jsou rozlišené barvami. (podrobněji tabulky pro nativní a i386 kód).

Test lev

Obrázek 10.: Efektivita procesorů měřená testem lev pro různé typy procesorů kompilované s volbami pro daný procesor a pro i386. Jednotlivé typy procesorů jsou rozlišené barvami. (podrobněji tabulky pro nativní a i386 kód).

Srovnání reálných výkonů dosažených na vybraných procesorech

K tomuto srovnání jsme vybrali nejrychlejší procesory od obou konkurenčních firem, které vystupují v našem testu:
Intel Core i7 CPU 860 @ 2.80 GHz
AMD Phenom II X4 965 Processor @ 3.4 GHz
AMD Phenom II X6 1090T Processor @ 3.2 GHz

Procesor Core i7 má 1/1/4/5 turbo módy. To znamená že je-li zpracováván jeden proces a teplota jádra je nízká, tak se frekvence jádra zvýší na frekvenci 2.8 + 5 * 0.133 = 3.46 GHz. Při větším zatížení jsou-li zpracovávány dva procesy, frekvence je 2.8 + 4 * 0.133 = 3.33 GHz a při třech a více procesech je frekvence 2.8 + 0.133 = 2.93 GHz. Navíc procesor Core i7 má Hyper-Threading technologii, tedy dvojnásobný počet vituálních jader, který přidá přibližně 20% výkonu, zpracovává-li procesor osm a více úloh. Dále z obrázku 1 je vidět, že pro procesory Core 2 a i7 se nejlepších výsledků dosahuje při použití optimalizace pro Phenomy (amdfam10). Přičemž největší rozdíl je v testu lev, viz následující tabulka efektivity procesoru i7:

Efektivita procesoru Core i7 v závislosti na kódu.
test / kód core2 amdfam10
rrt 3.18 3.23
dlc 2.63 2.64
lev 2.76 3.28

Procesor Phenom II X6 má technologii Turbo Core (ekvivalent Turbo Boost technologie), takže při zatížení jedním až třemi procesy je jádro taktováno na frekvenci 3.6 GHz, zatímco při zatížení procesor sníží frekvenci na nominální hodnotu 3.2 GHz.

Reálné výkony procesorů potom změříme tak, že testy spustíme paralelně v několika vláknech (v našem případě v jednom až osmi vláknech) a sledujeme dosažených časů jednotlivých vláken. U systému, který rovnoměrně rozdělí úlohy mezi jednotlivá jádra, které při jakýmkoliv zatížení běží na konstantní frekvenci, tj. Phenom II X4, pozorujeme lineární nárůst výkonu s počtem vláken, až do celkového počtu jader v procesoru. Po překročení počtu vláken nad počtem jader procesoru se výkon nadále nezvyšuje (viz. výsledky na obrázku 11 pro AMD Phenom II X4 procesor). U procesoru využívající Turbo Boost a Hyper-Threading technologii je situace jiná. Při spuštění testu na jednom vláknu procesor Core i7 běží na maximální frekvenci 3.46 GHz a jeho výkon je ve srovnání s Phenom II procesorem téměř totožný. Při běhu testu ve dvou až čtyřech vláknech se sníží frekvence jádra na 3.33 respektive 2.93 GHz, které se projeví v nižším výkonu ve srovnání s Phenom II procesorem. Zatížíme-li ale procesor testy v pěti až osmi vlákny, situace se díky technologii Hyper-Threading začne srovnávat, přičemž při osmi vláknech procesor Core i7 znovu dosahuje rychlosti procesoru Phenom II X4 (viz. obrázek 11). U procesoru Phenom II X6 se projeví fakt, že má 6 fyzických jader, proto i když je taktovaný na nižší frekvenci než je procesor Phenom II X4, tak při 6 vláknech dosáhne nejvyššího výkonu v našem testu (viz. obrázek 11).

Obrázek 11.: Srovnání reálných rychlostí procesorů v závislosti na počtu zpracováváných procesů (podrobněji viz. tabulka).

Za pomocí předešlých testů je možné odhadnout realné maximální výkony procesorů, které jsme zatím netestovali, ale jsou v prodeji. V následující tabulce uvádíme tento výkon pro vybrané procesory:

Maximální výkon versus cena nejvýkonnějších procesorů. Seřazeno podle výkonu.
procesor max rate [GHz] cena [Kč] max rate/cena
Intel Core i7 CPU 980X @ 3.33 GHz 73900 26399 2.80
AMD Phenom II X6 1090T Processor @ 3.2 GHz 58700 7787 7.54
AMD Phenom II X6 1055T Processor @ 2.8 GHz 51400 4990 10.30
Intel Core i7 CPU 975 @ 3.33 GHz 49200 25828 1.90
Intel Core i7 CPU 870 @ 2.93 GHz 43300 13188 3.28
AMD Phenom II X4 965 Processor @ 3.4 GHz 41700 4490 9.29
Intel Core i7 CPU 860 @ 2.80 GHz 41400 7319 5.65
AMD Phenom II X4 925 Processor @ 2.8 GHz 34400 3683 9.34
Ceny procesorů jsou vzaty od firmy Alsa.cz 18.6.2010 včetně DPH.

Závěr

Závěry uvedené v tomto odstavci jsou aplikovatelné pro uživatele, kteří počítače používají na numerické výpočty a sami si svůj kód kompilují. Předem upozorňuji, že závěry zde uvedené není možné zevšeobecňovat. Například běžní uživatelé Windows, kteří v počítači používají jen již předem vytvořený software, většinou nevyužijí v počítači veškeré možnosti svých procesorů. Například uživatelé 32 bitové verze Windows XP, kteří vlastní některý z 64 bitových procesorů, ani tento procesor do 64 bitového kódu nepřepnou a tím většinou ztratí podstatnou část výkonu svého počítače. Zajisté kapitolu samu pro sebe budou tvořit uživatelé her. Čistě obecně se dá říci, že bude záležet na tom jaký kód daný program používá a na jakém kompilátoru, respektive s jakými optimalizacemi, je kód kompilován. Nedá se tedy hodnotit úroveň procesorů podle jednoho kódu a nebo podle kódů, které jsou optimalizované pro jeden typ procesorů. Z mých zkušeností většina programů dostupných pro PC jsou kompilované ve 32 bitovém módu optimalizované pro procesory Intel a využívající jen celočíselnou aritmetiku. Takže ve skutečnosti pro běžného uživatele je asi relevantní test lev kompilovaný pro i386 (viz. obrázek 9). Navíc se jistě musí zhodnotit i faktor ceny procesoru a frekvence s kterou jsme schopni daný procesor koupit. Navíc jak bylo vidět naše testy nejsou závislé na velikosti L2 vyrovnávací paměti a jistě existují numerické aplikace, které budou na velikosti této paměti závislé. Proto žádám, aby tyto skutečnosti byly vzaty v úvahu, a aby mě skalní příznivci jedné a nebo druhé firmy neobviňovali ze zkreslování výsledků. Každopádně, každý má možnost si testy zopakovat.

Krátký návod k použití pro uživatele Windows

Nejprve si stáhněte testovací program a uložte na USB flashdisk. Na CD si vypalte nějakou live distribuci Linuxu, např. live openSuSE . Nastartujte Linux a přepněte se na konzolu, t.j. textový terminál (Ctr+Alt+F1). Přihlaste se jako root (heslo systém nevyžaduje). Nemusíte mít obavu, váš harddisk bude v bezpečí, nebude vůbec připojený, takže vaše Windows budou v bezpečí. Místo pevného disku se vám vytvořil v live systému virtuální ramdisk. Vytvořte adresář disk pomocí příkazu:
> mkdir disk
Pak do tohoto adresáře přípojíme USB flashdisk, která se nám většinou jeví v počítači jako zařízení /dev/sdb:
> mount -t vfat /dev/sdb /root/disk
Toto platí když, počítač obsahuje jenom jeden harddisk (/dev/sda), který není avšak připojený. Máme-li v počítači více disků, nebo jiné čtecí zařízení, musíme v předcházejícím příkazu zvolit ten poslední. Jaké disky máme v počítači zjistíme pomocí:
> ls /dev/sd*
Máme-li disk připojený, změníme aktuální adresář:
> cd disk
Nyní se nacházíme v adresáři /root/disk, který obsahuje soubor >bm2008.tgz s archivem, který jsme si tam již dříve uložili. Archív rozbalíme pomocí příkazu:
> tar xzf bm2008.tgz
Příkaz vytvořil adresář bm2008, do kterého přejdeme:
> cd bm2008
V adresáři bm2008 nalezneme zdrojový kód bm2008.cxx, soubor Makefile, který používá příkaz make a již překompilované spustitelné programy bm2008-k8, bm2008-core2 atd. Zdatní uživatelé mohou využít zdrojový kód a Makefile ke zkompilování vlastních binárek a otestování své verze kompilátoru (dosažené výsledky závisí na kompilátoru a na jeho verzi). Začátečníci nemusí nic kompilovat a využijí k testu již zkompilované programy. Jednotlivé testy se spustí pomocí příkazu:
> bm2008-ARCH benchmark ...
kde ARCH značí architekturu pro kterou je program optimalizován a benchmark je typ testu který se spustí. V tuto chvíli jsou k dispozici tři testy, t.j. rrt, dlc a lev. Význam těchto zkratek je vysvětlen výše v samostatných kapitolách. Architektury, pro které jsme kód zkompilovali jsou následující:

Takže chceme-li například spustit test rrt na 64 bitovém počítači a chceme-li aby kód byl optimalizován pro Athlon 64, tak zadáme:
> ./bm2008-k8 rrt
s následujícím výstupem:

benchmark       : bm2008 rrt
compilator      : g++ (SUSE Linux) 4.3.1 20080507 (prerelease) [gcc-4_3-branch revision 135036]
compiled as     : g++ -O2 -ffast-math -static -m64 -march=k8 -DCOMPH="comp-k8.h" -o bm2008-k8 bm2008.cxx
cpu family      : 15
model           : 67
model name      : AMD Athlon(tm) 64 X2 Dual Core Processor 6000+
stepping        : 3
cache size      : 1024 KB
cpu cores       : 2
cpu MHz         : 3000.000 MHz
user time       : 0m37.330s
rate            : 7102
rate/cpu MHz    : 2.37
Chceme-li spustit všechny tři testy v 32 bitovém kódu kompatibilním s procesorem Intel 80386 a navíc chceme, aby se výstup kromě na terminál uložil do souboru out, tak zadáme:
> ./bm2008-i386 rrt dlc lev | tee out.
V druhém případě dostaneme následující výstup:
benchmark       : bm2008 rrt dlc lev
compilator      : g++ (SUSE Linux) 4.3.1 20080507 (prerelease) [gcc-4_3-branch revision 135036]
compiled as     : g++ -O2 -ffast-math -static -m32 -march=i386 -DCOMPH="comp-i386.h" -o bm2008-i386 bm2008.cxx
cpu family      : 15
model           : 67
model name      : AMD Athlon(tm) 64 X2 Dual Core Processor 6000+
stepping        : 3
cache size      : 1024 KB
cpu cores       : 2
cpu MHz         : 3000.000 MHz
user time       : 2m22.770s
rate            : 6069
rate/cpu MHz    : 2.02
Chcete-li vyzkoušet jak se procesor byde chovat, když spustíte test například šestkrát, použijte přepínač -n následujícím způsobem:
> ./bm2008-amdfam10 -n6 rrt dlc lev | tee out-n6-all-amdfam10
bm2008 -n6 rrt dlc lev
compilator      : g++ (SUSE Linux) 4.3.2 [gcc-4_3-branch revision 141291]
compiled as     : g++ -O2 -ffast-math -static -m64 -march=amdfam10 -DCOMPH="comp-amdfam10.h" -o bm2008-amdfam10 bm2008.cxx
cpu family      : 16
model           : 4
model name      : AMD Phenom(tm) II X4 965 Processor
stepping        : 2
cache size      : 512 KB
cpu cores       : 4
real time  1    : 2m2.910s
real time  2    : 2m3.490s
real time  3    : 2m4.240s
real time  4    : 2m4.750s
real time  5    : 2m6.260s
real time  6    : 2m7.050s
mean time       : 2m4.783s
real rate       : 41663
Všimněte si, že operační systém rozdělil šest výpočtů mezi čtyři jádra u AMD procesoru přibližně stejně. Když stejný výpočet provedeme na Core i7, která má HT technologii, tak se výpočty nerozvrhnou mezi jádra stejnoměrně a budou se počítat s velmi rozlišnými časy: > ./bm2008-amdfam10 -n6 rrt dlc lev | tee out-n6-all-amdfam10
benchmark       : bm2008 -n6 rrt dlc lev
compilator      : g++ (SUSE Linux) 4.3.2 [gcc-4_3-branch revision 141291]
compiled as     : g++ -O2 -ffast-math -static -m64 -march=amdfam10 -DCOMPH="comp-amdfam10.h" -o bm2008-amdfam10 bm2008.cxx
cpu family      : 6
model           : 30
model name      : Intel(R) Core(TM) i7 CPU         860  @ 2.80GHz
stepping        : 5
cache size      : 8192 KB
cpu cores       : 4
real time  1    : 1m55.830s
real time  2    : 2m3.660s
real time  3    : 2m12.330s
real time  4    : 2m12.850s
real time  5    : 2m17.480s
real time  6    : 2m38.040s
mean time       : 2m13.365s
real rate       : 38982
Jestli si myslíte, že váš procesor chybí ve výsledcích uvedených na této stránce spusťte následující skript:
> ./run ARCH
a výsledky, které se uloží do souborů out-* mi zašlete na adresu franta@physics.muni.cz. Je nutné zvolit ARCH podle typu vašeho procesoru. Máte-li například procesor Core 2 zadejte příkaz:
> ./run core2,
a ten vyrobí soubory out-amdfam10-all, out-athlon-all, out-core2-all, out-i386-all, out-k6-all, out-k8-all, out-nocona-all, out-pentium-all, out-pentium2-all, out-pentium3-all, out-pentium4-all, out-core2-dlc, out-core2-lev, out-core2-rrt, out-i386-dlc, out-i386-lev a out-i386-rrt, které mi zašlete.