Thread View: pl.comp.lang.pascal
7 messages
7 total messages
Started by webmajsterek
Thu, 01 Jul 2010 09:58
DynamicArray kontra StaticArray
Author: webmajsterek
Date: Thu, 01 Jul 2010 09:58
Date: Thu, 01 Jul 2010 09:58
33 lines
1840 bytes
1840 bytes
dlaczeggo odwolania do tablic dynamicznej sa szybsze od odwolan do tablic
zdefiniowanych statycznie
var OpenArray:Array of Longint;
DefArray:Array[0..10] of Longint;
L2:=15;
SetLength(OpenArray,10);
StartTime:=Now;
OpenArray[0]:=0;
For L1:=1 to L2 do
For Loop:=1 to 1000000000 do OpenArray[0]:=OpenArray[0]+1;
EndTime:=Now;
Memo1.Lines.Add(' Tablica OpenArray '+ TimeToStr(EndTime-StartTime));
StartTime:=Now;
DefArray[0]:=0;
For L1:=1 to L2 do
For Loop:=1 to 1000000000 do DefArray[0]:=DefArray[0]+1;
EndTime:=Now;
Memo1.Lines.Add(' Tablica DefArray '+ TimeToStr(EndTime-StartTime));
kompilacja dla pentium4 , wylaczone sprawdzanie zakresow , optymalizacja 3
stopnia .
u mnie dodawanie dynamicznej tablicy dla 15 miliardow powtorzzen konczy sie o
25 % szybciej .
pentla dla openArray zajmuje 33 sek a dla defArray 44 sek .
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Re: DynamicArray kontra StaticArray
Author: Łukasz 'Maly' Ostrowski
Date: Thu, 01 Jul 2010 10:21
Date: Thu, 01 Jul 2010 10:21
15 lines
1336 bytes
1336 bytes
On Thu, 01 Jul 2010 11:58:10 +0200, webmajsterek@poczta.onet.pl wrote: > <snip> > u mnie dodawanie dynamicznej tablicy dla 15 miliardow powtorzzen konczy sie o > 25 % szybciej . > pentla dla openArray zajmuje 33 sek a dla defArray 44 sek . Wklejaj kompletne fragmenty, najlepiej kompilowalne FPC, a nie upośledzonym lazarusem, najlepiej na pastebin.com, bo nie zawsze chce mi adaptować te snippetów, przez 3-5min żeby się tylko skompilowały. :-P -- Pozdrawiam, Łukasz 'Maly' Ostrowski. http://l3v.pl/
Re: DynamicArray kontra StaticArray
Author: Mirek
Date: Thu, 01 Jul 2010 12:51
Date: Thu, 01 Jul 2010 12:51
18 lines
1438 bytes
1438 bytes
On czw, 01 lip 2010 11:58:10 in article news:<60b5.000013db.4c2c66b2@newsgate.onet.pl> webmajsterek@poczta.onet.pl wrote: > > kompilacja dla pentium4 , wylaczone sprawdzanie zakresow , optymalizacja 3 > stopnia . > > u mnie dodawanie dynamicznej tablicy dla 15 miliardow powtorzzen konczy sie o > 25 % szybciej . > pentla dla openArray zajmuje 33 sek a dla defArray 44 sek . SOA#1 DefArray real 35.84 user 35.61 sys 0.01 DefArray real 34.82 user 34.50 sys 0.00 DefArray real 34.75 user 34.49 sys 0.01 OpenArray real 34.20 user 34.00 sys 0.00 OpenArray real 37.50 user 37.36 sys 0.00 OpenArray real 34.75 user 34.75 sys 0.00
Re: DynamicArray kontra StaticArray
Author: Wiktor S.
Date: Thu, 01 Jul 2010 21:32
Date: Thu, 01 Jul 2010 21:32
12 lines
1245 bytes
1245 bytes
> dlaczeggo odwolania do tablic dynamicznej sa szybsze od odwolan do > tablic zdefiniowanych statycznie > For Loop:=1 to 1000000000 do OpenArray[0]:=OpenArray[0]+1; kiepski test, sprawdzasz tylko odwołanie do indeksu [0], a może jest ono optymalizowane, bo nie trzeba wyliczać offsetu? odwołuj się do losowego indeksu. -- Azarien
Re: DynamicArray kontra StaticArray
Author: Wiktor S.
Date: Thu, 01 Jul 2010 21:40
Date: Thu, 01 Jul 2010 21:40
43 lines
1823 bytes
1823 bytes
No i mamy, bardziej miarodajny test, z zapisem i odczytem, i nie tylko
[zera]
//---------
{$mode objfpc}
uses sysutils;
var OpenArray:Array of Longint;
DefArray:Array[0..10] of Longint;
L1,L2:integer;
StartTime,EndTime:TDateTime;
loop:integer;
begin
L2:=15;
SetLength(OpenArray,10);
StartTime:=Now;
OpenArray[4]:=1;
For L1:=1 to L2 do
For Loop:=1 to 1000000000 do OpenArray[7]:=OpenArray[7]+OpenArray[4];
EndTime:=Now;
writeln(' Tablica OpenArray '+ TimeToStr(EndTime-StartTime));
StartTime:=Now;
DefArray[4]:=1;
For L1:=1 to L2 do
For Loop:=1 to 1000000000 do DefArray[7]:=DefArray[7]+DefArray[4];
EndTime:=Now;
writeln(' Tablica DefArray '+ TimeToStr(EndTime-StartTime));
end.
//---------
i dostaję
Tablica OpenArray 00.00.46
Tablica DefArray 00.00.39
--
Azarien
Re: DynamicArray kontra StaticArray
Author: Mirek
Date: Fri, 02 Jul 2010 07:01
Date: Fri, 02 Jul 2010 07:01
36 lines
1835 bytes
1835 bytes
On czw, 01 lip 2010 23:40:50 in article news:<i0j212$c42$1@news.onet.pl>
Wiktor S. wrote:
>
>
> i dostaję
>
> Tablica OpenArray 00.00.46
> Tablica DefArray 00.00.39
I dostałeś wynik odwrotny niż w pierwszym poście ;)
U mnie dla pgm1 wyniki były równe, a dla pgm2 (niestety mam tylko fpc 2.2.0)
jest:
Tablica OpenArray 00:01:15
Tablica DefArray 00:00:34
Skompiluj z opcją -al i wyszukaj w pliku pgm.s wnętrza pętli, u mnie
wyglądają tak:
//-------------
movl U_P$PROGRAM_OPENARRAY,%eax
movl 28(%eax),%ecx
movl 16(%eax),%eax
addl %ecx,%eax
movl U_P$PROGRAM_OPENARRAY,%ecx
movl %eax,28(%ecx)
//--------------
movl U_P$PROGRAM_DEFARRAY+28,%edx
movl U_P$PROGRAM_DEFARRAY+16,%eax
addl %edx,%eax
movl %eax,U_P$PROGRAM_DEFARRAY+28
Czyli OPENARRAY ma więcej o dwa ładowania rejestru i trzy dodawania (przy
wyznaczaniu adresu).
Re: DynamicArray kontra StaticArray
Author: Łukasz 'Maly' Ostrowski
Date: Fri, 02 Jul 2010 07:31
Date: Fri, 02 Jul 2010 07:31
87 lines
3282 bytes
3282 bytes
On Fri, 2 Jul 2010 07:01:26 +0000 (UTC), Mirek wrote: > On czw, 01 lip 2010 23:40:50 in article news:<i0j212$c42$1@news.onet.pl> > Wiktor S. wrote: >> >> >> i dostaję >> >> Tablica OpenArray 00.00.46 >> Tablica DefArray 00.00.39 E:\WorkShop\fpc>c:\dev\fpc\bin\i386-win32\fpc -O3 test Free Pascal Compiler version 2.4.0 [2009/12/18] for i386 Copyright (c) 1993-2009 by Florian Klaempfl Target OS: Win32 for i386 Compiling test.pas Linking test.exe 27 lines compiled, 0.1 sec , 63296 bytes code, 11064 bytes data E:\WorkShop\fpc>test Tablica OpenArray 00:00:32 Tablica DefArray 00:00:32 E:\WorkShop\fpc>test Tablica OpenArray 00:00:32 Tablica DefArray 00:00:32 Tak jakby, pomijalna różnica. > I dostałeś wynik odwrotny niż w pierwszym poście ;) > > U mnie dla pgm1 wyniki były równe, a dla pgm2 (niestety mam tylko fpc 2.2.0) > jest: > > Tablica OpenArray 00:01:15 > Tablica DefArray 00:00:34 > > Skompiluj z opcją -al i wyszukaj w pliku pgm.s wnętrza pętli, u mnie > wyglądają tak: > > //------------- > movl U_P$PROGRAM_OPENARRAY,%eax > movl 28(%eax),%ecx > movl 16(%eax),%eax > addl %ecx,%eax > movl U_P$PROGRAM_OPENARRAY,%ecx > movl %eax,28(%ecx) > > //-------------- > movl U_P$PROGRAM_DEFARRAY+28,%edx > movl U_P$PROGRAM_DEFARRAY+16,%eax > addl %edx,%eax > movl %eax,U_P$PROGRAM_DEFARRAY+28 > > Czyli OPENARRAY ma więcej o dwa ładowania rejestru i trzy dodawania (przy > wyznaczaniu adresu). Czego się spodziewamy ze względu na internalsy dynamicznego arraya. Co do wygenerowanego asma mamy zgodę, z różnicą tyczącą sie allokacji rejestrów, która to pewnie powoduje u mnie różnicę w postaci braku różnicy ;-) : .Lj31: incl %edi movl U_P$PROGRAM_OPENARRAY,%eax movl U_P$PROGRAM_OPENARRAY,%ebx movl 28(%eax),%ecx movl 16(%ebx),%eax addl %eax,%ecx movl U_P$PROGRAM_OPENARRAY,%eax movl %ecx,28(%eax) cmpl $1000000000,%edi jl .Lj31 .Lj65: incl %edi movl U_P$PROGRAM_DEFARRAY+28,%edx movl U_P$PROGRAM_DEFARRAY+16,%ecx addl %ecx,%edx movl %edx,U_P$PROGRAM_DEFARRAY+28 cmpl $1000000000,%edi jl .Lj65 Co nadal nie robi takiej różnicy żeby zwracać na to uwagę ;-). -- Pozdrawiam, Łukasz 'Maly' Ostrowski. http://l3v.pl/
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads