Article View: pl.comp.lang.python
Article #26664Re: Wydajność jythona (było Re: python vs php - potrzebne argumenty)
From: Sebastian Kaliszewski
Date: Tue, 24 Nov 2009 18:14
Date: Tue, 24 Nov 2009 18:14
141 lines
7809 bytes
7809 bytes
Jaroslaw Zabiello wrote:
> On Tue, 24 Nov 2009 16:10:53 -0000, Sebastian Kaliszewski
> <s.bez_spamu@remove.this.informa.and.that.pl> wrote:
>
>>>> Jak widać hotspoty hotspotami, psyco ma przy obliczeniach większy
>>>> potencjał.
>>> Po pierwsze, Psyco jest bezużyteczne na systemach 64-bitowych. Ja
>>> już nie mam żadnego kompa na 32 bitach. Mój pecet śmiga na 64bit
>>> Win7, a MBP na 64bit Snow Leopardzie. Przesiądziesz się na 64bity i
>>> po Psyco.
>>
>> Ależ skąd. I na Win7 i na Snow Leopardzie można odpalić soft 32bitowy.
>
> Ale nie Psyco. Nie instaluje sie z MacPortów.
Musisz mieć po pierwsze 32bit Pythona wraz z wszystkimi potrzebnymi
CPython-API bibliotekami.
> A nawet jak uda ci się
> jakoś zainstalować, to mija to się z celem, bo Psyco nie działa na
> systemach 64bitowych.
Działa.
> Nic więc nie zostanie przyśpieszone.
Oczywiście że zostanie. Kod 32bit na systemach 64bit też może być
szybki, ba bywa że jest szybszy niż kod 64bit (mniejsze wskaźniki ==
mniejsza presja na cache)
>> To nie tak. Common Lisp jest bardziej skomplikowany od obu
>
> Żartujesz.
Bynajmniej.
> Lisp jest bardziej skompilowany od Pythona czy Ruby?
Oczywiście. Pod względem skomplikowania może śmiało konkurować z C++.
> Niemożliwe. Lisp jest przecież bardzo prosty.
Był. 50 lat temu. Jak myślisz, czymu powstał Scheme (i to już
kilkanaście lat po powstaniu Lispa, Common Lispa to wtedy jeszcze nie
było)?
> Prawie nie ma w ogóle
> składni.
Ale składnia to jest pikuś, to i tak znika zaraz po sparsowaniu.
Znaczenie ma tkwiąca pod tą składnią semantyka. Zobacz sobie ile w tym
Lispie jest sposobów samego tworzenia zmiennych (ot choćby dynamic
scoping) przekazywania wartości itd.
> Albo źle cię zrozumiałem.
Tu nie ma wiele do rozumienia. Common Lisp to bardzo skomplikowany język.
>
>> A Psyco to kompilacja statyczna?
>
> Nie znam bebechów, ale to chyab potrafi optymalizować tylko raz.
To po prostu generuje kod maszynowy, gdy dojdzie do wniosku, że dany
fragment należy skonwertować. To stosunkowo proste koncepcyjnie
narzędzie (w końcu jedne człowiek toto napisał).
> A
> HotSpot dokonuje dynamicznych optymalizacji długo potem.
HotSpot ma zaledwie parę poziomów optymalizacji -- najpierw tak jak
Psyco (tylko określenie warunków kiedy tego dokonać jest bardziej
rozbudowane) decyduje o wygenerowaniu prostego kodu maszynowego, potem
przy bardziej ostrych warunkach podejmuje decyzję o ponownej kompilacji
tego kodu przy włączeniu większej liczby optymalizacji. Tych stopnie
jest mało (kilka i to małe kilka). To jest koncepcyjnie to co Psyco
tylko włąśnie więcej stopniowe.
Niektóre JITy potrafią (ale wcale nie jestem pewien czy akurat HotSpot
potrafi) zauważyć, że zmienił się charakter danych obsługiwanych przez
dany kod i go przekompilować z innymi optymalzacjami. Problem taki, że
takie sprawdzanie samo w sobie kosztuje i to sporo, zwykle sprowadza się
do tego, że pewien procent przebiegów kodu jest interpretowany, lub w
najlepszym razie wykonywany w wersji maszynowej bez optymalizacji, za to
z włożoną instrumentacją dla pomiarów -- przy czym taki kod jest
kilka-kilkanaście razy wolniejszy od zoptymalizowanego "do końca" ("do
końca" czyli tak jak dany JIT potrafi) więc nawet zastąpienie tylko na
1% przebiegów powoduje kilku-kilkunasto procentowe spowolnienie (co się
często zaczyna mijać z celem).
>
>>> HotSpot może adaptacyjnie dostosowywać się do kodu w locie i
>>> dokonywać dalszych optymalizacji dawno po tym jak program został
>>> uruchomiony. Zaś kod skompilowany statycznie (czyli wszystkie
>>> implemenatcje w C/C++)
>>
>> Ależ nie wszystkie. Patrz choćby LLVM.
>
> Mogę się mylić, ale to chyba nie działa tak jak HotSpot. Nie sądzę aby
> potrafił dokonywać takich optymalizacji jak HotSpot.
LLVM AFAIR też ma kilka (co najmniej 2 ponad interpreter) poziomów
optymalizacji. Oczywiście to nie jest to samo co HotSpot i optymalizacje
są inne i sam kod pośredni (bajtkod) inny.
>
>>> wszystko to, co miały do powiedzenia już powiedziały. Wszystko to, co
>>> był w stanie zoptymalizować, już zrobił przy kompilacji.
>>
>> Co nie przeszkadza w kompilowaniu na podstawioe danych z profilowania
>> (profile guided optimizations). W dodatku nie ma narzutu na
>> profilowanie i kompilację w locie.
>
> Czyli jednak jest tak jak się domyślalem. Staje na rzęsach aby
> zoptymalizować kod lecz tylko przed jego uruchomieniem.
Ale tu nie chodzi o LLVM tylko o zwykły kompilator.
> HotSpot nie ma
> tych ograniczeń. Potrafi dostosować się do zmiennych zachowań programu.
> Ten "narzut" do przewaga kompilacji dynamicznej, a nie jej wada.
Zależnie od sytuacji on jest zaletą lub wadą. Najwydajniejszy kod dziś
generuje, jak najbardziej statyczny, optymalizujący backend z zestawu
kompilatorów Intela, kod ten generowany jest ze źródeł w C, C++ lub
Fortranie (zależnie od frontendu kompilatora). HotSpoty i inne mu nie są
w stanie podskoczyć. W odróżnieniu od HotSpota taki backend ma dużo
mniejszą presję czasową -- jako że wiele problemów występujących podczas
optymalizacji kodu jest NP-trudna (tj. odpowiadające im problemy
decyzyjne są NP-zupełne) lub PSpace-trudna, to mała presja czasowa ma
poważne znaczenie (można zastosować pełne a nie przybliżone rozwiązanie
dla większych fragmentów kodu, można zastosować powolniejsze ale bliższe
optimum heurystyki dla większych fragmentów).
\SK
--
"Never underestimate the power of human stupidity" -- L. Lang
--
http://www.tajga.org -- (some photos from my travels)
Technical Details
Message-ID:
<erhtt6-vpp.ln1@bozon.softax.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.gazeta.pl!opal.futuro.pl!news.internetia.pl!newsfeed.neostrada.pl!nemesis.news.neostrada.pl!atlantis.news.neostrada.pl!news.neostrada.pl!bozon.softax.pl!newsReferences:
<h83in7$rl3$1@inews.gazeta.pl> <op.u3ore7useaqjf2@macbook-pro-15-zbiru.local> <1ed24c15-19ff-4a55-872c-ed0ecc3302c9@p8g2000yqb.googlegroups.com> <221dc55c-d636-44f1-bf11-c437e392aa69@j19g2000yqk.googlegroups.com> <he7dc2$q7s$1@news.lublin.pl> <3d4aa257-cd86-4220-9917-e7ff6af41193@d5g2000yqm.googlegroups.com> <556ac98b-668b-4b4a-8373-46ed23c0735d@o31g2000vbi.googlegroups.com> <2986fd9f-56a1-41b9-811e-4f27a4b1a8ac@o13g2000vbl.googlegroups.com> <fb102619-d0ae-46de-9078-55561f655075@33g2000vbe.googlegroups.com> <7cf465d2-a344-4a63-9fbc-a8e2d5c72e90@v37g2000vbb.googlegroups.com> <0477cb5d-8df9-4ac6-a8f3-00dd75dc9b61@33g2000vbe.googlegroups.com> <87bpis9qvi.fsf_-_@mekk.waw.pl> <op.u3wc3kddeaqjf2@jzabielloosx.dubtilt.local> <op.u3wdfrm6eaqjf2@jzabielloosx.dubtilt.local> <87y6lw866p.fsf@mekk.waw.pl> <op.u3wjn3pieaqjf2@jzabielloosx.dubtilt.local> <3jatt6-kte.ln1@bozon.softax.pl> <op.u3wos9e1eaqjf2@jzabielloosx.dubtilt.local>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.gazeta.pl!opal.futuro.pl!news.internetia.pl!newsfeed.neostrada.pl!nemesis.news.neostrada.pl!atlantis.news.neostrada.pl!news.neostrada.pl!bozon.softax.pl!news From: Sebastian Kaliszewski <s.bez_spamu@remove.this.informa.and.that.pl> Newsgroups: pl.comp.lang.python Subject: Re: Wydajność jythona (było Re: python vs php - potrzebne argumenty) Date: Tue, 24 Nov 2009 19:14:49 +0100 Organization: TP - http://www.tp.pl/ Lines: 141 Message-ID: <erhtt6-vpp.ln1@bozon.softax.pl> References: <h83in7$rl3$1@inews.gazeta.pl> <op.u3ore7useaqjf2@macbook-pro-15-zbiru.local> <1ed24c15-19ff-4a55-872c-ed0ecc3302c9@p8g2000yqb.googlegroups.com> <221dc55c-d636-44f1-bf11-c437e392aa69@j19g2000yqk.googlegroups.com> <he7dc2$q7s$1@news.lublin.pl> <3d4aa257-cd86-4220-9917-e7ff6af41193@d5g2000yqm.googlegroups.com> <556ac98b-668b-4b4a-8373-46ed23c0735d@o31g2000vbi.googlegroups.com> <2986fd9f-56a1-41b9-811e-4f27a4b1a8ac@o13g2000vbl.googlegroups.com> <fb102619-d0ae-46de-9078-55561f655075@33g2000vbe.googlegroups.com> <7cf465d2-a344-4a63-9fbc-a8e2d5c72e90@v37g2000vbb.googlegroups.com> <0477cb5d-8df9-4ac6-a8f3-00dd75dc9b61@33g2000vbe.googlegroups.com> <87bpis9qvi.fsf_-_@mekk.waw.pl> <op.u3wc3kddeaqjf2@jzabielloosx.dubtilt.local> <op.u3wdfrm6eaqjf2@jzabielloosx.dubtilt.local> <87y6lw866p.fsf@mekk.waw.pl> <op.u3wjn3pieaqjf2@jzabielloosx.dubtilt.local> <3jatt6-kte.ln1@bozon.softax.pl> <op.u3wos9e1eaqjf2@jzabielloosx.dubtilt.local> NNTP-Posting-Host: 83.18.189.42 Mime-Version: 1.0 X-Trace: atlantis.news.neostrada.pl 1259084850 4668 83.18.189.42 (24 Nov 2009 17:47:30 GMT) X-Complaints-To: usenet@news.neostrada.pl NNTP-Posting-Date: Tue, 24 Nov 2009 17:47:30 +0000 (UTC) User-Agent: Thunderbird 2.0.0.23 (X11/20090817) In-Reply-To: <op.u3wos9e1eaqjf2@jzabielloosx.dubtilt.local> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit