GCC 4.5

Címkék

A GNU Compiler Collection (GCC) fejlesztői bejelentették a fordítóprogram-gyűjtemény 4.5-ös kiadását. Ez az új, nagyobb (major) kiadás a számos hibajavításon kívül néhány új szolgáltatást és fejlesztést hoz a 4.4.x ághoz képest. A fejlesztéseken kívül bemutatkozik néhány új target is (például az ARM Cortex-M0, Cortex-A5 processzorok, az ARM v7E-M architektúra és a MIPS 1004K processzorok). Egyes régebbi platformok - Tru64 Unix, Irix, Solaris 7 - támogatása befejeződött. A részletek a honlapon, a változások listájában és itt.

Hozzászólások

flto kurva jol hangzik, tesztelni kene.

Amit nem lehet megirni assemblyben, azt nem lehet megirni.

VC-nél már van valami ilyen. Ott ér valamit?
(LLVM-nél is van ilyen, de ezzel együtt is lassabb mint a gcc, így nem tudom mennyit számít...)

Ha az ember inline-ol ahol lehet (meg ahol a nyelv engedi), akkor nem hiszem hogy bármit gyorsít.

Persze ha az inline nem járható út, akkor sokat hozhat.

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o

Ma nem lesz ra idom tesztelni, de van ahol elfeljtik az inline csodait:
Ezt a tesztet kicsit inline-osabra irva egy ket teszt gyorsabb lett, erdemes lenne ezert megnezni javul -e a dolog ezzel az opcioval. (valami random.c? filet siman includeoltam)
Ha valakinek van ideje kezdheti ezzel :)

Amit nem lehet megirni assemblyben, azt nem lehet megirni.


-O3
Composite Score:          761.13
FFT             Mflops:   646.02    (N=1024)
SOR             Mflops:   708.44    (100 x 100)
MonteCarlo:     Mflops:   308.55
Sparse matmult  Mflops:   907.07    (N=1000, nz=5000)
LU              Mflops:  1235.60    (M=100, N=100)

-O3 -flto
Using       2.00 seconds min time per kenel.
Composite Score:          837.87
FFT             Mflops:   636.58    (N=1024)
SOR             Mflops:   711.05    (100 x 100)
MonteCarlo:     Mflops:   692.74
Sparse matmult  Mflops:   913.39    (N=1000, nz=5000)
LU              Mflops:  1235.60    (M=100, N=100)

Tobb mint dupla, mukodik :)
Gentooban ugy nez ki default lehet majdan.

A kernelen is sokat gyorsithat, filesystem ill. network kodoknal gyakran jol johet, foleg ha nem modulos kernelt gyart az ember.

Amit nem lehet megirni assemblyben, azt nem lehet megirni.

Egyedül a MonteCarlo dupla. Ott a MonteCarlo_integrate is inline nálad?

A többi meg szerintem mérési hibahatáron belül van. Főleg, hogy az FFT gyorsabb -flto nélkül...

Meg persze kérdés, hogy mekkora object file-t generál (VC rohadt nagyot), illetve a végeredmény mekkora...

(Félre ne értsd, szerintem ez egy jó feature, de csodát senki ne várjon.)

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o

A tobbi peldanak majdnem mindegy, kvazi egy-egy file, meresi hiba.
A kodon nem modositottam, ahogy a -O3 szereti, ugy van inline-olva.
A MonteCarlo.c intenziven hasznalja a kulon C fileban implementalt apro fuggvenyeket a Random.c-bol.

En sokat varok tole, a mai Objektum orientalt szemlelt miatt sokszor van a hivasi lancban 1-2 soros fuggveny kulon fileban implementalva. Ami Persze Ordoban mindegy, vegen nagy konstans szorzo lehet :)

Nem veletlen, hogy ez elott az emberek akkor is templatet hasznaltak amikor nem kellett, vagy inline fuggvenyeket tettek header fileba, esetleg #define.
Ujra le lehet szokni az ilyen csunya dolgokrol :)

Meretek: (x86_64, linux)


           not
         stripped   stripped
-O3        23588      18544
-O3 -flto  27394      22640

Osszes object merete:
111592/35464 byte

Amit nem lehet megirni assemblyben, azt nem lehet megirni.

"Siman csak fuggveny bemasolasanal tobbet kell csinalnia"
"Latszolag ugyan azokra a trukokre kepes, mintha egy fileban lettek volna implementalva."

A két dolog szvsz ugyanaz... Mármint az inline-nak pont ez az értelme.

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o

Pár régen várt C++0x feature is benne van már. Lehet kezdeni játszani...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o

Erre kell figyelni:

On x86 targets, code containing floating-point calculations may run significantly slower when compiled with GCC 4.5 in strict C99 conformance mode than they did with earlier GCC versions. This is due to stricter standard conformance of the compiler and can be avoided by using the option -fexcess-precision=fast;