Hlavní navigace

Rychlejší než blesk...

Michal Krause

...by mohl být běh všech programů, pokud používáte některý z procesorů Pentium, případně K6. To vše díky kompilátoru PentiumGCC, který by měl produkovat kód optimalizovaný právě pro zmiňované procesory. Slibované zrychlení je 2 až 30%. A jak to vypadá v praxi?

Kompilátor PentiumGCC (pgcc) vychází z gcc a egcs a zaměřuje se na podporu x86 procesorů. Na počátku byla snaha Intelu dokázat, že lze kompilátor gcc optimalizovat pro procesory Pentium tak, že dojde až ke 30% nárůstu výkonu aplikací. Poté, co se jim to povedlo, ukončili vývoj a uvolnili zdrojové kódy, jejichž přímým následníkem pgcc je.

Pgcc lze získat jak v podobě zdrojových kódů, tak i jako binárky pro různé platformy. Já jsem použil binární distribuci a musím zkonstatovat, že navzdory tomu, co se píše ve FAQ, jsem měl s instalací celkem problémy. Podle autorů stačí rozpakovat archív na správné místo a tím by mělo být vše hotovo. V mém případě však ještě bylo nutné nastavit korektně proměnnou prostředí COMPILER_PATH.

Po instalaci jsem se už mohl vrhnout na testování. Jako ideální testovací subjekt se mi jevil linuxový port benchmarku BYTEmark verze 2. Vytvořil jsem si testovací binárky pomocí gcc, egcs a pgcc a ty jsem pak jednu po druhé za více méně stejných podmínek spustil. Tyto testy probíhali na počítači s procesorem AMD K6 200MHz. Počítač s originál Pentiem jsem bohužel neměl k dispozici. Výsledky vidíte v následující tabulce:

Tabulka č. 4
 test   gcc 2.7.2.3   egcs 1.0.2   pgcc 1.1.3 
NUMERIC SORT 107.600 107.920 110.96
STRING SORT 12.044 11.741 11.287
BITFIELD 1.6504e+07 2.2624e+07 2.3688e+07
FP EMULATION 5.9952 5.9761 6.2647
FOURIER 1393.2 1865.4 1871.1
ASSIGNMENT 0.99682 1.01900 0.8259
IDEA 186.43 186.15 151.63
HUFFMAN 89.734 81.619 100.840
NEURAL NET 1.0523 1.1219 1.1062
   LU DECOMPOSITION    22.037 24.771 *)

hodnoty v tabulce značí počet cyklů provedených za jednu vteřinu
*) při výpočtu této hodnoty padal benchmark na SIGSEGV



Popis jednotlivých testů

NUMERIC SORT – třídění pole 32bitových celých čísel
STRING SORT – třídění pole řetězců různých délek
BITFIELD – souhrn různých bitových operací
FP EMULATION – softwarové výpočty s plovoucí desetinou čárkou
FOURIER – číselná analitická rutina pro výpočet série aproximací křivek
ASSIGNMENT – algoritmus alokace úloh
IDEA – bloková šifra
HUFFMAN – kompresní algoritmus
NEURAL NET – malý simulátor neuronové sítě
LU DECOMPOSITION – robustní algoritmus pro řešení lineárních rovnic


Z uvedených výsledků jsou zřejmé dvě věci. Jednak podobnost výsledků egcs a pgcc a jednak to, že pgcc je výrazně rychlejší zejména u celočíselných a bitových operací (NUMERIC SORT, HUFFMAN, BITFIELD). V operacích s plovoucí desetinou čárkou je pgcc srovnatelné s egcs, ale zcela selhává v testech IDEA a ASIGNMENT, které prověří hlavně paměť a cache.

Celkově vzato mám z pgcc tak trochu rozpačité dojmy. Některé výsledky jsou příjemné, ale z celkového hlediska nejde o žádný zázrak. Pokud píšete specializovanou aplikaci, která převážně provádí opakované úkony, může volba kompilátoru vést k solidnímu zrychlení. Zřejmě na tom něco bude, když například TCX kompiluje MySQL pro binární distribuce právě pomocí pgcc. Navíc jsem při testech pozoroval, že mezi verzemi 1.1.1 a 1.1.3 byl ve výkonu kompilovaných programů poměrně značný rozdíl, takže se zdá, že vývoj pgcc jde rychle kupředu. Uvidíme, jak budou vypadat budoucí verze…

Našli jste v článku chybu?