Lust auf einen kleinen Rechner-Test (Java)?
-
@robot: Hol Dir mal ein aktuelles JDK und vergleiche Deine Java 5 Ergebnisse damit. Die behaupten doch tatsächlich schon wieder, dass das aktuelle Java 6 teilweise schneller als Java 5 sein soll:
http://java.sun.com/performance/reference/whitepapers/6_performance.html
-
Unglaublich. Die Ergebnisse von Java 1.6.0_03 im Vergleich zu Java 1.5.0 sind tatsächlich deutlich besser:
Auf Intel Pentium M 1500 MHz
Sum32 Test... 73% schneller Sum64 Test... 26% schneller Sum64 Test using 10 Threads... 37% schneller Sum64 Double Test... 54% schneller RAM Test... 6% schneller Prim Test (SOE)... 24% schneller
-
robot schrieb:
Das mit dem 0 ms ist mir unter Java auch noch nicht passiert. Ich vermute, dass die aktuelle Version von javac das kaputt optimiert, weil er merkt, dass das Ergebnis (sum) nicht weiter verwertet wird. Dass er so schlau ist und die Summenformel sum = (max+1)*max/2 anwendet kann ich mir noch nicht vorstellen.
Ich hab das Ergebnis mal einer Membervariablen zugewiesen, so dass er eigentlich zum Ausführen der Schleife gezwungen sein müsste. Kannst Dus evtl. nochmal testen? (siehe erstes Posting)
21:16:33 mastercpp@chi ~ % javac -O JBench.java 21:17:37 mastercpp@chi ~ % java JBench JBench V 0.022 Test loops: 1 Sum32 Test... best time: 1207 ms Sum64 Test... best time: 3063 ms Sum64 Test using 10 Threads... best time: 1918 ms Sum64 Double Test... best time: 7770 ms RAM Test... best time: 1946 ms Prim Test (SOE)... best time: 4942 ms21:18:08 mastercpp@chi ~ % gcj -O3 --main=JBench JBench.java 21:19:46 mastercpp@chi ~ % ./a.out JBench V 0.022 Test loops: 1 Sum32 Test... best time: 1905 ms Sum64 Test... best time: 0 ms Sum64 Test using 10 Threads... best time: 865 ms Sum64 Double Test... best time: 2615 ms RAM Test... best time: 2082 ms Prim Test (SOE)... best time: 6099 msThreading und das Rechnen mit Doubles scheint in der VM nicht ganz so effizient zu sein. Bei Integern ist die VM hingegen schneller.
-
mastercpp schrieb:
21:16:33 mastercpp@chi ~ % javac -O JBench.java 21:17:37 mastercpp@chi ~ % java JBench JBench V 0.022 Test loops: 1...
Ups, sehe grade, dass Test loops ausversehen auf 1 gesetzt war. Deswegen wahrscheinlich die schlechten/uneinheitlichen Ergebnisse.
Warum der gcj beim Sum64 Test immer noch 0 ms wieder gibt weiß ich nicht. Wahrscheinlich irgendeine Optimierung (so dass er die Schleife nicht wirklich ausführt), die aber dann eigentlich acuh beim Sum32 Test ziehen müsste. Aber der gcj ist ja eh mit Vorsicht zu genießen, wie ich laß.