Article View: pl.comp.lang.python
Article #26654Re: Wydajność jythona (było Re: python vs php - potrzebne argumenty)
From: Jaroslaw Zabiello
Date: Tue, 24 Nov 2009 11:41
Date: Tue, 24 Nov 2009 11:41
157 lines
6634 bytes
6634 bytes
Dla odmiany inny prosty mikrobenchmark. Liczenie ciągu Fibonacciego. Tym
razem CPython przegrywa z Jythonem.
# -*- coding: utf-8 -*-
from timeit import time
def fib(n):
if n <= 1: return n
return fib(n - 1) + fib(n - 2)
for i in range(10):
t = time.time()
fib(35)
print(time.time()-t)
$ python fibonacci.py
5.6540749073
5.64278578758
5.63702011108
5.62101387978
5.63334298134
5.647179842
5.62858891487
5.63060092926
5.62489700317
5.64799690247
$ jython -J-server fibonacci.py
4.79199981689
4.03499984741
4.03300023079
4.02399992943
3.99699997902
4.00100016594
3.99699997902
3.99900007248
4.00200009346
3.99799990654
On Tue, 24 Nov 2009 11:34:22 -0000, Jaroslaw Zabiello <usenet@onet.eu>
wrote:
> On Tue, 24 Nov 2009 10:08:49 -0000, Marcin Kasperski
> <Marcin.Kasperski@mekk.waw.pl> wrote:
>
>>> * Jython - kilka razy szybszy od CPython, tylko trochę wolniejszy od
>>> zwykłej Javy
>>
>> To jest zwyczajna nieprawda, przynajmniej w ogólności. Robiłem parę
>> prostych benchmarków (dla kodu "algorytmicznego") i Jython był znacznie
>> *wolniejszy* od CPythona. Przykładowo, kawałek skryptu liczącego liczby
>> pierwsze sitem jest na jythonie sześć razy wolniejszy:
>>
>> $ time python pierwsze.py
>> Jest 348514 liczb pierwszych mniejszych od 5000000
>>
>> real 0m1.521s
>> user 0m1.464s
>> sys 0m0.032s
>>
>> $ time jython pierwsze.py
>> Jest 348514 liczb pierwszych mniejszych od 5000000
>>
>> real 0m9.596s
>> user 0m10.441s
>> sys 0m0.256s
>>
>> $ python
>> Python 2.6.4 (r264:75706, Nov 2 2009, 14:38:03)
>> [GCC 4.4.1] on linux2
>>
>> $ jython
>> Jython 2.5.1 (Release_2_5_1:6813, Sep 26 2009, 13:47:54)
>> [Java HotSpot(TM) Server VM (Sun Microsystems Inc.)] on java1.6.0_16
>
> Doliczyłeś start JVM, i nawet nie rozgrzałeś HotSpota. Takie testowanie
> to o kant dupy potłuc.
>
> Odpaliłem to samo na MacPro zwiększając tylko ilość iteracji i dodałem
> wew. pętlę aby dać szansę się rozgrzać HotSpotowi. Zobacz jak
> przyśpiesza w kolejnych wywołaniach.
>
> [...]
> import time.time
> MAX = 10000000
> for i in range(10):
> t = time.time()
> primes = primes_up_to_sieve_odd(MAX)
> czas = time.time() - t
> print("Jest %d liczb pierwszych mniejszych od %d" % (len(primes),
> MAX), " czas: %s" % czas)
>
> $ python
> Python 2.6.4 (r264:75706, Nov 13 2009, 09:31:24)
> [GCC 4.2.1 (Apple Inc. build 5646)] on darwin
>
>
> $ jython
> Jython 2.5.1+ (trunk:6949, lis 24 2009, 11:11:03)
> [Java HotSpot(TM) 64-Bit Server VM (Apple Inc.)] on java1.6.0_15
>
> $ python prime.py
> ('Jest 664579 liczb pierwszych mniejszych od 10000000', ' czas:
> 2.79573392868')
> ('Jest 664579 liczb pierwszych mniejszych od 10000000', ' czas:
> 2.81609916687')
> ('Jest 664579 liczb pierwszych mniejszych od 10000000', ' czas:
> 2.79001808167')
> ('Jest 664579 liczb pierwszych mniejszych od 10000000', ' czas:
> 2.77355098724')
> ('Jest 664579 liczb pierwszych mniejszych od 10000000', ' czas:
> 2.78277993202')
> ('Jest 664579 liczb pierwszych mniejszych od 10000000', ' czas:
> 2.7743229866')
> ('Jest 664579 liczb pierwszych mniejszych od 10000000', ' czas:
> 2.83567595482')
> ('Jest 664579 liczb pierwszych mniejszych od 10000000', ' czas:
> 2.77783703804')
> ('Jest 664579 liczb pierwszych mniejszych od 10000000', ' czas:
> 2.921875')
> ('Jest 664579 liczb pierwszych mniejszych od 10000000', ' czas:
> 2.79439401627')
>
> $ jython -J-server prime.py
> ('Jest 664579 liczb pierwszych mniejszych od 10000000', ' czas:
> 10.7590000629')
> ('Jest 664579 liczb pierwszych mniejszych od 10000000', ' czas:
> 8.79200005531')
> ('Jest 664579 liczb pierwszych mniejszych od 10000000', ' czas:
> 2.95500016212')
> ('Jest 664579 liczb pierwszych mniejszych od 10000000', ' czas:
> 3.8710000515')
> ('Jest 664579 liczb pierwszych mniejszych od 10000000', ' czas:
> 3.31699991226')
> ('Jest 664579 liczb pierwszych mniejszych od 10000000', ' czas:
> 3.40400004387')
> ('Jest 664579 liczb pierwszych mniejszych od 10000000', ' czas:
> 3.56200003624')
> ('Jest 664579 liczb pierwszych mniejszych od 10000000', ' czas:
> 3.48500013351')
> ('Jest 664579 liczb pierwszych mniejszych od 10000000', ' czas:
> 3.32299995422')
> ('Jest 664579 liczb pierwszych mniejszych od 10000000', ' czas:
> 3.4279999733')
>
> CPython jest w tym mikrobenchmarku szybszy, ale niedużo. Pewnie w innych
> będzie szybszy. A to jeszcze nie wszystko na co stać Jythona! Po
> pierwsze, nie jest jeszcze porządnie zoptymalizowany, to wciąż wersja
> rozwojowa a nie stabilna. Po drugie, JDK7 powinno dać mu dodatkowego
> kopa, bo wprowadza optymalizacje dla języków dynamicznych.
>
--
JZ http://blog.zabiello.com
Technical Details
Message-ID:
<op.u3wdfrm6eaqjf2@jzabielloosx.dubtilt.local>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mailReferences:
<h83in7$rl3$1@inews.gazeta.pl> <op.u3ngjef4eaqjf2@jzabielloosx.dubtilt.local> <ebb48508-1e60-47a3-87ab-8b4ccebeeba0@a32g2000yqm.googlegroups.com> <op.u3nkjowaeaqjf2@jzabielloosx.dubtilt.local> <17047610-9db9-47fc-9d8f-c476d2009b37@s15g2000yqs.googlegroups.com> <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>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mail From: "Jaroslaw Zabiello" <usenet@onet.eu> Newsgroups: pl.comp.lang.python Subject: Re: Wydajność jythona (było Re: python vs php - potrzebne argumenty) Date: Tue, 24 Nov 2009 11:41:41 -0000 Organization: http://onet.pl Lines: 202 Message-ID: <op.u3wdfrm6eaqjf2@jzabielloosx.dubtilt.local> References: <h83in7$rl3$1@inews.gazeta.pl> <op.u3ngjef4eaqjf2@jzabielloosx.dubtilt.local> <ebb48508-1e60-47a3-87ab-8b4ccebeeba0@a32g2000yqm.googlegroups.com> <op.u3nkjowaeaqjf2@jzabielloosx.dubtilt.local> <17047610-9db9-47fc-9d8f-c476d2009b37@s15g2000yqs.googlegroups.com> <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> NNTP-Posting-Host: 89.167.220.4 Mime-Version: 1.0 X-Trace: news.onet.pl 1259062906 2995 89.167.220.4 (24 Nov 2009 11:41:46 GMT) X-Complaints-To: niusy@onet.pl NNTP-Posting-Date: Tue, 24 Nov 2009 11:41:46 +0000 (UTC) To: "Jaroslaw Zabiello" <usenet@onet.eu> User-Agent: Opera Mail/10.10 (MacIntel) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit