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:
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…