Benchmarks
-
- 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
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.
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/
-
- 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:
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/
Re: Benchmarks
Hallo,Christian hat geschrieben:das kann doch net sein selbst die platte geht mit 120 mb/s zu werke schreibend.
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;
Gruß, Bernd.
Re: Benchmarks
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.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.
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.
-
- 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:
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.
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