AMBiX Benchmarks

i_hasser

Grand Admiral Special
Mitglied seit
06.06.2002
Beiträge
18.964
Renomée
85
Standort
IO 0x60
Hi

So langsam schreitet die D-Version von AMBiX jetzt vorran und in nächster Zeit werd ich da wieder ordentlich weitermachen.

Bisher hab ich mir die Benchmark Module immer selber ausgedacht - aus den Programmierwettbewerben sind zb. so einige Algorithmen eingeflossen (bisher alle Primzahlalgs, in D ist auch mein neuester drinnen - meine beiden Sortieralgs sollen auch Einzug halten) aber so extrem viel kommt da auch nicht zusammen (4 Primzahlalgs, 2 Sortieralgs, Whet/Dhrystone, vielleicht den Fibonacci... macht 9 Benchmarks).

Die anderen Algorithmen in AMBiX C sind eher einfach gestrickt, und daher nicht ganz so allgemein aussagekräftig.

Tja - und falls ihr Lust habt und/oder mal irgendwann einen etwas komplexeren Algorithmus für irgend eine Sache geschrieben habt und den in AMBiX einbringen wollt - immer her damit ;).

Es gibt natürlich einige Bedingungen von Rechts wegen - bitte nur Source der unter der GPL oder einer anderen OpenSource Lizenz steht (was weis ich, LGPL, die BSD Lizenz... also was ich frei verwenden kann).

Vorraussichtlich werde ich den Source zu AMBiX86 D veröffentlichen. Natürlich werdet ihr (wenn ihr wollt) auch bei jedem Benchmarkstart namentlich genannt ;).


E: Ach ja, es wäre ganz toll wenn ihr die Algorithmen auf das AMBiX Benchmark Module-Format anpassen könntet.
Die Specs werd ich hier schreiben sowie Vorschläge kommen, es ist aber ziemlich einfach. Der Benchmark muss in C++ vorliegen und besteht aus einer Klasse, in der ihr praktisch machen könnt was ihr wollt.
 
So, ich grab den Thread hier nochmal aus. AMBiX arbeitet zur Zeit ja unter DOS, weil wegen Genauigkeit der Messungen. Ich hatte die Frage in einem anderen Thread schonmal gestellt, bis jetzt aber noch keine Antwort erhalten: Wie sieht es aus, wenn unter Linux der Realtime-Scheduler genutzt wird? Reicht der für genügend genaue Messungen aus?
 
Hab ich noch nicht probiert. Könnte sein, dass es geht, aber der Benchmark dauert dann deutlich länger, weil die Teilmessungen der Genauigkeit wegen eben öfters gemacht werden müssen.

Das Ziel müsste einfach sein, das komplette System mit dem Benchmark zu blockieren - geht das mit dem Realtime Scheduler? Denn die Zeit muss per TimeStampCounter gemessen werden (die anderen Zeitmessungen sind zu ungenau, clock hat eine Granularität von ~10ms oder so), und der TSC misst die Gesamtzeit und nicht die Prozesszeit.
 
Das komplette System kannst du damit nicht blockieren, der Kernel macht weiter sein Ding. Sowas wirst du nur hinbekommen, wenn du den Benchmark in den Kernel verlagerst, und dort die Interrupts deaktivierst. Ob das so sinnvoll ist, steht dann aber auf einem anderen Blatt. ;D

Mit dem Realtime Scheduler kannst du aber alle anderen Prozesse blockieren, so dass nur der Benchmark läuft. Natürlich immer vorausgesetzt, du hast dann nicht noch einen RT-Prozess, der evtl. sogar ne höhere Priorität hat. Genauer bekommst du es auf Linux jedenfalls nicht hin, solange du nicht wirklich in den Kernel gehst.
 
Gibts vielleicht noch eine Möglichkeit die verbrauchte Prozess-Zeit genau zu messen? clock() ist wie gesagt völlig ungeeignet. Der Interrupt Timer den ich unter Dos benutze wenn die CPU keinen TSC bietet (alles bis inclusive 486er, dazu Cyrix 6x86/L) hat immerhin eine Auflösung von 1.2MHz, also eine Granularität von 0.83µs. clock() ist eben Faktor ~10'000 ungenauer, und damit schlicht unbrauchbar.
 
Muss ich mal schauen. Es gibt auf jeden Fall die Möglichkeit, die Rechenzeit in Taktzyklen genau zu messen. Bringt allerdings einen gewissen Overhead mit rein.
 
Na in Taktzyklen ist ja der TSC, der macht ja nix anderes (beim Init der CPU bei Systemstart wird der auf 0 gesetzt und dann mit jedem Takt eins hoch gezählt). Dummerweise ist es der CPU eben wurscht, welcher Prozess gerade rechnet, der TSC wird auch bei anderen Prozessen hochgezählt.
 
Du kannst das meines Wissens nach Prozess-genau accounten. Muss nochmal nachsehen, wie das genau ging.

edit: Jupp, OProfile ist dein Freund. So ich da jetzt nix falsch verstanden habe, kannst du da bis hin zu Thread-Granularität profilen.
 
Zuletzt bearbeitet:
Zurück
Oben Unten