dravisher Skrevet 25. november 2009 Del Skrevet 25. november 2009 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
GeirGrusom Skrevet 25. november 2009 Del Skrevet 25. november 2009 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 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
dravisher Skrevet 25. november 2009 Forfatter Del Skrevet 25. november 2009 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 ). 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
GeirGrusom Skrevet 25. november 2009 Del Skrevet 25. november 2009 (endret) 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 25. november 2009 av GeirGrusom Lenke til kommentar
dravisher Skrevet 25. november 2009 Forfatter Del Skrevet 25. november 2009 (endret) 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 Har sendt den på PM i stedet. Endret 25. november 2009 av dravisher Lenke til kommentar
GeirGrusom Skrevet 25. november 2009 Del Skrevet 25. november 2009 Da skal jeg se om jeg får kikket på det, og sett om jeg får samme resultat som deg på skolens maskiner Lenke til kommentar
dravisher Skrevet 25. november 2009 Forfatter Del Skrevet 25. november 2009 (endret) Veldig hyggelig hvis du gidder det Edit: Jeg kjørte med kommandolinjeparametre: program.exe 3 1 0.07 20 0.000001 Endret 25. november 2009 av dravisher Lenke til kommentar
dravisher Skrevet 26. november 2009 Forfatter Del Skrevet 26. november 2009 (endret) 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 26. november 2009 av dravisher Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå