Rechenleistung PowerBook

Dieses Thema im Forum "MacBook" wurde erstellt von Badener, 05.11.2004.

  1. Badener

    Badener Thread Starter Gast

    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 von einem Moderator bearbeitet: 05.11.2004
  2. MacDaniels

    MacDaniels Banned

    Beiträge:
    545
    Zustimmungen:
    0
    MacUser seit:
    22.04.2004
    ich geh mein ibook morgen umtauschen!!!


    - hey! war nurn scherz ^^
     
  3. sgmelin

    sgmelin MacUser Mitglied

    Beiträge:
    3.714
    Zustimmungen:
    40
    MacUser seit:
    16.05.2004
    das sind eindeutig cache effekte. der centrino hat einen riesigen l2 cache.
     
  4. MacDaniels

    MacDaniels Banned

    Beiträge:
    545
    Zustimmungen:
    0
    MacUser seit:
    22.04.2004
    was bewirken l1 l2 und l3 caches???
     
  5. Agmemon

    Agmemon MacUser Mitglied

    Beiträge:
    172
    Zustimmungen:
    0
    MacUser seit:
    05.11.2003
    Ich habe hier mal ein paar Daten aus einem anderen Thread geklaut, die aus Seti@home stammen:

    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
    
     
  6. sgmelin

    sgmelin MacUser Mitglied

    Beiträge:
    3.714
    Zustimmungen:
    40
    MacUser seit:
    16.05.2004
    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).
     
  7. Agmemon

    Agmemon MacUser Mitglied

    Beiträge:
    172
    Zustimmungen:
    0
    MacUser seit:
    05.11.2003
    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: 06.11.2004
  8. Agmemon

    Agmemon MacUser Mitglied

    Beiträge:
    172
    Zustimmungen:
    0
    MacUser seit:
    05.11.2003
    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
    
     
  9. Badener

    Badener Thread Starter Gast

    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
     
  10. Agmemon

    Agmemon MacUser Mitglied

    Beiträge:
    172
    Zustimmungen:
    0
    MacUser seit:
    05.11.2003
    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.)
     
Die Seite wird geladen...