Rechenleistung PowerBook

B

Badener

hallo,

kann es sein, daß das pb doch nicht sooo schnell ist, wie hier im forum und von apple immer propagiert?

die alten ägypter hatten eine eigene methode, wie man multipliziert. die habe ich mal in einem c++-programm umgesetzt (ich weiß, hätte man auch eleganter proggen können, aber darauf kommt es jetzt nicht an).

hier das listing:

/* Dieses Programm vergleicht die Ergebnisse
zwischen der Berechnung eines Produktes als Multipiliaton
und der "aegyptischen Methode" */
#include <iostream>
using namespace std;
int egypt (unsigned long int zahl1, unsigned long int zahl2)
{
unsigned long int summe = 0;
int check = 0;
check = zahl1%2;
if (check != 0)
summe += zahl2;
while (zahl1 != 1)
{
zahl1 = zahl1/2;
zahl2 = zahl2*2;
check = zahl1%2;
if (check != 0)
summe += zahl2;
}
return summe;
}
int main()
{
cout << "Bis zu welcher Zahl soll berechnet werden: " << endl;
int endstelle = 0;
cin >> endstelle;
int b = 1;
int fehlercount = 0;
while ( b != endstelle+1)
{
for (int a = 1; a != endstelle+1; ++a)
{
if ((a*b)!=(egypt(a,b)))
{
cout << "!!!!!!!!!! F E H L E R !!!!!!!!!!" << endl;
cout << "Die Berechnung funktioniert nicht fuer die Zahlen:" << endl;
cout << "a = " << a << " und b = " << b << endl;
cout << "Produkt: " << a*b << endl;
cout << "aegyptische Methode: " << egypt(a,b) << endl << endl;
++fehlercount;
}
}
cout << "Berechnung fuer b = " << b << " / " << endstelle << " abgeschlossen" << endl;
++b;
}
if (fehlercount == 0)
cout << endl << "Keine Fehler gefunden.... Methode stimmt!" << endl;
return 0;
}


man sieht, hier kommt es auf reine rechnerleistung an.
ich habe es mal auf 3 rechnern laufen lassen und als endwert 50.000 eingegeben:

samsung p30, 1,5 GHz Centrino, 512 MB RAM
--> 07:35 min

dell inspiron 8200, 1,8 GHz P4-M, 512 MB RAM
--> 11:39 min

apple powerbook 12", 1,33 GHz PowerPC, 1,25 GB RAM
--> 19:10 min

das sind schon fette unterschiede. wie erklärt man die am besten? hier im forum heißt es doch immer, die apples wären so schnell und würden aktuellen pentiums locker mithalten können.

ich rede jetzt nicht von workflow - einfach brutale rechnerleistung.

danke schon mal im voraus
 
Zuletzt bearbeitet von einem Moderator:
ich geh mein ibook morgen umtauschen!!!


- hey! war nurn scherz ^^
 
das sind eindeutig cache effekte. der centrino hat einen riesigen l2 cache.
 
was bewirken l1 l2 und l3 caches???
 
Ich habe hier mal ein paar Daten aus einem anderen Thread geklaut, die aus Seti@home stammen:

P4 2,6 Ghz HT:
--- - 2004-10-18 00:33:53 - Number of CPUs: 2
--- - 2004-10-18 00:33:53 - 1163 double precision MIPS (Whetstone) per CPU
--- - 2004-10-18 00:33:53 - 1718 integer MIPS (Dhrystone) per CPU
--- - 2004-10-18 00:33:53 - Finished CPU benchmarks
--- - 2004-10-18 00:33:54 - Resuming computation and network activity

iBook G4 933 Mhz:

2004-10-18 00:33:26 [---] Number of CPUs: 1
2004-10-18 00:33:26 [---] 448 double precision MIPS (Whetstone) per CPU
2004-10-18 00:33:26 [---] 1344 integer MIPS (Dhrystone) per CPU
2004-10-18 00:33:26 [---] Finished CPU benchmarks
2004-10-18 00:33:28 [---] Resuming computation and network activity

Wenn man die Daten auf 1 MHz runter rechnet, sieht man, dass sich die beiden Systeme bei den double precision MIPS nicht viel geben. Aber bei den integer MIPS ist der G4 doppelt so schnell, wie der P4.

Wie Du auf die Zeiten kommst, weiß ich nicht. Es ist ja auch immer abhängig davon, was auf dem System läuft. ich habe die Zeit für 10000 mal mit dem UNIX-Komando time auf meinem PB berrechnen lassen:

Code:
real    1m33.386s
user    0m42.130s
sys     0m1.160s

Durch den Ersatz von long int durch int ließ sich die Zeit nachmal ein bissl verkürzen:

Code:
real    1m28.718s
user    0m41.970s
sys     0m1.290s
 
Nun, kurz gesagt, sie ersparen es der CPU wegen jedem kleinen Stack zurück in den langsamen Hauptspeicher zu wandern. Die Caches liegen auf der CPU selbst, bzw. sehr dicht dabei und sind extrem schnell, da sie mit der internen CPU Taktfrequenz gespeist werden und nicht durch den langsamen Frontside Bus müssen. Der L1 Cache hält normalerweise einfach Befehle und Register. Der L2 Cache kann Daten aufnehmen und in dem Programm hier werden viele Werte ja einfach nur aufeinander summiert, wenn ich das richtig sehe (bin kein Programmierer). Und wenn die Werte nicht mehr in den Cache passen, dann muss die CPU in den Hauptspeicher wandern um die Daten dorthin auszulagern, bzw. zurückzuholen. Und gerade da macht sich ein grosser L2 Cache bezahlt.
Bei anderen Applikationen, die den Cache aufgrund ihrer heterogenen Datenstruktur nicht in dem Masse nutzen können ist der Unterschied lange nicht so enorm. Beispielsweise bei bestimmten unvorhersehbaren Datenbankabfragen. Hier muss der Cache schon wirklich riesig sein um zu wirken. Aber dann ist eigentlich mehr ein Zwischenpuffer für die Daten, die auf dem Weg in den Hauptspeicher sind (typischer L3 Cache).
 
So, ich habe einen hauptverantwortlichen Punkt gefunden:

Die Konsolenausgabe

Ich habe Dein Programm wieder mit 10000 mal auf einer Linux-Maschine laufen lassen, mit folgendem Ergebnis:

Code:
real    0m18.613s
user    0m16.138s
sys     0m0.124s

Nachdem ich die Ausgabe auf die Konsole auskommentiert habe, kam es zu folgenden Werten:

Code:
real    0m15.813s
user    0m13.905s
sys     0m0.001s

Beim Mac stellte sich diese Änderung wie folgt da:

Code:
real    1m28.718s  => 0m36.260s
user    0m41.970s  => 0m31.160s
sys     0m1.290s   => 0m0.260s

Damit lief das gute Stück mehr als doppelt so schnell. Ich vermute mal, dass die Umsetzung der Konsole in der Aqua-Oberfläche wie viele Oberflächenbestandteile ausgebremst wird.

Wenn wir jetzt von einem linearen Verfahren ausgehen (was der Algorithmus ja nicht ist) kommst du auf die Zeiten der schnelleren Windows-Maschine.
 
Zuletzt bearbeitet:
Nachtrag

Auf meinem PB (siehe Sig.) unter normaler Systemlast bekomme ich ohne Ausgabe bei einem Wert von 50000 folgende Zeiten:

Code:
real    18m0.986s
user    14m58.040s
sys     0m7.130s
 
wie kommt ihr denn an die werte und was sagen sie aus?
real - alles?
user - vom benutzer beansprucht?
system - vom system beansprucht?

ich habe es nämlich auf die "klassische" weise mit einer stoppuhr in der hand gemacht :D :D
 
real = Was Du mit der Stoppuhr gemessen hast
user = effektive Rechenzeit durch das Programm
sys = effektive Rechnezeit, die vom System benötigt wird (System-Calls etc.)
 
Natürlich sind die Macintosh Rechner den x86 in punkto reiner Rechenleistung unterlegen. Das sind sie schon seit Intel den Pentium III gebracht hat. Wunder dich also nicht darüber, wenn es um brutale Rechenleistung geht sind die G4 Prozessoren nicht grade das gelbe vom Ei. Gründe sind das langsame Speicherinterface (trotz DDR-SDRAM nur ein 133/166 MHz Speichercontroller) sowie der niedrige Takt. Der G5 hat da ein wenig aufgeholt aber ist immer noch nicht auf Höhe eines Athlon64 oder Pentium 4.

Der G4 kann allerdings sehr flott werden wenn die Software AltiVec-optimiert wird. Dank Altivec können bis zu vier 32-bit ALU Operationen oder zwei 64-bit FPU Operationen (sehr ungenau, die x86 FPU arbeitet seit dem 80386 mit 80-bit ebenso wie die G3/G4/G5 FPU) oder eine 128-bit FPU Operation zusätzlich pro Takt durchgeführt werden. Damit kann ein G4 verdammt viel Boden gut machen.
 
Ich denke auch, wenn man das ganze auf reine Rechenleistung herunterholt (Ausgabe und GUI mal wegrechnet) und das Programm optimiert compilieren läßt, werden sich die Architekturen nicht mehr zwingend viel geben.

Und das der G4 ein Griff ins Klo war wissen wir ja. habe sogar mal eine Aussage eines IBM-Menschen gehört, der den G3 aufgebohrt hat, dass der G4 eigentlich schlechter als der G3 ist.
 
zum glück sind wieder bei IBM. Ich habe da ein besseres Gefühl.
 
Der G4 win Griff ins Klo ? Der G3 besser ?
Der G3 hat erstmal kein Altivec, d.h. bei Programmen wie z.B. Photoshop loost er total ab.
Der G5 hat seine Altivec Einheit schlechter angebunden als der G4, d.h. ein G4 ist z.T. schneller als ein G5. (Dazu gab es einen Artikel bei ArsTechnica)

Also schlecht ist der G4 wirklich nicht !

Aber mal so nebenbei: braucht Ihr immer die Top Rechenleistung ?
War das besondere an Apple nicht das Zusammenspiel zwischen Hard- UND Software ?
 
Wie gesagt, die Sache G3 vs. G4 habe ich so gelesen und gehört, unter anderem von diesem IBM-Typen, der den G3 aufgebohrt hat (auf über 2 GHz glaube ich). Beurteilen kann ich die Sache natürlich nicht, denn ich habe keine Ahnung vom Prozessorbau.

Mir ist auch furchtbar egal, wie gut ein G-prozessor gegenüber irgendwelchen x86 Prozessoren abschneidet. Ich bin zufrieden mit dem Komplettpaket und darum habe ich zu Apple gewechselt.

Sinn und Zweck meines Versuches mit dem Code oben war, Badener zu zeigen, dass man so etwas nicht mit der Stoppuhr bestimmen kann, sondern bessere Verfahren einsetzen muß (wie das time Kommando) und gleiche Bedingungen schaffen muß.

Und das Ergebnis, das vermutlich jeder nachvollziehen kann, zeigt ja, das der Unterschied gar nicht so gewaltig ist, wie von Badener angenohmen.
 
Ein Programm muß speziell für die Altivec-Einheit optimiert sein, wenn das was bringen soll. Im übrigen habe ich persönlich keinen Zweifel daran, daß mein PB von der CPU-Leistung um einiges langsamer ist als die neuesten Mobile-CPUs von Intel.

Das macht aber nichts, solange das PB nicht als Desktopersatz dienen soll. Ich brauchte etwas Hübsches, Kleines, Leises für's Wohnzimmer, das von meiner Frau dort geduldet wird. Und die Rechenleistung reicht für Office und Web/Mail etc. allemal aus.
Wenn ich mehr Leistung brauchen sollte, greife ich zum PowerMac oder ggf. zum x86-notebook mit Desktop-CPU und aktuellem 3D-Grafikchip. So ein notebook ist allerdings auch wesentlich größer, heißer und lauter.
 
@Agmemon:

1. danke für den tip - das mit dem time-kommando kannte ich nicht - ich saß mit der stoppuhr da :D (kennst du eine gute, möglichst deutschsprachiged quelle, mit der man sich mit der konsole vertraut machen kann. scheint ja doch ziemlich leistungsfähig zu sein. danke)
2. ich bin sowas von suuuupppppeeeerrr-zufrieden mit meinem pb, es stinkt mir allerdings gewaltig, daß ich mir nicht schon viel früher einen apfel gekauft habe... :D:D:D:D
3. habe mal mit dem time-befehl gespielt.
wenn ich den rechner auf minimale leistung (batteriebetrieb) gestellt habe komme ich (bis 5000) auf:
real 0m17.158s
user 0m12.260s
sys 0m0.100s

stelle ich um auf maximale leistung (so war es bei dem versuch mit der stoppuhr :D), komme ich (bis 5000) auf:
real 0m10.810s
user 0m6.160s
sys 0m0.010s

fett - fett - die unterschiede sind ja echt gewaltig.

heute komme ich nicht mehr dazu - aber wenn es interessiert, werde ich es morgen nochmal mit dem time-befehl und mit einstellung "volle leistung" auf dem samsung und dem dell vergleichen und die ergebnisse hier reinstellen.
 
p.s.: der samsung gehört meiner freundin - die quält sich mit dem time-befehl rum und stellt ärgert sich gerade, daß ihr der virenscanner 30% der leistung klaut.

ROFL - ein grund mehr, mich über meinen mac zu freuen..... da is nix mit virenscanner :banana:
 
Und nimm die cout-Befehle für die Zwischenergebnisse raus. Du wirst sehen, auf dem Mac macht das einen riesen Unterschied. Der Unterschied auf dem Linux-Server, auf dem ich das getestet habe, wr da nicht so groß.
 
ulenz schrieb:
Das macht aber nichts, solange das PB nicht als Desktopersatz dienen soll. Ich brauchte etwas Hübsches, Kleines, Leises für's Wohnzimmer, das von meiner Frau dort geduldet wird. Und die Rechenleistung reicht für Office und Web/Mail etc. allemal aus.

Aber hallo, ich nutze mein PB als Desktopersatz und es reicht wohl für mehr als Office und Web. Meinen alten PM G4 Dual 500 steckt es 10 mal in die Tasche, was die Performance angeht, und der war schon ein schneller Rechner.
 
Zurück
Oben Unten