optymalizacja gcc?

Tomasz Grobelny grotk w poczta.onet.pl
Czw, 27 Sty 2005, 16:09:16 CET


On Thursday 27 January 2005 15:47, Pawel Sikora wrote:
> On Thu, 27 Jan 2005, Tomasz Grobelny wrote:
> > Niech mi ktoś przekonująco wyjaśni dlaczego program zoptymalizowany na
> > 686 jest wolniejszsy od zoptymalizowanego dla 586...
> >
> > $ gcc -O2 -march=i586 -mcpu=i586 crctest.c crc.s
> > $ ./a.out
> > In C   - CRC = B02F7096, time =     16
> > In ASM - CRC = B02F7096, time =     18
> > $ gcc -O2 -march=i686 -mcpu=i686 crctest.c crc.s
> > $ ./a.out
> > In C   - CRC = B02F7096, time =     18
> > In ASM - CRC = B02F7096, time =     18
> > $
>
> sprawdz sobie jeszcze -march=i[345]86 (+/- -funroll-all-loops)
> 486 powinno byc najwolniesze, bo ztcp. to kompilator rozdklada
> punkty skoku w petlach na granicy 16 bajtow i procesor bedzie
> mial duzo latania po nop-ach. na 386 i 586 punkty leza na granicy
> 8 bajtow. z unrollem powinien mniej skakac, wiec obstawiam,
> ze 386/586+unroll beda najszybsze. sprawdz jak masz chec.
Zabawa z -funroll-all-loops zaowocowała kolejną ciekawostką:
$ gcc -march=i686 -mcpu=i686 -O2 -funroll-all-loops crctest.c crc.s
$ ./a.out
In C   - CRC = B02F7096, time =     14
In ASM - CRC = B02F7096, time =     18
$ gcc -march=athlon -mcpu=athlon -O2 -funroll-all-loops crctest.c crc.s
$ ./a.out
In C   - CRC = B02F7096, time =     16
In ASM - CRC = B02F7096, time =     18
$ 

Tomek




Więcej informacji o liście dyskusyjnej pld-devel-pl