🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.pascal
7 messages
7 total messages Started by webmajsterek Thu, 01 Jul 2010 09:58
DynamicArray kontra StaticArray
#93035
Author: webmajsterek
Date: Thu, 01 Jul 2010 09:58
33 lines
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
#93038
Author: Łukasz 'Maly' Ostrowski
Date: Thu, 01 Jul 2010 10:21
15 lines
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
#93037
Author: Mirek
Date: Thu, 01 Jul 2010 12:51
18 lines
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
#93041
Author: Wiktor S.
Date: Thu, 01 Jul 2010 21:32
12 lines
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
#93042
Author: Wiktor S.
Date: Thu, 01 Jul 2010 21:40
43 lines
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
#93039
Author: Mirek
Date: Fri, 02 Jul 2010 07:01
36 lines
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
#93046
Author: Łukasz 'Maly' Ostrowski
Date: Fri, 02 Jul 2010 07:31
87 lines
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