🚀 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@poc Thu, 01 Jul 2010 11:58
DynamicArray kontra StaticArray
#89659
Author: webmajsterek@poc
Date: Thu, 01 Jul 2010 11:58
34 lines
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
#89661
Author: =?iso-8859-2?Q?
Date: Thu, 01 Jul 2010 12:21
16 lines
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
#89662
Author: Mirek
Date: Thu, 01 Jul 2010 12:51
19 lines
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
#89665
Author: "Wiktor S."
Date: Thu, 01 Jul 2010 23:32
14 lines
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
#89666
Author: "Wiktor S."
Date: Thu, 01 Jul 2010 23:40
45 lines
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
#89667
Author: Mirek
Date: Fri, 02 Jul 2010 07:01
37 lines
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
#89668
Author: =?iso-8859-2?Q?
Date: Fri, 02 Jul 2010 09:31
88 lines
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