Rychlej╣φ ne╛ blesk...

13. 5. 1999on-line novΘ okno dom∙ p°edchozφ Φlßnek nßsledujφcφ Φlßnek

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

 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...

Autor: Michal Krause (jinΘ Φlßnky tohoto autora)
Sekce: Praxe


Diskuse

13. 5. 1999 15:38:16 - Peknej clanek, ale doporucuji ... (Karel Zak)
Peknej clanek, ale doporucuji podivat se treba i na http://www.gnu.cz/gcc.html. Tam se autor pokusil udelat test o Pentiu na Pentiu :-))) Ostatne bylo by zajimave udelat stejny test na Pentiu a srovnat to s vysledky na AMD. Coz?

14. 5. 1999 13:58:53 - Pokud pgcc krachne na jednom z... (Mikulas Patocka)
Pokud pgcc krachne na jednom z deseti testu, tak musi byt uplne nepouzitelne, ne? Uz se vidim, jak ve svem programu hystericky hledam chybu, ktera je v kompilatoru...


on-line novΘ okno dom∙ p°edchozφ Φlßnek nßsledujφcφ Φlßnek