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.
- 2753 megtekintés
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.
- A hozzászóláshoz be kell jelentkezni
javac -g -O progi.java
ha már gcc -O
- A hozzászóláshoz be kell jelentkezni
Ü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..
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
Meg ne haragudj, de eleg szomoru...
- A hozzászóláshoz be kell jelentkezni
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 ...
- A hozzászóláshoz be kell jelentkezni
Na selli, megfogtunk. Megyek és perellek is be, neked annyi :D:D
- A hozzászóláshoz be kell jelentkezni
jol atirtam ne tudja senki milyen C# forditot hasznaltam :)
- A hozzászóláshoz be kell jelentkezni
Az uj selliMark3d... ROFL
- A hozzászóláshoz be kell jelentkezni
hamarosan jon a selliMark2005 :)
- A hozzászóláshoz be kell jelentkezni
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+)
- A hozzászóláshoz be kell jelentkezni
java-val probaltad?
mondjuk a c#-os reszt nem en csinaltam, mivel nekem nincs win-em, hanem az vki mas, akinek pont ugyan olyan gepe van.
- A hozzászóláshoz be kell jelentkezni
É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.
- A hozzászóláshoz be kell jelentkezni
erdekes, minek kell ehez ennyi memoria?! Meg a java is csak kb 9 megat hasznal.
- A hozzászóláshoz be kell jelentkezni
Egészen véletlenül nem lehetséges, hogy megpróbálta létrehozni az 100000000 elemű listát? (Nem tudok pythonul, de a doksi alapján a range() fizikailag létrehozza a tömböt.)
- A hozzászóláshoz be kell jelentkezni
akkor hozza létre, ha változtatsz benne, ez így konstans tömbnek számít.
hopsz, mégse. az az octave.
- A hozzászóláshoz be kell jelentkezni
$ 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 ;-)
- A hozzászóláshoz be kell jelentkezni
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)
- A hozzászóláshoz be kell jelentkezni
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).
- A hozzászóláshoz be kell jelentkezni
És hogy válaszoljak magamnak: engem érdekelne egy PHP vs Java teljesítményteszt, ha van rá érdeklődő, csináljuk meg...
- A hozzászóláshoz be kell jelentkezni
Hogy én milyen feledékeny vagyok: érdemes lenne a Java vs C++ kódokat portolni C#-ra, és azzal együtt kimérni...
- A hozzászóláshoz be kell jelentkezni