java vs c++ vs c# benchmark

Fórumok

Adott a kovetkezo problema :) ( nem sok ertelme van, tudom )

int f;
int pf;
int ppf;

for ( int i = 1; i < 100000000; i++) {
f = 1;
pf = 1;
ppf = 0;

while ( f < 1000000000 ) {
ppf=pf;
pf=f;
f=pf+ppf;
}
}

a kovetkezo futasi eredmenyek szulettek:

java -client ( 1.5.0 )
0m10.749s

java -server ( 1.5.0 )
0m7.740s

g++ ( 1.5.0 ) ( -O3 -march=nocona -mtune=nocona -pipe -fomit-frame-pointer )
0m5.152s

C# ( Ablakos vilag 2005-os fordito )
~21s

minden linuxon futott, kiveve a C#

en megdobbentem hogy a java alig lassabb mint a c++. a C# meg jol lemaradt :)
lehet vmi komplexebb tesztet is osszehozok majd.

Hozzászólások

Ilyen egyszerű dolgokon nagyon gyors, de ha van időd, megpróbálhatnál valami bonyolultabb objektumokkal, metódushívásokkal operáló dolgot is. Meg mondjuk string-műveleteket stringek és különböző adat-típusok közötti átalakításokat. Olyasmiket, ami egy átlag programban van.

Üdv!

Vigyázni kell az ilyen egyszerű ciklusokkal. Annak idején Watcom C-ben csináltam ilyet (tudja valaki mi az? Doom 1-2-őt abban írták).
Megdöbbentem h 1 nagyságrenddel gyorsabb mint amit ASM-ben írtam. :)
Aztán elemeztem a dolgot és kiderült: optimalizálta a watcom fordítója a dolgot.

Fktoriális számítást szoktam tesztelni, de ez még túl egyszerű. Viszont csináltam 1 3d-s progit, saját simple 3d motor :) (ez túlzás). Szökőkutat forgatok benne ahol 5000 vízcsepp hull alá.. :)
Így legalább a grafikus és számolós teljesítményt lemérem..
Talán előkeresem és összehasonlítom a java-t és a C-t (C# nemtom megcsináltam-e) Ha érdekel valakit bemásolhatom a forrást..

Heh...
Én még anno, amikor volt Hercules kártya, írtam ASM-ben saját grafikus könyvtárat.
Aztán ugyan azt megírtam JPI Modula-2 ben is.
Igaz, hogy a (disassemblált) M2 kód jóval nagyobb lett, de néhány százalékkal gyorsabb is, mint az ASM kódom.
Az ASM forrás persze szép volt a M2 lefordított kódja meg, hááát kicsit ocsmány, de akkor is meglepődtem.

Vigyázz! Sztem az MS Visual Studio license-ében tutti benne van valahol, hogy nem tehetsz közzé benchmark adatokat az MS beleegyezése nélkül.
Még valaki kihozza, hogy szart csinálnak ...

Megcsináltam Win XP alatt .NET 2.0-val és Mono 2.0-val (1.1.13.2) is, az eredmény (10 futtatás átlagában): .NET: 6,75s, Mono: 6,78s (Athlon XP 3200+)

Én kipróbáltam Python nyelven:
---


for i in range(100000000):
    f = 1
    pf = 1
    ppf = 0
    while (f<1000000000):
        ppf = pf
        pf = f
        f = pf+ppf

---
Eredmény:
top-al figyeltem, felzabált 500 mega ramot + 300 mega swap-et, amjd közölte a top a notebookon 800 megánál hogy "Process out of memory" majd lelőtte... :(, nem jutott a végére, esély sem volt a time mérésére.
ennyi.

$ make foo
cc foo.c -o foo
$ time ./foo
real 0m43.866s

$ g++ foo.c -o foo
$ time ./foo
real 0m46.451s

no ez viszont jellemzo, u.az a kod c++szal lassabb, mint cvel ;-)

C# ( Ablakos vilag 2005-os fordito )
~21s

minden linuxon futott, kiveve a C#

en megdobbentem hogy a java alig lassabb mint a c++. a C# meg jol lemaradt :)

Próbáld meg a "debug"-ot kikapcsolni.
Nekem "debug" módban ~19s nélküle viszont ~3 (2.0)

Ez tényleg elég egyszerű teszt. Én csináltam Java vs C# és Java vs C++ összehasonlítást is. Utóbbit javaslom tanulmányozásra:

http://sourceforge.net/projects/javavscpp

A konklúzió egyébként az, hogy sebességbeli okok miatt nem érdemes egyiket sem preferálni, közel 10%-os határon belül vannak egymáshoz képest.A C# és a Java között az a nagy különbség, hogy az előbbi az indításkor végez fordítást a kódon, utóbbi meg menet közben optimalizál, de végső soron elég jól csinálja mindkettő. A Java optimalizáció néha meglepően gyors tud lenni, főleg rekurzív függvényhívásokkor, ilyenkor bőven a C++ elé tud menni. Memória-használatot (mint sebességet) is érdemes összehasonlítani, méghozzá úgy, hogy a C++ memóriafoglaláskor nullázod a memóriaterületet (ugye almát almával).