Update pro článek Úvod do GNU
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Dokončené není nic
-- H. F. Amiel
Tak asi největší změna je, že jsem celý článek přepsal do
úhledné češtiny a dal na www.gnu.cz. Ale jsou i další:
Ve článku o GCC (pokud nevíte co GCC je, vězte že to je jeden z
nejlepších překladačů jazyka C, Pascal a další pro skoro všechny
systémy) jsem si stěžoval, že už dlouho nevyšla nová verze. Nebyl
jsem sám a tak skupina programátorů z Cygnusu začala pracovat na
nové verzi oddělené od budoucí 2.8.0. Mělo by to být GCC 3.0. Má
krycí jméno EGCS.
Už teď má opravdu hodně změn - nový scheduler od IBM (Haifa),
který rozumí lépe superskalárním procesorům (pentia a výše), lepší
unrollování smyček, podporu pentia a pentiapro, novou podporu C++
včetně fungujících templates atd. Proto jsem udělal nové testy na mé
mandelbrotčí smyčce:
+------------+---------------------------------------+---------------------+
|Kompilátor | přepínače | Smyček za sekundu |
+------------+---------------------------------------+---------------------+
|pgcc2.7.2p | -O6 -ffast-math -mpentium -frisc | 5 464 480 |
| | -fomit-frame-pointer -funroll-loops | |
| | -fopt-reg-use -frisc | |
|egcs970828 | -O3 -ffast-math -mpentium | 5 405 405 |
| | -fomit-frame-pointer -funroll-loops | |
|egcs970828 | -O3 -ffast-math -m486 | 4 807 692 |
| | -fomit-frame-pointer -funroll-loops | |
|gcc2.6.3 | -O3 -ffast-math -m486 | 4 233 641 |
| | -fomit-frame-pointer -funroll-loops | |
|gcc2.7.2.1 | -O3 -ffast-math -m486 | 4 149 377 |
| | -fomit-frame-pointer -funroll-loops | |
| | | |
|gpc2.0 | -O3 -ffast-math -m486 | 3 433 962 |
| | -fomit-frame-pointer -funroll-loops | |
|vc5.0 | (optimalizace na max) | 3 060 908 |
|wc10.0 | -7 -5 -ol -ol+ -om -op -or -ot -fp5 | 2 222 222 |
| | -fpi87 | |
|wc10.0 | -5 -7 | 2 217 249 |
|delphi2.0 | | 1 807 288 |
|plan9 | (v IDE-586,speed+size optim.) | 1 623 376 |
|vc1.0 | (v IDE-586,speed+size optim.) | 1 531 393 |
|bc4.5 | (v IDE-486,fastest executable) | 1 455 604 |
|bc3.1 | (v IDE-386,fastest executable) | 1 433 070 |
|gcc2.7.2.1 | (bez optimalizací) | 1 281 348 |
|gpc2.0 | (bez optimalizací) | 1 109 756 |
|bp7.0 | | 901 713 |
|tc2.0 | -1 -f87 -O -r -Z -G -a -mt | 846 511 |
|bc4.0 | (v IDE-486,speed optimizations) | 755 857 |
|bc2.0 | | 716 535 |
|bc2.0 | -G -O -2 -Z -r | 716 535 |
|tc2.0 | | 546 546 |
|bc4.0 | (v IDE-486,speed+size optim.) | -3.6676456... |
+------------+---------------------------------------+---------------------+
Testy ve floating point verzi
Pgcc je GCC založené na EGCS s některými patchi navíc, takže je
celkem nestabilní ale kompiluje o něco málo víc. Wc je Watkom C, bc
je borland C, vc je Visual C++ (na celém testu mě nejvíc mrzí, že se
umístilo před watcomem), gcc je GNU C, egcs je nová verze GCC, GPC
je GNU Pascal compiler. Vyšší čísla jsou lepší.
+------------+---------------------------------------+---------------------+
|Kompilátor | přepínače | Smyček za sekundu |
+------------+---------------------------------------+---------------------+
|pgcc2.7.2p | -O6 -ffast-math -mpentium -frisc | 3 464 480 |
| | -fomit-frame-pointer -funroll-loops | |
| | -fopt-reg-use -frisc | |
|egcs970828 | -O3 -ffast-math -mpentium | 3 311 258 |
| | -fomit-frame-pointer -funroll-loops | |
|gcc2.7.2.1 | -O3 -ffast-math -m486 | 3 250 000 |
| | -fomit-frame pointer -funroll-loops | |
|wc10.0 | -fpi87 -fp5 -5 -7 -ol -ol+ -om -on | 3 246 753 |
| | -or -ot | |
|wc10.0 | -5 -7 | 3 194 888 |
|plan9 | | 2 973 176 |
|gpc2.0 | -O3 -ffast-math -fstrength reduce | 2 888 888 |
| | -fomit-frame pointer -funroll-loops | |
|gcc2.7.2.1 | (bez optimalizace) | 2 394 736 |
|gpc2.0 | (bez optimalizace) | 2 219 512 |
|bc2.0 | -G -O -2 -Z -r | 2 166 666 |
|bp7.0 | | 1 956 947 |
|tc2.0 | -1 -O -r -G -Z -a -mt | 892 156 |
|tc2.0 | | 846 511 |
+------------+---------------------------------------+---------------------+
Testy v integer verzi
výheň