Benchmarks

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Benchmarks

Beitrag von Christian »

Hi,

Ich hab gerad zur entspannung in meine Info Dialoge ne kleine Systeminfo und benchmark eingebaut.
Benchmarkenb tu ich die CPU taktfreq was auch sehr gut funktioniert.
Die Speoicher schrieb lese und Festplatten schreib lese geschwindigkeit.
Bei der Festplatte scheint alles gut zu sein da ich aus geschwindikeitsgründen nur 2mb lese und schreibe speilt der plattencache manchmal n bissle zu viel rein.

Aber beim Speicher gibts n merkwürdiges phänomen ich benutze TMemoryStream und scheibe 15x 1MB rein beim schreiben komm ich auf 2,4 mb/s und lesen 870 mb/s
das kann doch net sein selbst die platte geht mit 120 mb/s zu werke schreibend.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Darf man mal den Code probieren?

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

In die Uses muss LCLIntf,Utils

Code: Alles auswählen

var
  mS: TStringStream;
  td : array [0..1023] of byte;
  tm,
  mWriteTime,
  mReadTime,
  fReadTime,
  fWriteTime : Int64;
  i: Integer;
  fS: TFileStream;

Code: Alles auswählen

mS := TStringStream.Create('');
  tm := GetTickCount;
  for i := 0 to 15*1023 do
    ms.Write(td,1024);
  mWriteTime := 1+GetTickCount-tm;
  ms.Position := 0;
  tm := GetTickCount;
  for i := 0 to 15*1023 do
    ms.Read(td,1024);
  mReadTime := 1+GetTickCount-tm;
  ms.Free;
  fS := TFileStream.Create(GetTempDir+'ubench.tmp',fmCreate);
  tm := GetTickCount;
  for i := 0 to 2*1023 do
    fS.Write(td,1024);
  fWriteTime := 1+GetTickCount-tm;
  fs.Position := 0;
  tm := GetTickCount;
  for i := 0 to 2*1023 do
    fS.Read(td,1024);
  fReadTime := 1+GetTickCount-tm;
  fS.Free;
  SysUtils.DeleteFile(GetTempDir+'ubench.tmp');
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

_Bernd
Beiträge: 145
Registriert: Di 13. Feb 2007, 11:16

Re: Benchmarks

Beitrag von _Bernd »

Christian hat geschrieben:das kann doch net sein selbst die platte geht mit 120 mb/s zu werke schreibend.
Hallo,

mit einem Move müßte man die Grenzen des Speichers doch eigentlich ganz gut ausloten können (ohne den Overhead von TMemoryStream).

Code: Alles auswählen

var
   a: Array[1..200000000] of Byte;
   b: Array[1..200000000] of Byte;
 
procedure TForm1.Button3Click(Sender: TObject);
var
   lStart: Longint;
   lDauer: Longint;
begin
   lStart:= GetTickCount;
   move(a, b, Sizeof(a));
   lDauer:= GetTickCount - lStart;
   ShowMessage(IntToStr(lDauer) + ' ms -> ' +
      IntToStr(SizeOf(a) div (lDauer * 1000)) + ' Megabyte/s');
end;
Die Routine schaufelt 200 Megabyte von a nach b. Auf meiner lahmen Kiste (1,2 GHz Athlon) erreiche ich ca. 250 Megabyte pro Sekunde.

Gruß, Bernd.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Naja 200 mb sinds nicht ganz ;)
Ja ich werd das mal probieren auf die Weise find das verhalten von TMemorystream trotsdem komisch ist langsamer als TFilestream. Und Array die 200mb in meinem code freiräumen werde ich wohl auch nicht benutzen ;)
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Hab mir das mal bei deinem Netmonitor angeschaut. Wie kommst du auf rating? Was wird da eigentlich genau ermittelt?
Johannes

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

1.0 ist ca n durchschnittlicher Bürorechner das ist einfach der versuch auszusagen was am System etwas hinkt. Ob das immer so klappt weiss ich net. Was ermittelt wird steht dahinter.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

_Bernd
Beiträge: 145
Registriert: Di 13. Feb 2007, 11:16

Re: Benchmarks

Beitrag von _Bernd »

Christian hat geschrieben: Aber beim Speicher gibts n merkwürdiges phänomen ich benutze TMemoryStream und scheibe 15x 1MB rein beim schreiben komm ich auf 2,4 mb/s und lesen 870 mb/s
das kann doch net sein selbst die platte geht mit 120 mb/s zu werke schreibend.
das hat mich auch gewundert. Es sieht wohl so aus, daß TMemoryStream einen ziemlichen Overhead erzeugt, wenn die Kapazität eines Streams vergrößert werden muß. Ich habe es mal in den RTL-Sourcen nachverfolgt.
Wenn man bei Deinem Beispiel nun z. B. die Kapazität des Streams auf 16 MB festlegt (mit SetSize), dann ergibt sich auch eine vernünftige Schreibgeschwindigkeit. Bei mir ist sie ungefähr halb so groß, wie die Lesegeschwindigkeit.

Gruß, Bernd.

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

also Rating ist ne einfache Prozentangabe bezogen auf deine Vorgabe. Wo auch immer die liegen mag (man könnts ja ausrechnen).

Und die Spinedits? Bei Memory und Harddisk geben die die Filegröße an, oder? Und beim Prozessor? Weil mit etwas spielen schwankt das Rating zwischen 2,5 was ja aber für Benchmarks nichts seltenes ist.
Johannes

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Richtig bei Harddisk sind das Filegrösen und beim prozessor schleifendurchläufe der Benchmarkschleife ist einmal n Fliesskommatest drin und einmal n Test mit allen möglichen Konstrukten (Schleifen, Integer Arythmetik...)
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten