-
41. Data: 2012-04-02 15:00:49
Temat: Re: dalsza optymalizacja
Od: bartekltg <b...@g...com>
W dniu 2012-04-02 14:58, bartekltg pisze:
> metodą eliminacji (jak ona się po angielsku nazywa?)
Mam:
http://en.wikipedia.org/wiki/Rejection_sampling
pzdr
bartekltg
-
42. Data: 2012-04-02 15:22:06
Temat: Re: dalsza optymalizacja
Od: " M.M." <m...@N...gazeta.pl>
<f...@N...gazeta.pl> napisał(a):
> > - za drugim razem odwrotnie - nie inty i floaty zdaja sie
> > najwiekszym problemem tylko konwersje z float na int
> > (defakto jest to bug spolki fpu+kompilatory)
> >
>
> testy u mnie na starym p4
>
>
> for(int i=0; i<100000000; i++)
> {
> // int_ = (int) i; // 140 ms
>
> //int_ = i * 80; // 180 ms
> // int_ = i/40 ; // 2500 ms
>
> // float_ = (float) i; // 230 ms
>
> // float_ = ((float) i/ (i+23)); // 1800
> // float_ = sqrt(float(i) ); // 2300
> // float_ = cos(float(i) ); // 9600
> // float_ = ((float) i/ 3.3345); // 420
> // float_ = (float) i * float(i); // 350
>
> // int_ = (float) i; // 6900 ms
>
> }
>
> konwersja floata na int kosztuje tyle co kilka dzielen, i tyle co
A u mnie ten program skompilowany GCC z O2 nie kończy się:
int main( int argc, char *argv[] ) {
clock_t start = clock();
int t = 0;
for( int i=0 ; i<30000 ; i++ )
for( int i=0 ; i<10000 ; i++ )
t += i;
printf("%dms\n%lf\n", (int)((clock()-start)*1000/CLOCKS_PER_SEC) , (double)t );
return 0;
}
Zwykle (chyba nigdy) nie używam takich samych nazw zmiennych dla pętli
zagnieżdżonej co obejmującej. Ale myślałem że to poprawny kod...
Pozdrawiam
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
-
43. Data: 2012-04-02 15:55:04
Temat: Re: dalsza optymalizacja
Od: " M.M." <m...@N...gazeta.pl>
M.M. <m...@N...gazeta.pl> napisał(a):
> <f...@N...gazeta.pl> napisał(a):
>
> > > - za drugim razem odwrotnie - nie inty i floaty zdaja sie
> > > najwiekszym problemem tylko konwersje z float na int
> > > (defakto jest to bug spolki fpu+kompilatory)
> > >
> >
> > testy u mnie na starym p4
> >
> >
> > for(int i=0; i<100000000; i++)
> > {
> > // int_ = (int) i; // 140 ms
> >
> > //int_ = i * 80; // 180 ms
> > // int_ = i/40 ; // 2500 ms
> >
> > // float_ = (float) i; // 230 ms
> >
> > // float_ = ((float) i/ (i+23)); // 1800
> > // float_ = sqrt(float(i) ); // 2300
> > // float_ = cos(float(i) ); // 9600
> > // float_ = ((float) i/ 3.3345); // 420
> > // float_ = (float) i * float(i); // 350
> >
> > // int_ = (float) i; // 6900 ms
> >
> > }
> >
> > konwersja floata na int kosztuje tyle co kilka dzielen, i tyle co
>
>
> A u mnie ten program skompilowany GCC z O2 nie kończy się:
A z typem float już działa. Co jest grane?
int main( int argc, char *argv[] ) {
clock_t start = clock();
float t = 0;
for( int i=0 ; i<30000 ; i++ )
for( int i=0 ; i<10000 ; i++ )
t += i;
printf( "%dms\n%lf\n" , (int)((clock()-start)*1000/CLOCKS_PER_SEC) , (double)t );
return 0;
}
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
-
44. Data: 2012-04-02 16:16:14
Temat: Re: dalsza optymalizacja
Od: bartekltg <b...@g...com>
W dniu 2012-04-02 15:55, M.M. pisze:
> int main( int argc, char *argv[] ) {
> clock_t start = clock();
> float t = 0;
> for( int i=0 ; i<30000 ; i++ )
> for( int i=0 ; i<10000 ; i++ )
> t += i;
> printf( "%dms\n%lf\n" ,
> (int)((clock()-start)*1000/CLOCKS_PER_SEC) , (double)t );
> return 0;
> }
>> A u mnie ten program skompilowany GCC z O2 nie kończy się:
> A z typem float już działa. Co jest grane?
>
Działa poprawnie w obu wersjach (VC++ 2010).
Deklaracja int i w wewnętrznej pętli nadpisuje
poprzednie 'i'. W wyplutym asm widać, że to różne zmienne.
pzdr
bartekltg
-
45. Data: 2012-04-02 17:11:40
Temat: Re: dalsza optymalizacja
Od: " M.M." <m...@N...gazeta.pl>
bartekltg <b...@g...com> napisał(a):
> W dniu 2012-04-02 15:55, M.M. pisze:
>
>
> > int main( int argc, char *argv[] ) {
> > clock_t start = clock();
> > float t = 0;
> > for( int i=0 ; i<30000 ; i++ )
> > for( int i=0 ; i<10000 ; i++ )
> > t += i;
> > printf( "%dms\n%lf\n" ,
> > (int)((clock()-start)*1000/CLOCKS_PER_SEC) , (double)t );
> > return 0;
> > }
>
>
> >> A u mnie ten program skompilowany GCC z O2 nie koĹczy siÄ:
> > A z typem float juĹź dziaĹa. Co jest grane?
> >
>
> DziaĹa poprawnie w obu wersjach (VC++ 2010).
> Deklaracja int i w wewnÄtrznej pÄtli nadpisuje
> poprzednie 'i'. W wyplutym asm widaÄ, Ĺźe to róşne zmienne.
W wewnętrznej pętli zmienną oznaczyłem symbolem "j" i też
nie zatrzymuje się. Mój GCC ma znowu jakiegoś buga :(
Przypominam sobie że w jakimś starszym VC był podobny
problem. Jeśli w prostych programach używało się printf z
konwersją typu stałoprzecinkowego do typu zmiennoprzecinkowego
to skompilowany program potrafił wywalić NT4.0.
Pozdrawiam
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
-
46. Data: 2012-04-02 17:31:16
Temat: Re: dalsza optymalizacja
Od: Michoo <m...@v...pl>
On 02.04.2012 17:11, M.M. wrote:
> W wewnętrznej pętli zmienną oznaczyłem symbolem "j" i też
> nie zatrzymuje się. Mój GCC ma znowu jakiegoś buga :(
4.6? Kompilowane z 02?
Dump of assembler code for function main:
0x08048380 <+0>: push ebp
0x08048381 <+1>: mov ebp,esp
0x08048383 <+3>: and esp,0xfffffff0
0x08048386 <+6>: call 0x804836c <clock@plt>
0x0804838b <+11>: jmp 0x804838b <main+11>
End of assembler dump.
Wygląda na to, że optymalizator doszedł do wniosku, że to pętla
nieskończona....
--
Pozdrawiam
Michoo
-
47. Data: 2012-04-02 18:25:23
Temat: Re: dalsza optymalizacja
Od: bartekltg <b...@g...com>
W dniu 2012-04-02 17:31, Michoo pisze:
> On 02.04.2012 17:11, M.M. wrote:
>> W wewnętrznej pętli zmienną oznaczyłem symbolem "j" i też
>> nie zatrzymuje się. Mój GCC ma znowu jakiegoś buga :(
Dla for i for j? Coś nie wierzę, przreciez połowa programów
by nie działała;)
> 4.6? Kompilowane z 02?
> Dump of assembler code for function main:
> 0x08048380 <+0>: push ebp
> 0x08048381 <+1>: mov ebp,esp
> 0x08048383 <+3>: and esp,0xfffffff0
> 0x08048386 <+6>: call 0x804836c <clock@plt>
> 0x0804838b <+11>: jmp 0x804838b <main+11>
> End of assembler dump.
To dla wersji z dwoma 'int i'czy jednym 'j' i jednym 'i'?
>
> Wygląda na to, że optymalizator doszedł do wniosku, że to pętla
> nieskończona....
>
>
:)
W sumie widząc to
>> for( int i=0 ; i<30000 ; i++ )
>> for( int i=0 ; i<10000 ; i++ )
>> t += i;
też moja pierwsza myśl była taka, że wewnętrzna
pętla 'resetuje' i do wartości 10000.
I tak by było, gdyby zniknać 'int':
for( int i=0 ; i<30000 ; i++ )
for( i=0 ; i<10000 ; i++ )
t += i;
pzdr
bartekltg
-
48. Data: 2012-04-02 18:30:21
Temat: Re: dalsza optymalizacja
Od: " M.M." <m...@N...gazeta.pl>
Michoo <m...@v...pl> napisał(a):
> On 02.04.2012 17:11, M.M. wrote:
> > W wewnętrznej pętli zmienną oznaczyłem symbolem "j" i też
> > nie zatrzymuje się. Mój GCC ma znowu jakiegoś buga :(
> 4.6? Kompilowane z 02?
gcc --version
gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1
Pozdrawiam
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
-
49. Data: 2012-04-02 18:47:42
Temat: Re: dalsza optymalizacja
Od: Michoo <m...@v...pl>
On 02.04.2012 17:31, Michoo wrote:
> On 02.04.2012 17:11, M.M. wrote:
>> W wewnętrznej pętli zmienną oznaczyłem symbolem "j" i też
>> nie zatrzymuje się. Mój GCC ma znowu jakiegoś buga :(
> 4.6? Kompilowane z 02?
> Wygląda na to, że optymalizator doszedł do wniosku, że to pętla
> nieskończona....
I co ciekawe kod wynikowy jest zgodny ze standardem - występuje integer
overflow a ten jest niezdefiniowany. Co równie ciekawe zmiana t na
unsigned pomaga.
--
Pozdrawiam
Michoo
-
50. Data: 2012-04-02 18:49:11
Temat: Re: dalsza optymalizacja
Od: " M.M." <m...@N...gazeta.pl>
bartekltg <b...@g...com> napisał(a):
> W dniu 2012-04-02 17:31, Michoo pisze:
> > On 02.04.2012 17:11, M.M. wrote:
> >> W wewnÄtrznej pÄtli zmiennÄ oznaczyĹem symbolem "j" i teĹź
> >> nie zatrzymuje siÄ. MĂłj GCC ma znowu jakiegoĹ buga :(
>
> Dla for i for j? CoĹ nie wierzÄ, przreciez poĹowa programĂłw
> by nie dziaĹaĹa;)
Tak, dla for i for j. Jump L2.
.file "main.cpp"
.section .text.startup,"ax",@progbits
.p2align 4,,15
.globl main
.type main, @function
main:
LFB186:
.cfi_startproc
subq $8, %rsp
.cfi_def_cfa_offset 16
call clock
L2:
jmp .L2
.cfi_endproc
LFE186:
.size main, .-main
.globl _ZN3Rnd1rE
.data
.align 32
.type _ZN3Rnd1rE, @object
.size _ZN3Rnd1rE, 40
_ZN3Rnd1rE:
.long 63
.long 50
.long 32
.long 63
.long 39
.long 8
.long 63
.long 58
.long 46
.zero 4
.globl _ZN3Rnd3rs3E
.align 32
.type _ZN3Rnd3rs3E, @object
.size _ZN3Rnd3rs3E, 512
_ZN3Rnd3rs3E:
.quad -8583724644448515302
.quad 7118157242084845153
.quad -3282035833359768471
.quad 4346947973150984197
.quad -3929522514844609824
.quad 829481848689055244
.quad -2104460281609201944
.quad -2247723057926822712
.quad 4194831370794858102
.quad 5929313499994457578
.quad 5581729070166788065
.quad 8372386835039800014
.quad 2168335662247944285
.quad 1351438425912490887
.quad 4285818071787741563
.quad -4081570387039520142
.quad 7536839331681093691
.quad -6661290185539005052
.quad 2320359185900136656
.quad 1978632313520600862
.quad 4096962062831933036
.quad -4379665411168832383
.quad 6419629484951263525
.quad 5442636310441946310
.quad -5938816598903974254
.quad -3072092875946571554
.quad 8737901174932084416
.quad 4856022269066779686
.quad 4410032091286610354
.quad -6534115865556383487
.quad -6239266390217274880
.quad 8233486917874592796
.quad -4818444580511150026
.quad 4351225903379661076
.quad -8197448328801389939
.quad 6407973851176086916
.quad -4826552549406363459
.quad 5289732182092858929
.quad 4044552581888452619
.quad -6648026004256145272
.quad 9139038670684978875
.quad -7864399055233553431
.quad -7150760817394149612
.quad 8623929595382249447
.quad 4046726470009264587
.quad -8621733354270393560
.quad 1202746375481887784
.quad -1996568905897833774
.quad 5949265124488304461
.quad 2063128244095609051
.quad -3574403524654800476
.quad -6563829544703753933
.quad -3808876325438115528
.quad 605667614856985814
.quad -8268592510173211443
.quad 6596676749517440068
.quad -7881761263568887648
.quad 4053830907523517990
.quad -4193352110664377678
.quad 8270676242585114144
.quad 4737251907470449802
.quad 3176667505079447923
.quad 1990788022588220363
.quad 6653156474319876756
.globl _ZN3Rnd3rs2E
.align 32
.type _ZN3Rnd3rs2E, @object
.size _ZN3Rnd3rs2E, 512
_ZN3Rnd3rs2E:
.quad 1505854449413168733
.quad 4961915066344104122
.quad -4043055326178168198
.quad 8468096795144173789
.quad 1395069483638033818
.quad 8950357676976113932
.quad 4046446312871236328
.quad 6583745139183798440
.quad 7784526354135551398
.quad -7914040229563054718
.quad -2104824188792047726
.quad 4728371537881850300
.quad 7095207139894232681
.quad 2070981434591269894
.quad 28520364960727490
.quad 4049619075152921107
.quad -2773744526701786687
.quad -7456467237954964962
.quad -5425242764239979081
.quad 1444060903544076490
.quad 330118002194748599
.quad 6214418995424186498
.quad 2529740036692403052
.quad 6262039890822021197
.quad -2054809411179039359
.quad -2930421477413341315
.quad -5102492181546043037
.quad -5014973046894434476
.quad -5430653906115856448
.quad 6538234763906016820
.quad 3305058296915122624
.quad 98169322383862545
.quad -3950646620094187184
.quad -5043251609832507826
.quad 1670423875712114924
.quad -8870256849461234044
.quad 1525828335576862440
.quad -8198933659884409538
.quad 2751259690180350230
.quad 8690562136283960097
.quad -4124273106309537244
.quad 8543779101341686614
.quad -8020398858434059445
.quad 1763458522807172839
.quad 3939906178899340610
.quad -2032238322041086713
.quad 7326490562108554774
.quad -2844334450886252424
.quad 7693977951473702737
.quad 2419930437037329305
.quad 6351423274105881956
.quad -6041442059361700000
.quad 2916666279466014900
.quad 8135115382024056398
.quad 1179539879136542360
.quad -6628022847909350618
.quad 6066969072850457113
.quad 7046280836833097610
.quad 4437009337959259453
.quad -4847775588596667468
.quad 7645401406929720878
.quad 6172028636179532590
.quad -7117581516364488061
.quad -1439558763525937193
.globl _ZN3Rnd3rs1E
.align 32
.type _ZN3Rnd3rs1E, @object
.size _ZN3Rnd3rs1E, 512
_ZN3Rnd3rs1E:
.quad -1438646000516783171
.quad 5419120948381837081
.quad 7749806717758046827
.quad -3589876829590713310
.quad -2488404680947155487
.quad -3054798282951175775
.quad -6744042199835749509
.quad 1650715883746497548
.quad -5741897883825099307
.quad 3500177734335488163
.quad 3162255476687644029
.quad 4366664397910865530
.quad 2978506469962796109
.quad 8721037942403066172
.quad 2005027041283726567
.quad 4154635062663192616
.quad 1588557737301758664
.quad -8909981318851982234
.quad 8823052911510274523
.quad 4461801726849321768
.quad -5482995873963886362
.quad -3836036263463338396
.quad -6299312877209171085
.quad 1467018588398869605
.quad 1623342643330316372
.quad -5051134097652281269
.quad -9216163978780700986
.quad -1651482624259372890
.quad 1947474159638766059
.quad 7148067428821079985
.quad 5994539789183258002
.quad -5649395634497620757
.quad 2149393019965753138
.quad -7998368239332985783
.quad -5309300234032258740
.quad 2325777404849981093
.quad -4015111275523742270
.quad 2983334429748030370
.quad -7315490570718974864
.quad 1837843891603207445
.quad 4618100832107105398
.quad 5392343219810591469
.quad 3812946107873697401
.quad 8840991501124673060
.quad 8887547788582802987
.quad -7540368994943102539
.quad -8514974619407874040
.quad -8690947781720310809
.quad -8251400146342002633
.quad -3713302494113414338
.quad -6096165168327923815
.quad 3776676776074650601
.quad 3354451566079969350
.quad -8280968836484477750
.quad 5559348035844717751
.quad 341019700413259991
.quad 2195056349914491019
.quad 7864904709204497031
.quad 6629887059143915428
.quad -4550379407851733727
.quad 6384770812713745968
.quad 6609390440428867917
.quad 9121902816993063318
.quad 3857427041121145553
.ident "GCC: (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1"
.section .note.GNU-stack,"",@progbits
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/