Eigener Mini Benchmark

AW: C++ Sätze in Strings speichern

Mein Prog. ist jetzt nach einigen Hinzufügungen (gibts das:ugly:) fertig.

Habs mal im Anhang hochgeladen.

Wenn ihr auf (1) starten geht wird eine Berechnung durchgeführt und bis 900.000.000 gezählt. Die Variable, mit der bis 9... gezählt wird fließt dabei mit jeder Schleifenrunde mit in die Berechnung ein.
Währenddessen wird die benötigte CPU-Zeit gemessen und daraus dann eine Punktzahl berechnet.

So das wars auch schon grob^^. Dazu gibts nen Highscore der in 2 Dateien gespeichert wird und im Menü ausgelesen werden kann. Falls man einen neuen Highscore "schafft", wird man aufgefordert einen Nickname einzugeben. Der wird dann in der einen Datei gespeichert, die Punkte in der anderen Datei. Außerdem wird die Leistung, die man erreicht bewertet.

Wäre toll, wenn ihr mir eure Punktzahl und euren Prozzessor + Takt geben könnt. :D
Dann kann ich etwa sehen, wie das Prog. skaliert.
Es nutzt übrigens nur 1 Kern, also sind alle gleichberechtigt :)

Ich hab mit nem Phenom II X4 @ 3.6 GHz ca. 26,6 Punkte.

Edit: Die Berechnung kann auf richtig lahmen Systemen ruhig mal ein, zwei Minuten dauern, bei mir ist sie nach ca. 20-30 sec abgeschlossen.


lg KoK
 
Zuletzt bearbeitet:
AW: C++ Sätze in Strings speichern

Hab es mal laufen lassen, nunja mein Q9550 taktet noch nicht mal hoch. Sprich der Bench lief auf 2GHz.

20.3447 Punkte
 
AW: C++ Sätze in Strings speichern

Mhmm okay, aber der Taskmanager zeigt bei dem Prozess 25% Auslastung an oder?
Müsste ja dann eigentlich 1 Kern entsprechen. Das liegt wahrscheinlich dann daran, dass Win7 (nehme ich an hast du oder?) die Last gleichmäßig auf alle Kerne verteilt.
 
AW: C++ Sätze in Strings speichern

Kannst du den Bench auch noch einmal mit Höchstleistung laufen lassen?
Was das hochtakten angeht bin ich im Moment ratlos, eigentlich müsste das Hochtakten ja Hardwareseitig oder vom Betriebssystem geleitet werden, wenn hohe Last anliegt.
Wie oder was ich da umprogrammieren müsste weiß ich nicht, werde mich aber mal auf die Suche begeben.

Edit: Hab noch nen Bug entfernt, bei dem immer wenn das Prog. neu gestartet wird der eigene Highscore mit dem Standard überschrieben wird. Der Standard ist jetzt nur das 1. mal da und es kann der eigene Highscore beim nächsten Prog. start wieder ausgelesen bzw. verwendet werden. Komisch, dass mir das erst jetzt auffiel^^

PS: Bei mir (win7) taktet sich mein Phenom ganz normal hoch, habe deswegen extra mal das OC weggenommen und C&Q aktiviert.
 
Zuletzt bearbeitet:
AW: C++ Sätze in Strings speichern

Habe ich getan, der Punktunterschied liegt im Komma Bereich. Hab es mehrmals laufen lassen aber unterm Strich sind es nicht mehr wie 0.5 Punkte. Die Taktstufe hab ich Softwareseitig auf Ondemand gestellt, dass bedeutet das der Prozessor sich hochtakten soll sobald Last kommt.
 
AW: C++ Sätze in Strings speichern

Okay, seltsam.
Bei mir taktet er sich ganz normal von selbst hoch und bei mir skaliert er wunderbar mit mehr Takt.
Mit OC auf 3.6 GHz habe ich ca. 26.6 und ohne OC, also auf 3.2GHz habe ich 23.4.

Hab übrigens nen Bug entfernt (siehe mein vorheriger Post).
 
AW: C++ Sätze in Strings speichern

Hab es mal mit der neuen Version getestet, aber gleiches Bild. Punktunterschied zwischen den drei Taktstufen liegt bei 0.1 Punkte. Ich werde es morgen mal unter Win7 testen vielleicht verhält es sich dort anders.
 
AW: C++ Sätze in Strings speichern

Okay, danke.
Hier sind mal einige Werte von Freunden unter Win7/Vista:

Phenom II X4 @3,6 GHz | NB @2,4 GHz: ~26.5 P
Phenom II X4 @2,0 GHz | NB @2,4 GHz: ~16.0 P
Core 2 Quad Q9550 @2,8 GHz: ~20.5 P
Core 2 Quad Q6600 @2,4 GHz: ~10.5 P
Core 2 Duo Pxxxx (mobile) @2,4 GHz: ~11.0 P

Was mich stutzig macht ist, dass der Q9550 faste doppelt so gut ist wie der Q6600.
Und das trotz des "nur" 400 MHz höheren Taktes. Würde ja bedeuten, dass mein Prog. einen extremen Nutzen aus dem größeren L2 Cache zieht.
 
AW: C++ Sätze in Strings speichern

Dein Programm weniger. Intel CPUs skalieren allgemein auf größeren Cache besser. Wenn ich jetzt den Wert des Q9550 aus deiner Liste mit meinem Vergleich ist das deckungsgleich. Ich denk mal das wird unter Win7 nicht anders aussehen, werde es aber trotzdem testen.
 
AW: C++ Sätze in Strings speichern

Je nachdem wie die Schleife aussieht kann der Compiler da einiges machen. Da ich jetzt nicht genau weiß, wie du da rechnen lässt, kann ich dir da aber leider keine genauere Erklärung liefern ;)
 
AW: C++ Sätze in Strings speichern

Hier die Rechnung, kompiliert mit Dev C++.

Code:
do
                 {
                                   var++; 
                                   Rechnung = (27.53433*(var/(var*0.01))/6.5+(2*(64*64)))/400.504;
                 
                 } while (var!=900000000);

Wie gesagt, die Rechnung hat keinen Sinn, ich hab sie einfach schnell erfunden. ^^
Werde sie bei Gelegenheit gegen etwas nützliches tauschen.
 
AW: C++ Sätze in Strings speichern

so hab jetz mal dein Programm auf einen E8500 mit Win XP Pro ausgeführt.
Ergebnis 22.2Punkte.
Hier Taktet die CPU auch schön hoch.
 
AW: C++ Sätze in Strings speichern

Okay, also scheint es mit dem Hochtakten wohl an Ubuntu zu liegen.
Allerdings hast du ja auch mit 2 GHz ~20P gehabt, wie ein Kumpel von mir mit 2,8 GHz. Evtl. ist es also auch einfach ein Auslesefehler?!

@ bingo

Ja, aber es bringt anscheinend nur L2 Cache etwas, denn wenn ich den L3Cache-Takt (NB-Takt) meines Phenoms stark untertaktet mit stark übertaktet vergleiche ist so gut wie kein unterschied ersichtlich.
Bei den Core 2´s hängt die Performance in erster Linie (wie man beim Vergleich Q6600 - Q9550 schön sieht) in erster Linie vom L2 ab, erst dann folgt der Takt.
 
AW: C++ Sätze in Strings speichern

Der L3-Cache dient auch eher der Cache-Kohärenz (z. B. bei Mutlicore), ist also kein reiner Daten-Cache wie der Level-2-Cache.
 
Mein Q6600 @3,4 kommt auf ca. 14,5 Punkte.

Kannst du den ganzen Quellcode posten bzw. anhängen ? Würde mich interessieren was der Intel C++ Compiler da noch rausholen kann ;-)
 
Okay, wenn du willst. Poste deine Ergebnisse :)

Hier der Quellcode:


Code:
#include <iostream>
#include <string>
#include <fstream>
#include <windows.h>
#include <ctime>


using namespace std;

string dateiname2 ="HGSZ.z"; // Datei für Pkt 
string dateiname  ="HGSN.n"; // Datei für Name 


int Berechnung ();  //Berechnung Prüfen ob neuer HG
int Lesen (); //Highscore lesen
int Rating (); //CPU Bewerten


int main()
{                 
               int Auswahl;
               
               do
               {
               
               cout << endl;
               cout << "--------------------" << endl; 
               cout << "(1)Starten" << endl; 
               cout << "(2)Highscore einsehen" << endl;
               cout << "(3)Beenden" << endl; 
               
               cin >> Auswahl;
               
               switch (Auswahl) 
               {
                      case (1): 
                      {
                           Berechnung (); 
                      } break; 
                      
                      case (2): 
                      {
                           Lesen (); 
                      } break;
               
                      case (3): 
                      {
                           cout << "Beenden..." << endl; 
                      } break; 
                      
                      default: 
                               cout << "Falsche Eingabe!" << endl; 
               
               }
              } while (Auswahl!=3);
    return 0;                    
}     



//////////////////////////    
int Berechnung ()              //Berechnung und Prüfen ob neuer HG     
{    
                 double var=0; // Variable zum Rechnen
                 double neueZeit=0, alteZeit=0;  // aus neu - alt entsteht die nötige CPUZeit
                 double CPUTICKS; // CPUZeit die für die Berechnung nötig ist
                 double Rechnung=0; // Ergebnis der Rechnung (für Pkt nötig)
                 
                 cout << "Es wird gerechnet..." << endl;
                  
                  
                  
                 alteZeit=clock(); ////////////////////////////////////////////////////////////////
                 //////////////////////////////////////////////////////////////////////////////////      Zeit messen start
                 
                 do
                 {
                                   var++; 
                                   Rechnung = (27.53433*(var/(var*0.01))/6.5+(2*(64*64)))/400.504;
                 
                 } while (var!=900000000);
                 
                 neueZeit=clock(); //////////////////////////////////////////////////////////////////
                 ////////////////////////////////////////////////////////////////////////////////////    Zeit messen ende
                 
                 
                 CPUTICKS = neueZeit - alteZeit; 
                 double Punkte = (Rechnung/CPUTICKS) *20000.5; // Punkte berechnen
                 
                 ////////////////////////////////////////////////////////////////////// neuer HG prüfen + überschreiben oder net
                 
                 ifstream PLesen;  // HG lesen (zum prüfen ob höher)
                 PLesen.open (dateiname2.c_str(), ios_base::in);
     
                 double Highscore; 
                 
                
                 PLesen >> Highscore;
                 
                 PLesen.close();
                 
                 
                 if (Punkte>Highscore)
                 {
                 
                                       ofstream Ausgabe;  // Namen schreiben
                                       ofstream Ausgabe2; // Punkte schreiben
                 
                                       Ausgabe.open(dateiname.c_str(), ios_base::out);
                                       Ausgabe2.open(dateiname2.c_str(), ios_base::out);
                 
                 
                                       cout << endl;
                                       cout << "----------------" << endl;
                                       cout << "Neuer Highscore!" << endl; 
                                       cout << "Punkte: " << Punkte << endl;   
                                       Ausgabe2 << Punkte << endl;  
                                       Rating();
                                       cout << endl;
                    
                                       string Name; // für neuen Namen eingeben
                 
                                       cin.get(); // cin leeren

                                       cout << "Name eingeben!" << endl;
                 
                                       getline(cin,Name);
                 
                                       Ausgabe << Name << endl; 
                                     
                                       Ausgabe.close(); 
                                       Ausgabe2.close(); 
                 
                 }
                
                if (Punkte<Highscore)
                {   
                   
                   cout << endl; 
                   cout << "-----------------------------" << endl;
                   cout << "Leider kein neuer Highscore.." << endl; 
                   cout << "Punkte: " << Punkte << endl;
                   cout << "Highscore: " << Highscore << endl; 
                
                 } 
                   
                   
                   
                
                 
                 return 0; 
}
///////////////////////////


int Lesen () 
{
     ifstream HGLesen; //Namen lesen
     HGLesen.open (dateiname.c_str(), ios_base::in); 
     
     ifstream HGPLesen; //Punkte lesen
     HGPLesen.open (dateiname2.c_str(), ios_base::in);
     
      
     char Name; // für Namen auslesen
     cout << "---------------------" << endl; 
     cout << "Aktueller Highscore: " << endl;
     cout << "---------------------" << endl; 
     cout << endl;
     cout << "Name: "; 
     while(!HGLesen.eof())
     {
            HGLesen.get(Name); 
            cout << Name; 
     }
            HGLesen.close();
     
     cout << endl;
     cout << "Punkte: "; 
     
     
     double Highscore; // für Zahl auslesen
     
     HGPLesen >> Highscore; 
     
     cout << Highscore;  
  
     HGPLesen.close (); 
     
     Rating(); 
//////////////////////////////////////// 
     
    return 0; 
} 

int Rating () // Pkt bzw. CPU bewerten
{
                 ifstream PLesen; 
                 PLesen.open (dateiname2.c_str(), ios_base::in);
     
                 double Highscore; 
                 
                
                 PLesen >> Highscore;
                 
                 PLesen.close();
                 
                 if (Highscore<10)
                 {  
                    cout << endl;
                    cout << "Rating: Schlecht!" << endl;
                    cout << endl;
                 }
                 
                 if (Highscore<15 && Highscore>10)
                 {
                    cout << endl; 
                    cout << "Rating: Mittelmäßig!" << endl; 
                    cout << endl; 
                 }
                 
                 if (Highscore<20 && Highscore>15) 
                 {
                    cout << endl; 
                    cout << "Rating: Gut!" << endl; 
                    cout << endl; 
                 }
                 
                 if (Highscore<25 && Highscore>20) 
                 {
                    cout << endl; 
                    cout << "Rating: Sehr gut!" << endl; 
                    cout << endl; 
                 }
                 
                 if (Highscore<30 && Highscore>25)
                 {
                    cout << endl; 
                    cout << "Rating: Aussergewoehnlich gut!" << endl; 
                    cout << endl; 
                 }
                 
                 if (Highscore>30) 
                 {
                    cout << endl; 
                    cout << "Rating: Fantastisch!" << endl; 
                    cout << endl; 
                 }
                 
                 return 0; 
}
 
Zurück