[python] zaporny systemovy cas
superman
feed na centrum.cz
Úterý Listopad 28 15:09:01 CET 2006
> Nevim, jak to presne v pythonu je, ale obecne abstraktni syntakticky
> strom je vstupem pro generator vnitrniho kodu, ktery by mel byt uz
> snadneji optimalizovatelny.
Znovu opakuji, že optimalizace není sranda! Takový interpretr Javy
napíšete odhadem na 20 tisíc řádků v C++ za měsíc práce. Ovšem skutečný
interpretr Javy od Sunu, který skutečně optimalizuje a provádí JIT
kompilaci má přes 3 milióny řádků!!! Navíc má usnadněnou práci s tím, že
značná část kompilace je provedena už kompilátorem javac a intepretr jen
interpretuje už částečně optimalizovanou binární formu.
> Presto ale nechci uverit tomu, ze python ve vysledku udela neco jako:
>
> mov cx, cislo
>
> L1: <nacti dalsi 'i'>
> loop L1
Ve výsledku to nejen tak je, ale bude ještě hůř. Protože rozhodnutí je
změnit architekturu. Navíc co chcete, když se jedná o cyklus foreach?
For cyklus v Pythonu neexistuje.
> Kazdopadne k jistym upravam by melo take dochazet na urovni procesoru.
K jakým? Procesor je prostě čím dál víc náchylnější na kód co se mu
předhodí. Zkoušel jste někdy optimalizovat stroják na rychlost, nebo
zkoumat co vyleze z Céčka? Stačí vzít a přehodit dvě instrukce a běží to
klidně o 50% rychleji. Nebo napíšete podprogram ve stojáku, který je
desetkrát větší, než Vaše první verze a on běží třeba třikrát rychleji!
A přitom je to ten samý algoritmus. Zoptimalizovat tohle je věc, která
jen v kompilátorech C/C++ dělá tým machrů řadu let!
Procesor čím dál víc spoléhá na to, že se mu předhodí již OPTIMÁLNÍ kód
s tím, že jako z nouze ctnost provede i ten neoptimální, ale třeba
dvacetkrát pomaleji. Je to jen z důvodů zpětné kompatibility, což je věc
v pythonovské komunitě nevítaná :-) Na optimalizaci procesoru
nespoléhejte, šíleně byste se spletl.
Miloslav Ponkrác
Další informace o konferenci Python