Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Benchmark Algorythmus (https://www.delphipraxis.net/37529-benchmark-algorythmus.html)

tommie-lie 8. Jan 2005 10:07

Re: Benchmark Algorythmus
 
Zitat:

Zitat von ibp
schreib dir doch eine eigene berechnungsmethode!

Sein Problem ist ja anscheinend der Mangel an Kreativität, genau das zu tun ;-)

Zitat:

Zitat von ibp
ping doch mal hagen [negaH] an vielleicht hat der eine Idee!

Zitat:

C:\>ping hagen [negaH]
Ping-Anforderung konnte Host "hagen" nicht finden. Überprüfen Sie den Namen, und versuchen Sie es erneut.
Hmm... also irgendwas stimmt da nicht, er wird doch nicht etwa tot sein? :gruebel:


Edit, die 19823.: Aaaargh, ich hasse meinen Browser-Cache! :wall:

Binärbaum 5. Apr 2005 14:08

Re: Benchmark Algorythmus
 
Du hattest doch schon sowas wie Primzahlentest vorgeschlagen. Warum nimmst du das dann nicht auch?
Delphi-Quellcode:
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;
(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.)

Diese Funktion kann man dann in einer for-Schleife laufen lassen und mit GetTickCount die Zeit nehmen:
Delphi-Quellcode:
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;
MfG
Binärbaum

3_of_8 5. Apr 2005 15:44

Re: Benchmark Algorythmus
 
Man kann auch einfach Integeradditionen/divisionen/potenzen/wurzeln bzw. das gleiche mit Float.

Einfach, aber es funktioniert.

Binärbaum 5. Apr 2005 15:52

Re: Benchmark Algorythmus
 
Zitat:

Zitat von 3_of_8
Man kann auch einfach Integeradditionen/divisionen/potenzen/wurzeln bzw. das gleiche mit Float.

Einfach, aber es funktioniert.

Ja, aber laut Threadersteller sollten es nur 32bit-Integer sein. Und Float-Typen (z.B. Real (48bit)) gehören leider nicht dazu. :wink:
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.

3_of_8 5. Apr 2005 16:07

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.

tommie-lie 5. Apr 2005 16:31

Re: Benchmark Algorythmus
 
Zitat:

Zitat von Binärbaum
Ja, aber laut Threadersteller sollten es nur 32bit-Integer sein. Und Float-Typen (z.B. Real (48bit)) gehören leider nicht dazu. :wink:

Er sagte, es stehen im vom Range her nur 32bit für Integer zur Verfügung, weswegen er nicht mit großen Zahlen arbeiten kann. Außerdem, man soll es nicht für möglich halten, gibt es auch 32bit Floats, und wenn man die FPU in Software emuliert :zwinker:
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...

Binärbaum 5. Apr 2005 16:36

Re: Benchmark Algorythmus
 
Zitat:

Zitat von 3_of_8
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.

Kann ja passieren, dass man nicht weiß, wie groß ein Typ ist (ich behaupte, dass es selbst den erfahrenen Programmierern manchmal so geht :wink: ). Doch das ist auch nicht unbedingt das, was ich meinte.
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

3_of_8 6. Apr 2005 16:36

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.

yankee 6. Apr 2005 16:50

Re: Benchmark Algorythmus
 
WARUM nicht einfach sowas:
Delphi-Quellcode:
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;
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...

3_of_8 6. Apr 2005 16:53

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:23 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz