Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
1.4.TEORIAKONSTRUOWANIAKOMPILATORÓW
17
nazwą,jakożeniemamożliwościzagwarantowania,żekodutworzonyprzez
kompilatorbędzierzeczywiścierównieszybkilubszybszyniżdowolnyinnykod
realizującytosamozadanie.
Współcześnieoptymalizacjakoduwykonywanaprzezkompilatorstałasię
jednocześniebardziejważna,aleibardziejzłożona.Większazłożonośćwynika
stąd,żearchitekturyprocesorówrównieżstałysiębardziejrozbudowane,za-
pewniającwięcejmożliwościusprawnieniasposobuwykonywaniakodu.Jest
bardziejważna,gdyżmasywnierównoległekomputerywymagająznaczących
optymalizacji;wprzeciwnymrazieichwydajnośćmożespaśćorządwielkości
lubjeszczebardziej.Wrazzdominacjąmaszynwielordzeniowych(komputerów
wyposażonychwukładyzawierającewielkąliczbęprocesorów)wszystkiekompi-
latorymusząporadzićsobiezproblememrzeczywistegowykorzystaniamaszyn
wieloprocesorowych.
Byłobytrudne,jeślinieniemożliwe,zbudowanieniezawodnegokompila-
torazgotowychnsztuczek”.Ztegowzględuwokółproblemuoptymalizacji
kodupowstałarozległaiużytecznateoria.Wykorzystanieścisłychpodstaw
matematycznychpozwaladowieść,czyoptymalizacjajestpoprawnaiczydaje
pożądanyefektdlawszelkichmożliwychdanychwejściowych.Począwszyod
rozdziału9,pokażemy,żetakiemodele,jakgrafy,macierzeiprogramowanie
linioweniezbędne,jeślikompilatormatworzyćdobrzezoptymalizowany
kod.
Jednocześniesamaczystateorianiejestwystarczająca.Podobniejakwprzy-
padkuwieluinnychpraktycznychproblemów,nieistniejąostateczneidoskonałe
odpowiedzi.Wistociewiększośćpytań,którestawiamywzwiązkuzoptymaliza-
cjąkompilatorów,jestnierozstrzygalna.Jednąznajważniejszychumiejętności
potrzebnychwprojektowaniukompilatorówjestzdolnośćdowłaściwegosformu-
łowaniaproblemu,którychcemyrozwiązać.Napoczątekpotrzebujemydobre-
gorozumieniazachowaniaprogramóworazpogłębionegoeksperymentowania
itestowaniawceluweryfikacjinaszychintuicji.
Optymalizacjakompilatoramusispełniaćnastępująceceleprojektowe:
Optymalizacjamusibyćpoprawna,czylizachowywaćznaczenieskompilo-
wanegoprogramu.
Optymalizacjamusipoprawiaćwydajnośćwieluprogramów.
Czaskompilacjimusinadalbyćrozsądny.
Wymaganywysiłekprojektowymusibyćakceptowalny.
Niemożliwebyłobyprzecenienieważnościpoprawnościoptymalizacji.Trywialne
byłobynapisaniekompilatoragenerującegoszybkikod,gdybytenwygenerowany
kodniemusiałbyćpoprawny!Optymalizowaniekompilatorówjesttaktrudne,
żemożemyzprzekonaniempowiedzieć,żenieistniejeoptymalizującykompilator
całkowiciewolnyodbłędów!
Tymsamymnajważniejszymcelem,którytrzebamiećnawzględzieprzy
pisaniukompilatora,jestpoprawność.
Drugicelgłosi,żekompilatormusibyćskutecznywpoprawianiuwydaj-
nościwieluwejściowychprogramów.Naogółprzezwydajnośćrozumiemy