Thread View: pl.comp.lang.pascal
7 messages
7 total messages
Started by webmajsterek@poc
Thu, 01 Jul 2010 11:58
DynamicArray kontra StaticArray
Author: webmajsterek@poc
Date: Thu, 01 Jul 2010 11:58
Date: Thu, 01 Jul 2010 11:58
34 lines
962 bytes
962 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:; 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]:ÞfArray[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: =?iso-8859-2?Q?
Date: Thu, 01 Jul 2010 12:21
Date: Thu, 01 Jul 2010 12:21
16 lines
529 bytes
529 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
19 lines
633 bytes
633 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 23:32
Date: Thu, 01 Jul 2010 23:32
14 lines
354 bytes
354 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 23:40
Date: Thu, 01 Jul 2010 23:40
45 lines
860 bytes
860 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:; 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]:ÞfArray[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
37 lines
969 bytes
969 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: =?iso-8859-2?Q?
Date: Fri, 02 Jul 2010 09:31
Date: Fri, 02 Jul 2010 09:31
88 lines
2332 bytes
2332 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