Logo GNU
Kodovani P°edchozφ Nßsledujφcφ Obsah

5. EGCS

EGCS je novß v²vojovß v∞tev GNU p°ekladaΦe. Od ,,oficißlnφ'' verze GCC se li╣φ ve v²vojovΘm modelu. GCC pou╛φvß katedrßlnφ model - k v²vojov²m verzφm p°ekladaΦe mß p°φstup pouze omezenß skupina v²vojß°∙ (ka╛d², kdo se takov²m v²vojß°em chce stßt, musφ se p°ihlßsit do mailing listu apod.). Ostatnφ majφ p°φstup pouze k poslednφ stabilnφ verzi p°ekladaΦe.

O verzi 2 GCC se starß Richard Kenner. Ten ale velmi dlouhou dobu nevydal novou verzi. (verze 2.7.2 byla vydßva v roce 95 a verze 2.8.0 a╛ v prosinci 97). P°esto, ╛e GCC i ve dva roky starΘ verzi bylo schopnΘ konkurovat ostatnφm nov∞j╣φm p°ekladaΦ∙m, n∞kterΘ v∞ci chyb∞ly. A╛ do konce roku 97 GCC nepodporovalo optimalizace pro Pentia, GPP u╛ neodpovφdalo nejnov∞j╣φm draft∙m standardu C++ a m∞lo problΘmy s podporou templates.

Mnoha lidem to vadilo. Vznikl nap°φklad projekt vytvß°ejφcφ PentiovΘ GCC optimalizace (PGCC), kter² zaΦal sßm Intel ale pozd∞ji to vzdal, proto╛e PGCC bylo velmi nestabilnφ. Bylo mnoho spor∙ na mailing listech a zaΦalo se diskutovat o zm∞n∞ v²vojovΘho modelu na otev°en². V otev°enΘm modelu mß k v²vojov²m verzφm p°φstup ka╛d². A i o za°azovßnφ zm∞n do oficiφlnφch zdrojov²ch k≤d∙ se m∙╛e starat vφce lidφ. To umo╛nφ, aby vφce lidφ otestovalo v²vojovΘ verze a zapojilo se do v²voje. Tento model pou╛φvß nap°φklad jßdro Linuxu. Odp∙rci otev°enΘho modelu ale °φkali, ╛e GCC je velmi komplikovan² program a je velmi snadnΘ do n∞j zanΘst chyby, kterΘ se pak budou ╣patn∞ hledat, a nebo n∞kterΘ v∞ci naprogramovat tak, ╛e pozd∞ji p°inesou mnoho komplikacφ. Katedrßlnφ v²vojov² model funguje spolehliv∞ u mnoha projekt∙ (nap°φklad FreeBSD).

A proto vzniklo EGCS, kterΘ pou╛φvß otev°en² v²vojov² model. O jeho v²voj se starß skupina programßtor∙ z Cygnusu. EGCS vychßzφ z v²vojovΘ verze 2.8.0 a jsou do n∞j p°idßvßny v∞echny zm∞ny z v²voje GCC. Navφc je ale otev°en∞j╣φ radikßln∞j╣φm zm∞nßm (jako jsou novΘ optimalizace apod.), kterΘ mohou doΦasn∞ znestabilnit p°ekladaΦ. Verze 1.0 je z prosince 97 a obsahuje nßsledujφcφ zm∞ny oproti GCC:

V p°φ╣tφch verzφch EGCS se plßnuje za°azenφ nekter²ch zm∞n z PGCC (lep╣φ podpora Riscov²ch architectur) a lep╣φ podpora superskalßrnφch procesor∙. GCC nebylo navrhovßno pro superskalßrnφ procesory a jeho popis architektury je neumo╛≥uje sprßvn∞ popsat. Superskalßrnφ procesory se vyznaΦujφ tφm, ze majφ vφce pipeline a tak mohou zpracovat vφce instrukcφ zßrove≥. ProblΘm ale je, ╛e ne ka╛dß pipeline podporuje v╣echno. Nap°φklad na Pentiu je pipeline U a V, kde pipeline V podporuje pouze ,,jednoduchΘ'' instrukce - nap°φklad add, ale neumφ nap°φklad instrukce s prefixem. U nov∞j╣φch procesor∙ je situace je╣t∞ komplikovan∞j╣φ. Navφc v p°φpad∞, ╛e jedna pipeline zpracovßvß hodnotu, kterou pot°ebuje instrukce v jinΘ pipeline, musφ druhß pipeline poΦkat. A tak hodn∞ zßle╛φ na tom, jak je k≤d se°azen. O sprßvnΘ se°azenφ k≤du se starß scheduler. Nejednß se ale pouze ale o p°erovnßnφ instrukcφ. N∞kdy se vyplatφ vygenerovat ·pln∞ jin² k≤d. Proto mß scheduler vφce pr∙chod∙. Scheduler v GCC nebyl navrhovßn pro takto komplikovanou situaci a tak nepodßvß nejlep╣φ v²sledky. EGCS obsahuje nov² experimentßlnφ scheduler Haifa. Ten mß nov² pr∙chod po alokaci registr∙. Umφ take interblock scheduling a dal╣φ vymo╛enosti. ProblΘm ale je, ╛e jeho v²sledky zatφm nejsou spolehlivΘ. Na n∞kter²ch architekturßch tento scheduler zrychluje (HP-PA) na jin²ch (Intel) jsou jeho vysledky r∙znorodΘ a n∞kde zpomaluje. ╚asteΦn∞ je to zp∙sobeno tφm, ╛e nenφ je╣t∞ sprßvn∞ dolad∞n a takΘ tφm, ╛e machine description neumpo╛≥uje sprßvny popis t∞chto procesor∙ a tak jsou napsßny tak, ╛e sice ΦßsteΦn∞ p°ekladaΦi l╛ou ale podßvajφ v∞t╣inou dobrΘ v²sledky. S Haifa schedulerem se ale situace zm∞nila a tak tyto machine description budou muset b²t p°epsßny.

Plßnuje se i mnoho dal╣φch zm∞n a tak se ob∞ verze budou asi stßle vzdalovat a Φas ukß╛e, kter² z p°φstup∙ je lep╣φ. Domßcφ strßnka EGCS se nachßzφ na www.cygnus.com/egcs


P°edchozφ Nßsledujφcφ Obsah

Dotazy a p°ipomφnky ohledn∞ strßnky posφlejte na hubicka@paru.cas.cz