mboost-dp1

unknown

GCC 4.2.0 udgivet

- Via Gnu - , redigeret af Pernicious , indsendt af trylleklovn

En af de mest benyttede opensource compilere, GNU Compiler Collection, GCC, er nu blevet udgivet i en version 4.2.

Blandt en stor liste af forbedringer i den nye version, kan der nævnes at, optimizeren er blevet forbedret samt at OpenMP nu understøtter både C, C++ og Fortran compilerne.





Gå til bund
Gravatar #1 - carb
19. maj 2007 12:07
Oh crap :(

(kører gentoo på en celeron 433)
Gravatar #2 - TheThufir
19. maj 2007 12:10
#1 Haha! "Have a good week compiling ;)"

Nice de har forbedret optimizeren.. Super! :)
Gravatar #3 - mikbund
19. maj 2007 12:44
#1:
Gentoo er et meget godt system, jeg synes bare det tager for laaaang tid at compile i forhold hvad der vindes ved det(ud over nørd værdien i det).
Gravatar #4 - Benjamin Krogh
19. maj 2007 13:03
#off topic

#3 jeg er selv Gentoo bruger, og ja installationen er sku lang, og tror ikke at performance forskellen er bare i nærheden af det værd.

Men grunden til at jeg benytter Gentoo er da også systemet, der er nærmest genialt. Ved samtlige andre distributioner har jeg manglet programmer i pakke systemet, hvilket førte ud i det klassiske dependency helvede.

Gentoo klarer det hele. Findes pakken ikke i portage, eksisterer det ikke ;)
Med en Core2Duo er compile tiden nu ikke så slem. Man laver en liste og lader den stå natten over.

#On topic
Glæder mig til GCJ kommer lidt længere, lige nu er, næsten alt der har med GUI at gøre, ubrugeligt.

Kan ikke helt blive enig med mig selv om det er en god ting de ændrer på løkker der fortsætter i uendelighed.
Det er jo programmeringsfejl der burde rettes i koden i stedet.
Gravatar #5 - ysangkok
19. maj 2007 13:23
Engelsk Wikipedia om OpenML (jeg vidste ikke hvad det var):

The OpenMP (Open Multi-Processing) is an application programming interface (API) that supports multi-platform shared memory multiprocessing programming in C/C++ and Fortran on many architectures, including Unix and Microsoft Windows platforms. It consists of a set of compiler directives, library routines, and environment variables that influence run-time behavior.

Dejligt at se at der sker noget inden for compilere. Jeg lavede en lille test (ret dårlig faktisk) den anden dag, hvor jeg prøvede at compile det samme program med de samme compiler-parametre, med forskellige versioner af GCC:
18324 yellow_rose_gcc2.95
18124 yellow_rose_gcc3.3
18072 yellow_rose_gcc3.4
17828 yellow_rose_gcc4.1

Compiler parametre var "-O2 -ffast-math -DBLKSIZE=1024 -Wall" og alle executables var stripped. Det interessante er IMHO at fremgangen (størrelse) sker i sådan nogle bitte små skridt.
Gravatar #6 - C#
19. maj 2007 13:29
#5 om et program fylder nogle få bytes mindre har vel ikke den store betydning idag, synes det er mere interessandt hvordan den optimerer ens kode så det performer bedre / udnytter ens resourcer bedre.

Det sagt er jeg ikke imponeret over runtimes der æder en masse hukomelse, f.eks et helloworld java/c# prog der bruger 20MB ram på at gøre næsten nada.
Gravatar #7 - mathiass
19. maj 2007 14:01
f.eks et helloworld java/c# prog der bruger 20MB ram på at gøre næsten nada.
Vi har diskuteret det der en del gange før. Jeg vil bare lige henvise til sidste gang, vi gjorde det. Det samme som jeg har skrevet der om java, holder for C#. Du kan ikke sammenligne programmer der kører i VM'er med programmer der kører uden. Og det er ikke nødvendigvis sådan at dem i VM'er yder dårligere...
Gravatar #8 - DjMadness
19. maj 2007 14:03
#1
så er det tid til distcc når alle pakkerne skal recompiles :D

#4

Gentoo klarer det hele. Findes pakken ikke i portage, eksisterer det ikke ;)


Jeg ville ønske den havde alle pakkerne, men det er desværre ikke alt den har, det er dog meget tæt på.

-mtune=generic can now be used to generate code running well on common x86 chips. This includes AMD Athlon, AMD Opteron, Intel Pentium-M, Intel Pentium 4 and Intel Core 2.

Jeg gad vide om distro's vil bruge -mtune=generic istedet for -march=i686.også release versioner direkte til de arch's

-mtune=native and -march=native will produce code optimized for the host architecture as detected using the cpuid instruction.

Lyder næsten for godt til at være sandt, må nok prøve det engang :)
Gravatar #9 - Benjamin Krogh
19. maj 2007 14:07
#6
om et program fylder nogle få bytes mindre har vel ikke den store betydning idag, synes det er mere interessandt hvordan den optimerer ens kode så det performer bedre / udnytter ens resourcer bedre.

Netop om et program fylder mindre har betydning. Harddiskene er idag flaskehalsen i computeren hvorfor optimering af størrelsen meget vel er den bedste måde at optimere på.
Det kan vel næsten stilles sådan op at mindre executables altid er hurtigere så længe CPU utilization er mindre en 100%.
(Jaja, groft eksempel, men se pointen i stedet for at flame eksemplet.)
Gravatar #10 - jl
19. maj 2007 14:42
#9
Ja, harddisken er ganske vist ofte flaskehalsen, men på ingen måde i denne sammenhæng.
Det spiller ind ved store mængder data processing fra disken, men når det kommer til at loade en exe fil én gang op i rammen kan de små forskelle aldrigt komme til at tage mere end ét sekund én gang.
Gravatar #11 - Benjamin Krogh
19. maj 2007 14:56
#10 Forskellene i performance er målt i ms, hvilket performance forskellen for mit eksempel også er. Ja for 1 exe fil vil det normalt ingen betydning have, men der er jo noget som boot (Om end det er relativt ukendt herinde).
Ja, når alting er lagt i ram er forskellen givetvis ikke eksisterende, og den performanceoptimerede binari er at foretrække.

Det eneste tidspunkt jeg venter på min com, er under opstart af programmer. Min Core2Duo kværner alt hurtigere end jeg kan kaste det efter den, hvorfor jeg stadig vil holde på at optimeret binary size er "hurtigst", i hvert fald opfattelsesmæssigt.
Gravatar #12 - jl
19. maj 2007 15:07
11# Er du enig i at under opstart indlæses der max ca. 50 executables? Er du enig i at de bittesmå forskelle i størrelsen max kan tage 0.01 sekund længere?

Iøvrigt er jeg ret sikker på at loadningen af exe filen op i rammen tidsmæssigt er meget lille i forhold til hvad exe filen laver når den er loadet, og begynder at kommunikere med hardware(f.eks. harddisken), derfor er det ikke der man skal fokusere for at øge hastigheden på boot.
Gravatar #13 - Benjamin Krogh
19. maj 2007 15:17
Er du enig i at under opstart indlæses der max ca. 50 executables?
Nej :)

Er du enig i at de bittesmå forskelle i størrelsen max kan tage 0.01 sekund længere?
Nej :)

Jeg tror ikke vi bliver enige ;)

Kunne forestille mig at der kunne opstå situationer hvor en mindre executable vil være hurtigere pga. CPU cachen. Men det er blot gætteri. Nogen der ved noget om dette?
Gravatar #14 - kulpå
19. maj 2007 15:18
Bare af nysgerrighed: ræk lige hånden op, alle dem som bruger Fortran. Hvor mange? Jeg er udemærket bekendt med Fortrans overlegenhed mht. hastighed når det gælder rå beregninger, men stadig...
Gravatar #15 - jl
19. maj 2007 15:35
13# Hvordan vil du så forklare at det ikke er blevet standard at komprimere bytekoden, indsætte det i filen, skriv programmet til at udpakke det komprimerede i hukommelsen, og så kør det?

(Jeg er godt klar over at der eksisterer packers der gør lignende ting,som armadillo, uspack etc. men det er nu ikke pga. performance de gør det)
Gravatar #16 - SmackedFly
19. maj 2007 15:36
#12

Det er ganske enkelt IKKE korrekt. Det er bevist at Linux kan skære over halvdelen af sin boot tid væk, ved at fuldt optimere boot tiderne.
Derudover er det langt fra rigtigt at der kun loades 50 binære ekserkverbare filer, hvilket i øvrigt er irrellevant for den mængde eksekverbar data der ekserkveres, da halvdelen af opstarttiden ofte vil ligge i linkbare objekter (.so/.dll), der reelt er eksekverbart data (der dog ikke i sig selv kan ekserkveres).

#13

-Os (optimize for size) er ofte hurtigere end -O2 (2 pass optimizations afair) især hvad angår mindre programmer.
Gravatar #17 - jl
19. maj 2007 15:45
16#
Det er ganske enkelt IKKE korrekt. Det er bevist at Linux kan skære over halvdelen af sin boot tid væk, ved at fuldt optimere boot tiderne.

Huh? hvad mener du med at optimere boot tiderne? Naturligtvis bliver boottiden mindre ved at blive optimeret, men her taler jeg om hvorvidt at mindre executables konsekvent vil give lavere boot tid......


Derudover er det langt fra rigtigt at der kun loades 50 binære ekserkverbare filer, hvilket i øvrigt er irrellevant for den mængde eksekverbar data der ekserkveres,

Korrekt, hvis at linkbare objekter tages med i ligningen ryger vi nok over de 50, men jeg medtog ikke dem i udregningen, da jeg opfatter det som ting der bliver gjort EFTER at executablen først er loadet op i ram, og det er netop hvad vi diskuterede.
Men du har ret i at de bør medtages i ligningen hvis man vil beregne på opstarts tid, dog mener jeg at siden det også er tilfældet med de linkbare objekter at det der tager tid er koden der bliver kørt, og ikke at det bliver læst fra disken vil det stadigtvæk holde at loadningen fra harddisken drukner i det store regnestykke, det er endda endnu mere udpræget da det kun skal loades én gang op i hukommelsen uanset hvor mange applikationder der bruger dem.
Gravatar #18 - arne_v
19. maj 2007 15:47
#9

Disk access er flaskehals i en del sammenhænge, men at en EXE fylder
500 bytes mindre har ingen praktisk betydning. Heller ikke
ved 5000 eller 50000.
Gravatar #19 - Benjamin Krogh
19. maj 2007 15:48
#15 det er også mig en gåde. Men jeg vil henvise til #16, der umiddelbart ser ud til at vide mere end mig om dette.

#16 Tak for bekræfte mig bare lidt i min syge tankegang :D
Gravatar #20 - arne_v
19. maj 2007 15:49
#14

Det er efterhånden sjældent. Men jeg kan stadig kode det.
Gravatar #21 - arne_v
19. maj 2007 15:50
#15

Det gør Java også med jar filer ...
Gravatar #22 - arne_v
19. maj 2007 15:53
#17

Selvfølgelig skal .so/.dll tælles med.

Hvis der skal loades 5 MB kode, så er det vel ligegyldigt om
det hele er static linket i en kæmpe EXE eller er en 500 KB EXE
og så 45 DLL af 100 KB.
Gravatar #23 - arne_v
19. maj 2007 15:53
Men jegtror stadigvæk ikke på at tiden det tager at læse fra disk
er den store del af opstarts tiden.
Gravatar #24 - jl
19. maj 2007 15:55
#21 korrekt, men jeg TROR at hvis du prøver at køre en java applikation fra en jar(zip) fil, vs en der ikke er jarret vil jar filen næppe være hurtigere til at starte op.
Jeg er under det indtryk at jar primært bliver brugt til at samle class filerne på en praktisk måde.

#22
"Men du har ret i at de bør medtages i ligningen hvis man vil beregne på opstarts tid"
Var det ikke også præcist det jeg sagde?
Gravatar #25 - Albatross
19. maj 2007 15:57
#4
Alt og alt er nok så meget sagt...et eller må de mangle:
Gentoo Portage:11673 (ifl. http://gentoo-portage.com/Statistics)
apt-cache stats på en debian unstable/experimental: 21294 (unikke navne så den tæller ikke dobbelt pga af en splittet system, virtuelle pakker er heller ikke med)
Selvfølgelig er Gentoo nice men brug hellere de rigtige argumenter :D (nørd appeal, open source spirit)

Let mere Ontopic så er det da rart at se forbedringer i gcc, selvom der stadig er god vej til at nå samme resultater som intels compiler. (Ja jeg ved godt de har det nemmere da deres ikke er cross platform men alligvel)
Gravatar #26 - arne_v
19. maj 2007 15:58
#24

Ikke noget målbart ihvertfald.

De fylder alt for lidt til at betyde noget.

Man kunne også godt have samlet filerne ved at bruge et ikke
komprimerende format som tar, men man valgte altså zip format.
Jeg antager at det er for at minimere download hastighed.

Der betyder størrelse nemlig noget.
Gravatar #27 - SmackedFly
19. maj 2007 16:10
#17

Sorry, jeg skrev lidt for hurtigt, linux kan halvere sin boot tid, ved at optimere disk adgangen under booten, ca. 50% af tiden bruges på at vente på at ekserkverbart data bliver indlæst i hukommelsen.

Jeg tror nu stadig der bliver brugt over 50 eksekverbare filer, også foruden .so/.dll objekter, ihvertfald i linux boottid, windows ved jeg ikke nok om. Hvis du tjekker init skripts, vil du finde en fascinerende mængde binaries der bliver kaldt.
Gravatar #28 - arne_v
19. maj 2007 16:14
#27

Men hvad er "optimere disk adgangen" ?

Færre executables ?

Executables lagt på disken så de læses med færre hoved flytninger ?
Gravatar #29 - jl
19. maj 2007 16:15
27#
Aha, og hvordan udfører den så denne optimering, og hvorhenne kan jeg læse det bevis du snakker om?
Gravatar #30 - jl
19. maj 2007 16:23
27# Og ja, ved nærmere eftertanke er der nok over 50, lad os bare sige 150, min pointe var bare at uanset hvor mange det var kommer det næppe sammenlagt over 1 sekund.
Windows er også ret slem på det punkt, services og drivers skal jo også tælles med, hvilket jeg ikke gjorde da jeg kastede tallet ud.
Gravatar #31 - SmackedFly
19. maj 2007 17:22
#28,#29,#30

Læs de her:
http://lkml.org/lkml/2006/5/15/46
http://lkml.org/lkml/2006/5/15/60

Jeg kan se jeg ikke huskede rigtigt med 50%, mente det var mere, min fejl, men forskellen var 12 sec, hvilket indikerer at data mængden (men dog nok især søgetiden) er meget vigtig.
Gravatar #32 - jfs
19. maj 2007 18:03
#15
Fordi det er ineffektivt i et moderne virtual memory OS. Jeg kan i hvert fald fortælle at for almindelige ikke-pakkede binære filer laver NT kernen en mapping (copy-on-write) af den eksekverbare kode ind i virtuel hukommelse og lader VM systemet håndtere loading fra disk. Sagt på en anden måde bliver EXE filen (eller DLL'en eller hvad du nu har fat i) så at sige midlertidigt en del af din pagefile sådan så du hverken bruger RAM eller pagefile på at holde kode der er paget ud. Jeg vil tro (håber?) at andre OS bruger lignende metoder.
Med en pakker til eksekverbare filer kan man ikke få de fordele, der må koden altid blive pakket ud i hukommelsen og ligge der, og måske ryge over i pagefilen.
Gravatar #33 - jl
19. maj 2007 18:17
31>>>Er tricket der giver den store performance boost ikke at man undgår et forholdsvist langsomt opslag i den store fattabel for hver fil der skal hentes, og dermed øger hastigheden?

#32 Nu kunne der jo kompenseres for dette i OS´et, hvis at det var tilfældet at komprimeret kode konsekvent ville være hurtige, men det er det ikke, og derfor er OS ikke designet til programmer der fungerer på den måde, jeg mener også der er andre sideeffects ved at gøre det sådan, der besværliggører optimering bla. ved dll filer da IAT ikke stemmer overens da den er pakket, men er ikke sikker.
Gravatar #34 - SmackedFly
19. maj 2007 18:37
#33

Fil tabellen er ubetydelig mht. performance, den bliver læst en gang når den bliver mountet og derefter synkroniseret til hukommelsen. Du laver ikke opslagene direkte på disken hver gang, du laver dem i hukommelsen og synkroniserer ændringer til disken, alt andet ville også være skørt.
Gravatar #35 - mora
19. maj 2007 18:45
#6 hvis det nu er en compile til et embeddet system der har meget begrænset plads, så betyder et par bytes rundt omkring alligevel noget.
Gravatar #36 - jl
19. maj 2007 18:48
#33 Nu tænker jeg mere på opslaget i selve fatten, ikke selve indlæsningen af den, er udmærket klar over at den bliver cached og ikke hele tiden skal læses igen.
Men såvidt jeg forstår artiklen er dets virkemåde at den gemmer de nødvendige filer liniært,efter hvilken rækkefølge der er brug for dataen, så den kan nøjes med et hurtigt opslag i en array lignende datastuktur, istedet for at den hele tiden skal slå adresser op i et b-tree.
Gravatar #37 - SmackedFly
19. maj 2007 18:57
#36

Jo, men det kommer du for såvidt heller ikke uden om med den her løsning, tabellen skal om alle omstændigheder læses før systemet kan tages i brug, og da det knap tager et sekund at mounte et ext3 filsystem er det næppe problemet.
Ideen her er, at den data der åbnes under start af systemet, ligges ned på en alternativ partition (eller et loopback filsystem) i rigtig rækkefølge, så du dels undgår søgninger og dels kan hente dataen ind i hukommelsen før den skal bruges og derved slipper for at skulle vente på at filerne hentes fra disken, og istedet hente dem fra hukommelsen.

Men det har helt sikkert mere med søgetid at gøre, end store binære filer...
Gravatar #38 - jl
19. maj 2007 19:02
37# Ja, netop, søgetid! Derfor kan jeg ikke se hvordan at den artikel relaterer til hvorvidt det er forkert at jeg siger at det er ubetydeligt om en exe fil fylder lidt mere når den skal indlæses fra harddisken i forhold til boot hastighed.......
Og det kan ikke sammenlignes at cache ALLE filer i forhold til at skulle indlæse en smule ekstra
Gravatar #39 - SmackedFly
19. maj 2007 19:07
#38

Hvis du har 150 af dem? :) Men du har ret, det er relativt begrænset, jeg tror jeg fik udvidet dit argument lidt rent mentalt, det må du undskylde.
Gravatar #40 - Benjamin Krogh
19. maj 2007 23:23
For at retfærdiggøre mine argumenter minimalt har jeg compilet wine med -Os og -O2.
-O2: 141148 KB
-Os: 131568 KB

Altså en forskel på ~10 MB. Jeg skal altså vente på at wine loader ca. 10 MB mere fra disken i det ene tilfælde. (Forudsat at jeg bruger samtlige linier kode i wine)

For god ordens skyld har jeg lagt lister med alle executables op:
http://www.tnb.aau.dk/~bkrogh/testOs.txt
http://www.tnb.aau.dk/~bkrogh/testO2.txt

For at beregne størrelsen har jeg brugt:
http://www.tnb.aau.dk/~bkrogh/calc

Makefiles er følgende:
-O2:
http://www.tnb.aau.dk/~bkrogh/O2Make.rules
http://www.tnb.aau.dk/~bkrogh/O2Makefile

-Os:
http://www.tnb.aau.dk/~bkrogh/OsMake.rules
http://www.tnb.aau.dk/~bkrogh/OsMakefile

gcc -v:
http://www.tnb.aau.dk/~bkrogh/gcc-version

Hvis denne forskel går igen, vil jeg mene at mit argument fra tidligere holder vand: Mindre excecutables er hurtigst så længe CPU utilization er mindre end 100 %.
Gravatar #41 - arne_v
20. maj 2007 00:45
#40

1) Hvor mange af de 10 MB bliver faktisk loadet ved en kørsel
af et eller andet tilfældigt Windows program ?

2) Hvor lang tid er en moderne disk om at læse de MB ?

re 2) Husk at hvis filerne er contigious, så vil der være
nul seek time på at læse X KB ekstra.
Gravatar #42 - Benjamin Krogh
20. maj 2007 01:00
#41
1) Er det ikke flueknep? Jeg kommer med et eksempel der viser reduktion i filstørrelsen, plus fuld dokumentation på test scenarioret, og siger endda at den fulde reduktion _kun_ mærkes hvis samtlige linier kode i wine skal bruges. Skal der kun bruges 1/10 af wine for at køre et givet windows program, må man antage at reduktionen også kun er 1/10.

2) ret kort tid:
Min raptor:
$ time cat fil_på_185MB > /dev/null
real 0m2.365s
user 0m0.007s
sys 0m0.114s
Altså omkring 80 MB/s.

Hvis vi antager at vi har sparet 10 MB har jeg sparet ca 1/8 sekund.

Kan ikke se din pointe i forhold til mit slutargument i #40.
Gravatar #43 - arne_v
20. maj 2007 01:16
#42

Pointen er at det er uden betydning.

Du snakker om at spare 1/8 sekund på at loade 130-140 MB executables.
Gravatar #44 - arne_v
20. maj 2007 01:17
Og hvis det kun er 1/10 der skal loades, så er det 1/80 sekund.
Gravatar #45 - Benjamin Krogh
20. maj 2007 01:54
#44 selvfølgelig. My mistake.

#43
Du snakker om at spare 1/80 sekund på at loade 130-140 MB executables.
korrekt, men det er stadig hurtige, hvilket er min eneste pointe. :)
Gravatar #46 - jl
20. maj 2007 09:06
#40 At det er hurtigere at catte mindre end mere data var jeg ikke i tvivl om, hvad med at prøve at teste hvor lang tid det tager om at eksekvere istedet?
Gravatar #47 - slate
20. maj 2007 09:26
Mener at huske fra en artikel (1999) at Microsoft dengang kompilerede for size ikke speed; mon ikke de havde tænkt/testet lidt over dette valg. Der stod vist lidt begrundelser, men de fortager sig i tågerne
Gravatar #48 - jl
20. maj 2007 10:07
#47 Mon ikke det kunne have noget at gøre med den begrænsede plads på CDer dengang?
Og jeg tvivler på at det stadigtvæk er sådan, jeg mener da jeg f.eks. støder ind i en codecaves(NOP instrukser) i microsoft software, og der er mange sikkerheds kompilerings indstillinger i deres nyeste compiler f.eks. buffer overflow protection, der ihvertfald ikke resulterer i mindre størrelser, det ville være rart hvis du kunne finde den artikel.
Gravatar #49 - flywheel
20. maj 2007 10:59
#48 Ikke nødvendigvis - der er platforme hvor det er mere eller mindre praksis at komprimere executables, hvis du vil have programmerne til at starte hurtigere op.
Har brugt det og det virker og nej jeg vil ikke betragte min 7200rpm Seagate som værende oldnordisk.
Gravatar #50 - drbravo
20. maj 2007 14:53
#40

Der er vel ingen der argumenterer imod, at hvis du laver en størrelsesoptimering, så vil filerne være små. Argumenterne går mere på om det stadigt går hurtigere at optimere på størrelse ift ydelse. Og det viser dine beregninger jo intet om.
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login