Registriert seit: 31. Mär 2008
14 Beiträge
|
Re: Zugriffsgeschwindigkeit auf mehrdimensionale Arrays
27. Apr 2009, 21:46
Aber um noch einmal auf das ursprüngliche Problem zurückzukommen:
Weiß jemand, wie genau bei der Programmausführung der Array-Zugriff funktionert (Pointer / Adressierung etc.)
Das Phänomen tritt schon bei sehr kleinen Arraygrößen auf:
Delphi-Quellcode:
implementation
{$R *.dfm}
var
array1 : array[0..50, 0..4, 0..4, 0..50, 0..4, 0..4] of double;
array2 : array[0..50, 0..14, 0..14, 0..50, 0..14, 0..14] of double;
procedure TForm1.Button1Click(Sender: TObject);
var
i,j,k,l,m,n : integer;
start1, ende1, start2, ende2 : int64;
performance_factor : double;
begin
queryperformancecounter(start1);
for i := 0 to 50 do for j := 0 to 2 do for k := 0 to 2 do
for l := 0 to 50 do for m := 0 to 2 do for n := 0 to 2 do
begin
array1[i,j,k,l,m,n] := array1[i,j,k,l,m,n] + i*j*k*l*m*n;
end;
queryperformancecounter(ende1);
queryperformancecounter(start2);
for i := 0 to 50 do for j := 0 to 2 do for k := 0 to 2 do
for l := 0 to 50 do for m := 0 to 2 do for n := 0 to 2 do
begin
array2[i,j,k,l,m,n] := array2[i,j,k,l,m,n] + i*j*k*l*m*n;
end;
queryperformancecounter(ende2);
performance_factor := (ende2-start2)/(ende1-start1);
showMessage(floattostr(performance_factor));
end;
Probiert es mal aus. Schon hier ist der Unterschied von einem Faktor 2-5 zu erkennen (das kann entscheiden, ob ich 1 Tag oder 5 Tage warten muss, bis mein Rechner fertig ist). Bei größeren Arrays bis zu Faktor 10...
|