IronPython

Scarecrow의 이미지

C:\Python25\Lib\test>c:\jython2.2rc2\jython.bat --version
Jython 2.2rc2 on java
 
C:\Python25\Lib\test>java -version
java version "1.6.0_02"
Java(TM) SE Runtime Environment (build 1.6.0_02-b06)
Java HotSpot(TM) Client VM (build 1.6.0_02-b06, mixed mode, sharing)
 
C:\Python25\Lib\test>..\..\python.exe -V
Python 2.5.1
 
C:\Python25\Lib\test>c:\IronPython\ipy -V
IronPython 1.1 (1.1) on .NET 2.0.50727.832

C:\Python25\Lib\test>c:\jython2.2rc2\jython.bat pystone.py
Pystone(1.1) time for 50000 passes = 2.671
This machine benchmarks at 18719.6 pystones/second
 
C:\Python25\Lib\test>..\..\python.exe pystone.py
Pystone(1.1) time for 50000 passes = 1.41669
This machine benchmarks at 35293.5 pystones/second
 
C:\Python25\Lib\test>c:\IronPython\ipy.exe pystone.py
Pystone(1.1) time for 50000 passes = 0.908689
This machine benchmarks at 55024.3 pystones/second

Jython과 IronPython을 비교해 볼겸
Jython, CPython, IronPython으로 각각 pystone을 돌려봤는데
IronPython의 pystone값이 매우 참 하네요. @.@

내용추가:

C:\Python25\Lib\test>mono --version
Mono JIT compiler version 1.2.4 (tarball)
Copyright (C) 2002-2007 Novell, Inc and Contributors. <a href="http://www.mono-project.com" rel="nofollow">www.mono-project.com</a>
        TLS:           normal
        GC:            Included Boehm (with typed GC)
        SIGSEGV:       normal
        Architecture:  x86
        Disabled:      none
 
C:\Python25\Lib\test>mono c:\IronPython\ipy.exe pystone.py
Pystone(1.1) time for 50000 passes = 1.265
This machine benchmarks at 39525.7 pystones/second

1줄요약 : IronPython on .NET >> IronPython on Mono > CPython >> Jython on Java

feanor의 이미지

Java Server VM으로 실행한 결과도 올려주셔야 공정할 것 같습니다.

serialx의 이미지

왜 서버로 실행해야 공정한지요. 파이썬이 서버쪽에서만 돌아가는 그건류의 물건도 아니거니와, 어차피 비등비등할것 같습니다.

심심해서 직접 테스트 해봤습니다. :)

serialx@daybreakin:/usr/lib/python2.5/test$ python2.5 -V
Python 2.5
serialx@daybreakin:/usr/lib/python2.5/test$ python2.5 pystone.py
Pystone(1.1) time for 50000 passes = 0.95
This machine benchmarks at 52631.6 pystones/second
 
serialx@daybreakin:/usr/lib/python2.5/test$ jython --version
Jython 2.1 on java (JIT: null)
serialx@daybreakin:/usr/lib/python2.5/test$ java -version
java version "1.6.0"
Java(TM) SE Runtime Environment (build 1.6.0-b105)
Java HotSpot(TM) 64-Bit Server VM (build 1.6.0-b105, mixed mode)
serialx@daybreakin:/usr/lib/python2.5/test$ jython pystone.py
Pystone(1.1) time for 50000 passes = 4.075
This machine benchmarks at 12269.9 pystones/second

박살났군요.

핫스팟 좀 더 잘 동작하라고(?) 1000000 패스로 돌려봤습니다.

serialx@daybreakin:/usr/lib/python2.5/test$ python pystone.py 1000000
Pystone(1.1) time for 1000000 passes = 18.83
This machine benchmarks at 53106.7 pystones/second
 
serialx@daybreakin:/usr/lib/python2.5/test$ jython pystone.py 1000000
Pystone(1.1) time for 1000000 passes = 17.978
This machine benchmarks at 55623.5 pystones/second

오. 앞섰네요.

역시 런타임 최적화 대단하군요. -_-;

---
Captue the one shot in your life!

feanor의 이미지

"어차피 비등비등할것 같습니다."

그렇지 않기 때문에 요청한 것입니다. HotSpot Client VM과 HotSpot Server VM은 성능 차이가 큽니다.

Scarecrow의 이미지

공연한걸 올렸다가 Java EE까지 설치해 보는군요.
윈도용은 Java SE에 server vm이 없어요.
Java EE는 깔아보니 있더군요. -_-

벤치 1: Jython on HotSpot Server VM
결과 : IronPython > CPython > Jython

C:\Python25\Lib\test>c:\jython2.2rc2\jython.bat pystone.py
Pystone(1.1) time for 50000 passes = 3.109
This machine benchmarks at 16082.3 pystones/second
 
C:\Python25\Lib\test>..\..\python.exe pystone.py
Pystone(1.1) time for 50000 passes = 1.35855
This machine benchmarks at 36804.1 pystones/second
 
C:\Python25\Lib\test>c:\IronPython\ipy.exe pystone.py
Pystone(1.1) time for 50000 passes = 0.879187
This machine benchmarks at 56870.7 pystones/second

벤치 2: 1000000 pystones
결과 : IronPython > Jython > CPython

C:\Python25\Lib\test>c:\jython2.2rc2\jython.bat pystone.py 1000000
Pystone(1.1) time for 1000000 passes = 19.439
This machine benchmarks at 51443 pystones/second
 
C:\Python25\Lib\test>..\..\python.exe pystone.py 1000000
Pystone(1.1) time for 1000000 passes = 27.3522
This machine benchmarks at 36560.1 pystones/second
 
C:\Python25\Lib\test>c:\IronPython\ipy.exe pystone.py 1000000
Pystone(1.1) time for 1000000 passes = 15.2835
This machine benchmarks at 65429.9 pystones/second

참고: Jython on HotSpot Client VM

C:\Python25\Lib\test>c:\jython2.2rc2\jython.bat pystone.py
Pystone(1.1) time for 50000 passes = 2.72
This machine benchmarks at 18382.4 pystones/second
 
C:\Python25\Lib\test>c:\jython2.2rc2\jython.bat pystone.py 1000000
Pystone(1.1) time for 1000000 passes = 48.595
This machine benchmarks at 20578.2 pystones/second
나는오리의 이미지

새벽에 찬물을 끼언는 소리지만...
이 글타래에 글쓰신분들도 알고계시듯이
언어의 속도비교는 아무 쓸데없는것이지요.

7339989b62a014c4ce6e31b3540bc7b5f06455024f22753f6235c935e8e5의 이미지

언어의 속도 비교가 아니라 언어 구현 간의 속도 비교이므로 의미가 있는 것 같은데요. ;)