Gå til innhold

GCC ytelse i Windows versus Linux og andre ytelsesspørsmål.


Anbefalte innlegg

Hei. Jeg driver og tester et lite numerisk tungt C++ program for å få en viss ide om hvordan forskjellige kompilatorer yter. Programmet er rimelig enkelt på ca. 300 linjer og består bare av en hel del flyttallsoperasjoner og et par if-tester (det er en enkel simulasjon av sola, jorda og jupiter i to dimensjoner). Programmet er ikke parallelisert. Jeg har funnet noen litt merkelige resultat syns jeg, og lurer på om noen har kommentarer på hvorfor ytelsen blir slik den blir. Jeg har brukt Windows 7 og Ubuntu 9.10 på en AMD Phenom II PC.

 

Det skal sies at jeg ikke er særlig kunnskapsrik på dette området, jeg er stort sett en nybegynner innen programmering.

 

Kompilatorene jeg har brukt er:

MS Visual Studio 2008 Pro (Windows)

Intel C++ (Windows)

GCC 4.4 (Windows vha. MinGW)

GCC (hva enn man får når man skriver sudo apt-get install g++ i nyeste Ubuntu) (Ubuntu)

 

Det eneste jeg har brukt annet enn de vanlige -O3 (for gcc) og -Ox (for icc og MS VS) kompilatorflaggene er at jeg har prøvd både med og uten floating point optimizations (-ffast-math i gcc og fp:fast i icc og MS VS). Resultatene mine er for Windows:

 

MS VS -Ox: 103 sek

MS VS -Ox -fp:fast: 100 sek

ICC -Ox: 88 sek

GCC -O3: 61 sek

GCC -O3 -ffast-math: 25.2 sek

ICC -Ox -fp:fast: 15.9 sek

 

Og for Ubuntu:

GCC -O3: 45 sek

GCC -O3 -ffast-math: 12 sek

 

En ganske kjapp og uhøytydelig test, men det gir allikevel et klart resultat. Spesielt syns jeg det er merkelig at GCC skulle yte så ekstremt mye bedre på Ubuntu versus Windows 7. Det ser jo også ut som om Ubuntu yter mye bedre enn Windows 7 generelt, når selv ICC på Windows med alle optimaliseringer jeg vet om påskrudd må se seg slått av GCC på Ubuntu.

 

Er det noen som har noen kommentarer på disse resultatene? Gir de i det heletatt mening?

Lenke til kommentar
Videoannonse
Annonse

Det er jo en vanvittig stor forskjell, men jeg har ingen forklaring på det. Jeg håper ikke en av maskinene kjører under virtuell maskin, spesielt ikke ubuntu :p

Det første som slår meg er dog om du kompilerer 32-bit eller 64-bit, men mine tester viser at det gir en ytelsesøkning på 50%, og ikke ~100% som testen din gir.

 

Det som får meg til å tvile litt på instillingene dine, er at Intel C++ er rangert som den kompilatoren som gir desidert best ytelse i alle tester jeg har sett.

Lenke til kommentar

Ubuntu vet jeg ikke om jeg har 32 eller 64-bit (brukte en Windows-installer, og der var det ikke noen 32/64-bit valg). Windows 7 er 64-bit, og både MS VS og ICC har jeg kompilert i 64-bit (gir ca. 20% ytelsesøkning for dette programmet versus 32-bit). GCC på Windows har visst kompilert til 32-bit. Vet ikke hvordan jeg krangler den over til 64-bit (Linux og CLI annet enn Powershell er ikke helt min greie :p).

 

Jeg forventet også at ICC skulle vært best, men jeg har knotet ganske mye med instillingene og finner ikke noe som yter bedre (og på Windows slår jo ICC GCC ganske godt også).

Lenke til kommentar

Jeg skal ikke nekte for at Ubuntu kanskje yter bedre enn Windows 7, men jeg synes forskjellene er suspekt store. Jeg har ikke noen Ubuntu installasjon her å teste med på denne maskinen, men ellers skulle jeg gjort det. Jeg skal muligens se om jeg får gjort det på skolen. Der har vi CentOS og Windows XP på alle maskinene på datalabben.

Edit: Får jeg se på programmet?

Endret av GeirGrusom
Lenke til kommentar

Legger ved koden her. Det må som sakt sies at jeg er nybegynner, og jeg har heller ikke tenkt noe på optimalisering i dette programmet. Jeg har bare skrevet ligningene rett inn og ikke brydd meg ut over det :).

 

Får ikke lov til å legge ved filen (Upload failed. You are not permitted to upload this type of file), så hiver den i spoiler tags i stedet.

 

Edit: Kom på at jeg kanskje ikke burde legge ut koden til en innlevering med frist neste uke :p Har sendt den på PM i stedet.

Endret av dravisher
Lenke til kommentar

Har utført samme test på lab-PC-ene på universitetet (Intel Core 2 Quad med Red Hat Enterprise Linux). Testene er utført med ICC 11.0 og GCC 4.1.2.

 

GCC -O3 -ffast-math: 14.8 sek

ICC -O3 -fp-model fast: 15.5 sek

ICC -O3: 15.5 sek

GCC -O3: 50 sek

ICC -O3 -fp-model precise: 67 sek

 

Her er GCC hakket kjappere enn ICC igjen, selv om ICC er (nest) nyeste versjon, mens GCC er noe utdatert. Etter hva jeg forstår er -ffast-math og -fp-mode fast ca. det samme. Begge valgene kan bryte ISO / IEEE 754 for å oppnå bedre ytelse. Hvis man ikke tillater slike standardbrudd er GCC mye kjappere enn ICC, mens når man tillater det så er forskjellen ganske liten. Det er mulig det ligger litt mer i disse valgene (det er rimelig magert med info å finne), men det er slik jeg har forstått det.

 

Litt rart at Intel ikke anser standardstøtte som like viktig som det GCC gjør, det blir jo ganske feil å sammenligne GCC -O3 med Intel -O3 når de har en såpass forskjellig innstilling til dette.

 

Edit: fp-mode fast=2 gir ikke bedre ytelse for ICC.

Endret av dravisher
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...