🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.python
Article #26664

Re: Wydajność jythona (było Re: python vs php - potrzebne argumenty)

#26664
From: Sebastian Kaliszewski
Date: Tue, 24 Nov 2009 18:14
141 lines
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!news
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>

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