Integer-Performance

Enteroctopus

Ensign
Registriert
Okt. 2011
Beiträge
212
Hallo zusammen,
ich habe mir vor ca. 2 Jahren die mühe geamcht und ein kleines Benchmarktool für Integer-Berechnnungen geschrieben.

Zum damaligen Zeitpunkt hatte ich noch einen Phenom II 920 (AM2+) sowie einen Athlon 64 X2.
Ich wollte herausfinden wie gut der damals neue Phenom II skaliert. Dabei stellte ich erstaunliches fest und würde von euch nun gerne wissen ob das ergebniss Reproduzierbar ist.
In meinem Tool lässt sich einstellen wieviele Threads zur Berechnung herbeigezogen werden.
Der Athlon X2 skallierte schon sehr gut mit der anzahl der Threads, doch jetzt kommts: Der Phenom II war bereits bei einem Thread weit scheller als der Athlon und skallierte kaum mit der anzahl der Threads.
Es kam mir so vor als ob der Phenom II bereits bei einem Thread alle 4 Integereinheiten nutzt.

Könnt ihr das bestätigen?

Da ich vor kurzem auf ein i7-2600k umgestiegen bin hat mich natürlich intererressiert wie dieser Skalliert. Und siehe da, er skalliert mit der Anzahl an Threads.

Was mich besonders interressieren würde ist, wie die neuen Bulldozer bei meinem Benchmark abschneiden. Immerhin haben BD's bis zu 8 vollwertige Integereinheiten.

Ich würde mich freuen wenn ihr den Benchmark mal durchlaufen lasst (dauert nur 10 Sek.) und es natürlich auch mit mehreren Thread veruscht und das ergebniss hier Postet.

Das Programm ist in Java geschireben, ihr braucht also eine JVM.

Das Proggi findet ihr hier.
http://www.flaming-bytes.de/fileadmin/user_upload/GeneralBench.jar


Schonmal vielen dank für Eure Rückmeldungen.
 
wenn ich nachher daheim bin lass ichs mal auf meinem FX laufen ;)
- kann dann gleich noch nen Llano mittesten :)
 
Das ist eine sehr schöne Auflistung, aber es klärt nicht darüber auf ob oder wie die CPU's mit der anzahl der Threads skallieren.

Außerdem sind die FX von AMD nicht aufgelistet ;)
 
Phenom 2 X4 955 @ 3,2 GHz (jeweils Bestwerte aus je drei Versuchen):
Code:
workers	benchmark 1				benchmark 2				benchmark 3		
1	5984059 Int	997343 Int/Sek	100,00%	5616047 Int	936007 Int/Sek	100,00%	4674756 Int	779126 Int/Sek	100,00%
2	7881430 Int	1313571 Int/Sek	131,71%	7033026 Int	1172171 Int/Sek	125,23%	5411214 Int	901869 Int/Sek	115,75%
3	10532205 Int	1755367 Int/Sek	176,00%	8857351 Int	1476225 Int/Sek	157,72%	6536945 Int	1089490 Int/Sek	139,83%
4	13071277 Int	2178546 Int/Sek	218,43%	10430714 Int	1738452 Int/Sek	185,73%	7306717 Int	1217786 Int/Sek	156,30%
Bei vier Workern wird die CPU aber nur zu ~ 70 % ausgelastet, die Leistung eines ganzen Kerns liegt also brach.
 
Interressant. Sieht so aus als wenn der Phenom doch mit der anzahl an Threads skalliert.

Das nur 70% Auslastung entstehen ist seltsam. Kann aber auch an unsauberer Programmierung liegen. Das war nur ein 5 Minten-Projekt ;)

Auf meinem i7 erreiche ich bei 8 Threads volle Auslastung.
 
Zuletzt bearbeitet:
so siehts bei mir aus:

1 Thread
6419954 | 1069992 Int/Sek
5135367 | 855894 Int/Sek
4133552 | 688925 Int/Sek

2 Thread
9675851 | 1612641 Int/Sek
8240030 | 1373338 Int/Sek
6012634 | 1002105 Int/Sek

3 Thread
10640252 | 1773375 Int/Sek
9759176 | 1626529 Int/Sek
6593276 | 1098879 Int/Sek

4 Thread
12602793 | 2100465 Int/Sek
11451105 | 1908517 Int/Sek
7507933 | 1251322 Int/Sek

5 Threads
15495420 | 2582570 Int/Sek
11451105 | 1908517 Int/Sek
6858215 | 1143035 Int/Sek

6 Threads
17392804 | 2898800 Int/Sek
11451105 | 1908517 Int/Sek
7634070 | 1272345 Int/Sek

7 Threads
18734907 | 3122484 Int/Sek
10690984 | 1781830 Int/Sek
7497462 | 1249577 Int/Sek

8 Threads
20356605 | 3392767 Int/Sek
9698676 | 1616446 Int/Sek
6467175 | 1077862 Int/Sek

zu sagen wäre, dass die Auslastung nie 50% überschritten hat. bei meinem Llano genau dasselbe Problem. Hab Java 1.6.0.25

Ich vermute fast, dass die JVM an den Auslastungsproblemen schuld ist
 
Zuletzt bearbeitet:
Ich glaube ich hab mein Programm unbewusst auf Intelsysteme optimiert. Denn ich erreiche mit meinem 2600k wesentlich höhere Werte.

Hier mal ein kurzer vergleich bei 4 Threads:

Phenom 2 X4 955: 2178546
FX-8120: 2100465
i7-2600k: 8750903


Ich finde das wirklich seltsam, denn nach meinen Informationen ist AMD bei der Integerleistung gleichschnell, wenn nich sogar schneller.
Wärend Intel immer schon bei floats schneller war.

Ich werd mein Proggramm wohl mal ordentlich überarbeiten müssen, denn irgentwas kann da nicht stimmen.
 
Zuletzt bearbeitet:
joa die Integerleistung des FX sollte im allgemeinen theoretisch allen anderen überlegen sein, da er schließlich 8 echte Integereinheiten hat
 
Zum einen stellt sich mir die frage ob Java da der aufgabe schon gewachsen ist eine cpu maximal auszureizen und dann wollt ich noch anmerken dass ich das zwar nicht so ausführlich getestet hab wie andre aber auf meinem i7 kreig ich mit 16 threads zB mehr als mit 8 obwohl ich nur 4 echte cores hab und ich nicht glaube dass die HT threads überhaupt eigene integer units haben sondern nur eigene register
 
Zuletzt bearbeitet:
Das das Programm bei 16 Threads noch Skalliert ist normal, da der Scheduler die Kerne noch etwas besser auslasten kann. Allerdings ist der Performacevorteil beim wechsel von 8 auf 16 Threads nur minimal.

Java ist durchaus eine Ausgewachsene Sprache!

Ja, das ist richtig, eigene Integer-Einheiten hat HT nicht. Allerdings ist bei diesen Benchmarks der Overhead so enorm groß, das sich HT bezahlt macht.
 
Also irgendwie versteh ich den Benchmark nicht.^^

Würd es machen hab einen i5-2410m nicht der schnellst aber warum nicht.

Das heißt ich hab 2 Kerne und 2 HT .

Welche zahl muss ich bei den 3 Felder den Schreiben?
 
Die Zahl ist die anzahl der Threads die benutzt werden. Da deine CPU 4 Threads unterstützt kannst du es mit 1,2,3 oder 4 testen. Mehr würde auch gehen bringt aber kaum noch vorteile.
 
Ok.
Also ich mache bei allen 3 einfach eine 1 hin und soll ich dann die Benchs alle gleichzeitig oder wenn das erste fertig ist das zweite und dann das dritte?
 
Am besten stell bei workers 4 ein und teste die Benchmarks einzelnd. KOmbiniert geht zwar auch, würde aber hier nicht in den Vergleich passen.
 
OK nun ich denke ich habe alles richtig gemacht.Ich weiß ja nicht wie ihr das gemacht habt ich schreibs hier einfach rein oder kann man das Kopieren?

Benchmark 1: Long Count Performance

Worker: 4

Counts : 32335051 | 5389175 Int/Sek

Benchmark 2: Integer Square Performance

Worker: 4

Counts: 22429903 | 3738317 Int/Sek

Benchmark: 3 Integer Division Performance

Worker:4

Counts: 13845154 | 2307525 Int/Sek
 
Nun ich hab noch ein paar durchläufe gemacht und ich denke das sind meine beste Ergebnisse

Mit meinem i5-2410m:

Benchmark 1: Long Count Performance

Worker: 4

Counts: 39880582 | 6646763 Int/Sek

Benchmark 2: Integer Square Performance

Worker: 4

Counts: 23863527 | 3977254 Int/Sek

Benchmark: 3 Integer Division Performance

Worker:4

Counts: 14854193 | 2475698 Int/Sek
 
Zurück
Oben