EisiMark 2008 - selbstprogrammierter CPU-Benchmark

Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Ah ja, ich glaub ich weiß wo der Unterschied liegt.

Erst mal zu Erklärung von meinem Code, hätte vielleicht ein paar Kommentare vertragen können. "fn" ist der Wert der Fibonacci Summe an der Stelle n (wird nur mit 4 initialisiert weil das keine Fibonacci Zahl ist, um evtl. Fehler zu finden, der Wert ist aber egal, wird überschrieben). "fnm" ist f_{n-1} und wird mit 1 initialisiert weil die Schleife mit n=2 startet und das somit f_1 = 1 entspricht. "fnmm" ist f_{n-2} und wird entsrechend mit 0 initialisiert für f_0 = 0. Anschliesend gehts ab in die Schleife, f_n wird berechnet und die fnm und fnmm Variablen werden eins weiter gerutscht, ganz analog der definition der Folge.

Du rufst die Funktion "fibonacci()" wahrscheinlich direkt mit der gewünschten Zahl auf und berechnest dann rekursiv die dafür benötigten vorigen Fibonacci-Zahlen. Das gibt dann anscheinend eine Kettenreaktion (dürfte irgendwie potentiell zunehmen). Kann es sein, dass die Variable "counter" die Aufrufe der "fibonacci" Funktion zählt und dann unter "Die Berechnungsfunktion wurde aufgerufen:" ausgegeben wird? Du also für die 45. Fibonacci Zahl ca. 2,27 Millarden Funktionsaufrufe hast.

Bei mir sind es für die 45. Zahl 43, das würde dann auch den Zeitunterschied erklären. Ich bau bei Gelegenheit mal deine Funktion nach um zu schauen ob die Zeiten dann ähnlicher werden.
 
Hallo Hiradur,
ich wollte deinen Benchmark auch mal Testen, verwende aber GNU/Linux. Weil der Quelltext von deinem Programm anscheinend nicht frei verfügbar ist hab ich schnell selbst eins in C geschrieben. Die Berechnung mache ich dabei einfach nach Definition der Fibonacci-Folge, also f_n = f_{n-1} * f_{n-2}. So weit so gut, das seltsame ist jetzt, dass die Berechnung z.B. von f_{90} nur ca. 4 Mikrosekunden (0,000004 s) dauert (auf einem Pentium M 1,6 GHz 32 Bit, kompiliert mit GCC 4.1.3), also um Größenordnungen weniger als bei dir. Eigentlich auch gar nicht so verwunderlich, sind ja nur einfache Multiplikationen und bei heutigen Taktraten geht das ja deutlich unter einer Sekunde.
Das Problem ist jetzt, dass meine Zeiten natürlich nicht mit deinen vergleichbar sind und sich eigentlich auch gar nicht für einen Benchmark eignen weil sie so klein sind. Kannst du mal einen Blick auf meinen Quelltext werfen und evtl. verraten was du im Wesentlichen anders machst.

Code:
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>

int main(int argc, char *argv[])
{
   unsigned long long fnmm = 0;		// (8 Byte) max. 18446744073709551615
   unsigned long long fnm = 1;		//        f_93 = 12200160415121876738
   unsigned long long fn = 4;		// funktioniert aber nur bis f_92 ?!
   unsigned int n=2;
   unsigned int i=2;
   
   struct timeval start, end;
   long int diff=0;
   
   i = atoi(argv[1]);
   
   if(i>=93)
   {
     printf("Berechnung nur bis zur 93. Fibonacci-Zahl moeglich!\n");
     return 0;
   }
   
   gettimeofday(&start, NULL);
   for(n=2; n<=i; n++)
   {
     fn = fnm + fnmm;
     fnmm = fnm;
     fnm = fn;
   }
   gettimeofday(&end, NULL);
   
   diff = (end.tv_sec - start.tv_sec)*1000000 + (end.tv_usec - start.tv_usec);
   
   printf("f_%i = %lli (%li Mikrosekunden)\n", n-1, fn, diff);
   return 0;
}

Falls es Jemand ausprobieren will, einfach mit Compiler der Wahl (nach C99) kompilieren und dann mit der gewünschten Fibonacci-Zahl als Argument, z.B. "./fibonacci 45", aufrufen.

Gruß Sebastian


Hi,

du hast doch eine MAX. Iterationstiefe !

Du kannst Deinen 2ten Schleifenkörper auch n mal ausführen lassen!
z.B:

10000 * Fibo und das Ergebniss in einem Array x* ablegen
und abschliessend die Einzelbeträge des Arrays addieren(eventuell vorher teilen) und durch die Summe der Durchgänge(10000) teilen !

Vorteil, die implementierung eines "Präzisionscounter" könnte ausser acht gelassen werden !
 
Zuletzt bearbeitet:
Hi,

du hast doch eine MAX. Iterationstiefe !

Du kannst Deinen 2ten Schleifenkörper auch n mal ausführen lassen!
z.B:

10000 * Fibo und das Ergebniss in einem Array x* ablegen
und abschliessend die Einzelbeträge des Arrays addieren(eventuell vorher teilen) und durch die Summe der Durchgänge(10000) teilen !

Vorteil, die implementierung eines "Präzisionscounter" könnte ausser acht gelassen werden !

Das hab ich jetzt noch nicht komplett verstanden. Meinst du überhaupt meinen Code oder den von Hiradur (da könnte ich mir darunter was vorstellen)?
 
Du rufst die Funktion "fibonacci()" wahrscheinlich direkt mit der gewünschten Zahl auf und berechnest dann rekursiv die dafür benötigten vorigen Fibonacci-Zahlen. Das gibt dann anscheinend eine Kettenreaktion (dürfte irgendwie potentiell zunehmen). Kann es sein, dass die Variable "counter" die Aufrufe der "fibonacci" Funktion zählt und dann unter "Die Berechnungsfunktion wurde aufgerufen:" ausgegeben wird? Du also für die 45. Fibonacci Zahl ca. 2,27 Millarden Funktionsaufrufe hast.

Exakt. Stimmen deine Ergebnisse für die Testzahl 45 eigentlich mit meinen überein?

Neues zum Benchmark2008: Die neue Version ist noch in Planung, habe mir aber folgendes vorgenommen: Grafische Umgebung, sprich keine öde Konsole mehr, ausserdem Multithreading. Für Multithreading habe ich mir jetzt folgendes überlegt: Ich mache 4 verschiedene Threads. Alle berechnen das selbe. Allerdings zählt der Bench die Zeit solange, bis alle Threads fertig gerechnet haben. Das sollte dann doch eigentlich dazu führen, dass ein Quadcore dank 4 Cores in etwa 20s fertig ist und ein SC, da er alle 4 Threads in einem berechnen muss, erst nach 80s. Ist das realisierbar? Es wäre meine erste Multithreading Anwendung und ich habe noch gar keine Ahnung wie ich das dann in Code umsetze...

PS: Kann man mit C++ die (Hardware-)Daten, die in den Systemeigenschaften(Rechtsklick auf Arbeitsplatz) stehen, auslesen? Ist sicherlich keine detaillierte Angabe über das System, aber ansonsten hätte die grafische Oberfläche nicht viel zu bieten. :cool:
 
Zuletzt bearbeitet:
Kalyan | 45 | C2D E6750 | 3400MHz | 425MHz | 1,312 V | 2x 1024MB G.Skill DDR2-800 @ 1020MHz | 5-5-5-15 2T | 2,1V | Gigabyte P35-DS4 | WaKü | 19,188 sec | Screenshot
 
peQs | 45 | C2Q 6600 | 3995MHz | 444MHz | 1,568 V | 2x 1024MB Corsair DDR2-800 @ 880 MHz | 4-4-4-10 2T | 2,2V | ASUS P5K Premium | WaKü | 15,984 sec

 
Zuletzt bearbeitet:
luz1fer | 18219 | 45 | AMD64 X2 6400+ BE | 3360 | 210 | 1,5V | 2x 1024MB DDR2-800 @ 840 | 5-5-5-15 | 2,2V | ASUS M2N-E | LuKü | screen
 
§layer | 13,000s | 45 | Intel Core2Duo E8400 | 5038 MHz | 560Mhz | 1,74V | Cellshock 2GB DDR1000 @ 560MHZ | 4-4-4-12-6-20-10-10-10-2T | 2,40V | Asus Blitz Formula | Trockeneis | Screenshot
 
Zuletzt bearbeitet:
hab mal nen neuen Test gemacht =D

luz1fer | 17672 | 45 | AMD64 X2 6400+ BE | 3400 | 227 | 1,2V | 2x 1024MB DDR2-800 @ 840 | 5-5-5-15 | 2,2V | ASUS M2N-E | LuKü |Screen
 
Wieso soll sich hier nichts tun?

Wenn ich mehr Zeit hätte, würde ich Benchmark2008 weiterproggen. Die habe ich aber leider zur Zeit nicht. Rechnet mal eher mit einem Release gegen Ostern...
 
Zuletzt bearbeitet:
mrcs | 45 | Pentium Dualcore E2200 | 3000 MHz | 300Mhz | 1,264 V | 2x2048MB Geil@DDR2-750 | 4-4-4-12 2T | 2,1V | Abit IP35-E | LuKü | 21,063 sec | Screenshot

War erster Versuch. Wie spricht der Bench auf Speichertakt an? Könnte nämlich den Ramtakt noch weiter anheben. Probier das gleich mal aus.



Edit: Speichertakt von 1000 statt den obigen 750 ergab keine Verbesserung ....
Naja TOP 10 reicht ja auch erst mal :d
 
Zuletzt bearbeitet:
Kurtisane | 15,406 | 45 | Intel E8400 | 4250Mhz | 500Mhz | 1,424 | G.Skill F2-8000CL5-4GBPQ @1000Mhz| 5-5-5-15 2T | 2,00V | Asus Maximus Formula | Lukü |
 
Zuletzt bearbeitet:
vipbaby | 45 | Intel E4500 Core2 Duo@ 2200Mhz - 200Mhz - FSB | 1x512MB & 3x2GB OZC Gold PC6400 @ 533Mhz 5-4-4-12 | Sapphire HD3850@686/1660| VISTA x64 | Xilence AirEngine

 
Pavlyuchenko | 17,109s | 45 | Intel Core2Duo E8400 | 3800 MHz | 527Mhz | 1,36V | G.Skill 4GB DDR1000 @ 1066MHZ | 4-4-4-12-2T | 2,34V | Asus Striker II Formula | LuKü | Screenshot
 
lrwr | 18,539 | 45 | Q6600 | 3,4GHZ | 425MHz | 1,31V idle, 1,29V last | 2x G.Skill F2-6400CL5D-4GBPQ (2 kits mit je 2x2GB) | 6-6-6-20 | 1,8V | MSI P35 Neo2-FR | AC Freezer 7 Pro |

die ram timings hatte ich vergessen nah dem testen heute nachmittag wieder zurückzusetzen, aber auf nem intel sys bringts ja eh nix
 
So, nach langer Zeit gibts mal wieder was neues:

Benchmark2008 ist fast fertig, eine Betaversion kann man sich hier (offline) laden.

Changelog:
+Unterstützung für bis zu 4 Kerne
+Berechnet PI, Fibonaccizahlen und Primzahlen bis n.
+Belastet den Ram deutlich mehr, so sollten sich auch Timings etc. bemerkbar machen

Ist aber noch Beta, weil:
-Das Programm beim zweiten Ausführen des Benchmarks abstürzt.
-In der Theorie 4 Kerne unterstützt werden, aber es so aussieht als dass die Berechnungen nicht parallel sondern seriell ablaufen (könnte auch an der Threadverwaltung von Windows liegen). Wäre gut, wenn ein paar das testen könnten.

Hier mal ein Bild:
 
Zuletzt bearbeitet:
187.218 sekunden
der erste und dritte teil haben beide kerne zu 50% ausgelastet
der zweite beide zu 100%
ram wird im zweiten um 1 gig mehr ausgelastet, anch beendigung aber nicht mehr geleert solang das fenster offen ist!
 
So, die Final ist endlich fertig und kann hier gedownloaded werden.

Changelog seit EMark08 Beta:
+memory leak gefixed
+Threadverwaltung überarbeitet
+Fast alle Rechenfunktionen komplett überarbeitet
+Benchmarkroutine geändert, sodass es nicht mehr solange dauert

Hier noch ein Screen:


PS: Sollte Interesse bestehen, mach ich vielleicht auch noch einen Linuxport.
 
Weiter gehts,

Eisimark 2007:

Jolly91 l 45 | Intel C2D Q9550 | 4003 Mhz | (8,5x) 471 Mhz | 1,256@load V | 2x 2048 MB Corsair DDR2 800 @942 | 5-5-5-15 2T | 1,96V | ASUS P5Q-E | LuKü | 16,415 sec | Screenshot
EISImark 2008:

Jolly91 | Intel C2D Q9550 | 4003 Mhz | (8,5x) 471 Mhz | 1,256@load V | 2x 2048 MB Corsair DDR2 800 @942 | 5-5-5-15 2T | 1,96V | ASUS P5Q-E | LuKü | 3,245 sec | Screenshot
 
Zuletzt bearbeitet:
Dr.Akula | 45 | Intel C2D E8400 C0 | 4000MHz | (8x) 500MHz | ~1,300V | 2x 1024MB Corsair CM2X1024-6400 @ 1000MHz | 5-5-5-15 2T | 1,8V | MSI P45T-C51 | WaKü | 16,255sec | Screenshot
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh