![]() |
Re: Benchmark Algorythmus
Zitat:
Zitat:
Zitat:
Edit, die 19823.: Aaaargh, ich hasse meinen Browser-Cache! :wall: |
Re: Benchmark Algorythmus
Du hattest doch schon sowas wie Primzahlentest vorgeschlagen. Warum nimmst du das dann nicht auch?
Delphi-Quellcode:
(ja, ich weiß, die Funktion könnte man noch deutlich optimieren, aber da es hier ja darum geht, eine gewisse Auslastung zu erreichen, erspare ich mir das mal.)
function Ist_Prim(n: LongWord): Boolean;
//LongWord ist ein vorzeichenloser 32bit-Integertyp var i: Longword; begin if n>=2 then Result:= True else Result:= False; i:= 2; while (Result and (i<=n-1)) do begin Result:= ((n mod i)<>0); i:= i+1; end;//while end; Diese Funktion kann man dann in einer for-Schleife laufen lassen und mit GetTickCount die Zeit nehmen:
Delphi-Quellcode:
MfG
var x, t: LongWord;
begin t:= GetTickCount;//Zeit nehmen for x:= 2 to 1000000 do Ist_Prim(x); t:= GetTickCount -t; ShowMessage('Dauer: '+IntToStr(t)+' ms'); end; Binärbaum |
Re: Benchmark Algorythmus
Man kann auch einfach Integeradditionen/divisionen/potenzen/wurzeln bzw. das gleiche mit Float.
Einfach, aber es funktioniert. |
Re: Benchmark Algorythmus
Zitat:
Und Wurzeln sind in den seltensten Fällen auch wieder Integer-Werte (z.B. bei sqrt(2)= 1.41....). Wer lesen kann ist halt klar im Vorteil. |
Re: Benchmark Algorythmus
Ich kann ja nicht wissen, dass Floats 48-Bit Variablen sind, ich bin schließlich doch ein Newbie und habe keine Ahnung von den Hintergründen.
|
Re: Benchmark Algorythmus
Zitat:
Solange der OP nichts über die Architektur verrät, können wir hier weiter im Dunkeln tappen und irgendwelche Berechnungen in die Luft werfen, Benchmarks sind und bleiben ziemlich oft Architekturspezifisch. Wenn ich 3GB Cache habe, kann mir der Speicherzugriff egal sein, da ich praktisch nie auf den langsamen RAM zugreife. In einem solchen Fall kann ich auch schonmal 10000x10000 Matrizen durch den Rechner jagen. Wenn ich hingegen mehrere Dutzend Pipelines habe, muss ich dafür sorgen, daß der Code so aussieht, daß auch jede Pipeline sinnvoll benutzt werden kann. Aber das schrob ich ja alles schon... |
Re: Benchmark Algorythmus
Zitat:
Man könnte auch statt Real den Typ Single verwenden. Der wäre dann 32 bit groß. Allerdings ist ein Float-/ Real-Typ doch auch was anderes als ein Ganzzahl-/Integer-Typ. Schleißlich kann man mit einem Integer keine Werte wie 1234.56789 darstellen. Und das könnte bzw. sollte man doch wissen (auch wenn man sich noch als Newbie einstuft). MfG Binärbaum |
Re: Benchmark Algorythmus
Natürlich weiß ich, was ein Float ist. Ich habe ja auch gesagt, man kann die Berechnung sowohl mit Integern als auch mit Floats machen, was dann natürlich auch unterschiedliche Ergebnisse bringt, denn Floats sind natürlich deutlich langsamer. Ich habe nie behauptet, dass es das gleiche ist, was man nimmt.
|
Re: Benchmark Algorythmus
WARUM nicht einfach sowas:
Delphi-Quellcode:
Oder irgend so einen Schwaschsinn. Du kannst wahrscheinlich auch einfach konstante Werte nehmen... Ich weiß nur nicht, ob der Compiler dann irgendwelche Optimierungen vornimmt, die ganz überl sind...
function benchmark:integer; //gibt die dauer in ms zurück
var i,temp:integer; begin result :=getTickCount(); for i:=0 to 30000 do begin temp :=round(i+sqr(i)-sqrt(i)*i+3/i); end; result :=result -getTickCount(); end; |
Re: Benchmark Algorythmus
Die Compileroptimierungen kann man doch ausschalten, oder? :gruebel:
Und @Binärbaum: Vielleicht sollten wir aufhören mit diesem *Streit*. Sonst kommt noch ein Mod und schließt den Thread oder sowas in der Art. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz