Gå til hovedindhold
Version2 it for professionelle
Forsiden

Hovedmenu

  • It-nyheder
  • Blogs
  • It-job
  • It-firmaer
  • Whitepapers
  • Opret bruger
  • Log ind
Du kan logge ind med din e-mail-adresse
Der er forskel på store og små bogstaver i adgangskoden.
Glemt adgangskode?
Se kommentarer (23)
Emner C, Udviklingsværktøjer

LLVM/Clang vs. GCC

Af Poul-Henning Kamp 12. juni 2012 kl. 22:26

Niels og jeg sidder og roder med softwaren til en prototype af et "real-time cluster" til ESO's ELT teleskop.

Vi skal lave en masse matematik hurtigt og aflevere resultaterne tidsmæssigt præcist. Det første tager Niels sig af, det andet roder jeg med.

Vi kører på en ren FreeBSD 9 og prøver at bruge så lidt magi som muligt, det giver det mest portable og brugbare resultat for ESO.

Nærmest af vanvare kom jeg til at compilere et af vores benchmarks med LLVM compiler i stedet for GCC og det gav sådan rundt regnet 20% mere performance, bare sådan...

Jeg har siddet og kigget lidt på assemblerkoden og det ligner at LLVM er meget smartere til loop-unrolling og multi-instruction-issue end GCC er.

Men 20% ?!

Niels siger ovenikøbet at han har set 25% på det der formodentlig ender med at være vores færdige kode...

Er der nogen af jer andre der har set noget lignende ?

Er det kun i floating-point sammenhæng, eller ser I tilsvarende forbedringer i al kode ?

phk

PS: ESO har godkendt ELT projektet vores ESO kontakt sagde at en af de ting de skal bruge er firmaer til at lave software QA/Review, meld jer til bigscience.dk, selv små firmaer kan være med.

Send Tweet
Udskriv
Billede af Poul-Henning KampOm Poul-Henning Kamp

Poul-Henning er selvstændig systemprogrammør, kernekoder, Varnish-forfatter, data-arkæolog og brokkehoved uden særlig portefølje.

Follow @bsdphk

Kommentarer (23)

Opret en konto eller log ind for at følge indhold på Version2 - og bliv opdateret via e-mail eller rss

Følg kommentarer
Dennis Krøger 12. jun. 2012 - 23.12
 
Optimization

Nu skriver du ikke optimiseringsflagene, men så hudt jeg visker kører LLVM som standard med -O2 og GCC ved -O0 som default.

Hvad har du prøvet af optimeringer?

  • Stem op 4
  • Stem ned 0
  • anmeld
  • Log ind eller opret en konto for at skrive kommentarer
Poul-Henning Kamps billede
Poul-Henning Kamp 12. jun. 2012 - 23.26
 
Re: Optimization

Vi brugte -O2 for begge

  • Stem op 0
  • Stem ned 0
  • anmeld
  • Log ind eller opret en konto for at skrive kommentarer
Erik Cederstrands billede
Erik Cederstrand 12. jun. 2012 - 23.39
 
Polly

Det er ikke lige min ekspertise, men har I kigget på http://polly.llvm.org? Så vidt jeg kan se under Performance er deres speedup for matrix multiplikationer i størrelsesordenen x5 i forhold til -O3.

  • Stem op 0
  • Stem ned 0
  • anmeld
  • Log ind eller opret en konto for at skrive kommentarer
Thomas Søndergaard 13. jun. 2012 - 07.30
 
Re: Optimization

Kan vi ikke få alle relevante compiler switches, evt fulde kommandolinier og hvilken cpu din testmaskine har?

  • Stem op 0
  • Stem ned 0
  • anmeld
  • Log ind eller opret en konto for at skrive kommentarer
Thomas (bbb) Hansen 13. jun. 2012 - 07.52
 
OT

OT: Får vi ikke snart en BSD som kører i ram i stil med puppy linux?

  • Stem op 0
  • Stem ned 2
  • anmeld
  • Log ind eller opret en konto for at skrive kommentarer
Jacob Christian Munch-Andersen 13. jun. 2012 - 07.58
 
Re: Optimization

Hvad sker der hvis du bruger -O3 eller -Ofast? Kan vi være sikre på at -O2 er sammenlignelig mellem de to kompilere?

  • Stem op 0
  • Stem ned 0
  • anmeld
  • Log ind eller opret en konto for at skrive kommentarer
Michael Rasmussen 13. jun. 2012 - 08.02
 
Har OS indflydelse

Har i prøvet på andet end FreeBSD 9? Måske har OS også en indflydelse på resultatet.

  • Stem op 0
  • Stem ned 0
  • anmeld
  • Log ind eller opret en konto for at skrive kommentarer
Poul-Henning Kamps billede
Poul-Henning Kamp 13. jun. 2012 - 08.08
 
Re: OT

Det har man kunne gøre i mange år, det er sådan vores installer virker...

Se under "preload" i md(4)

  • Stem op 1
  • Stem ned 0
  • anmeld
  • Log ind eller opret en konto for at skrive kommentarer
Poul-Henning Kamps billede
Poul-Henning Kamp 13. jun. 2012 - 08.09
 
Re: Optimization

Jeg har ikke gravet en masse i det endnu, det kommer måske senere...

  • Stem op 1
  • Stem ned 0
  • anmeld
  • Log ind eller opret en konto for at skrive kommentarer
Morten Siebuhr 13. jun. 2012 - 08.45
 
(Næsten) samme oplevelse

Da jeg skrev speciale for et par år siden i Optimering af McStas, undersøgte jeg bl.a. hvad hhv. ICC, GCC og LLVM præsterede for den givne kodebase (se fig. 4.1, s. 38). LLVM var bagud, men ikke slemt.

Uden jeg har læst op på det, mindes jeg at LLVM/clang generelt klarede sig bedre og bedre, desto "pænere" C jeg fodrede den med. Så det undrer mig ikke at den tre år efter æder kode, skrevet til formålet, råt.

  • Stem op 5
  • Stem ned 0
  • anmeld
  • Log ind eller opret en konto for at skrive kommentarer
Palle Simonsen 13. jun. 2012 - 08.55
 
Re: Har OS indflydelse

Er der ikke en mulighed for i BSD at tildele beregnings processen (near) realtime prioritet og på den måde fjerne / minimerer OS fra ligningen ?

  • Stem op 0
  • Stem ned 0
  • anmeld
  • Log ind eller opret en konto for at skrive kommentarer
Thorbjørn Andersen 13. jun. 2012 - 09.29
 
Angående loop unrolling

Har du prøvet i gcc at tilrette:

max-completely-peeled-insns
max-completely-peel-times

gcc er ikke altid en ørn til at indse at smarte i unroll af mange loops, (selv) hvis koden bliver drastisk reduceret af kendte loop-værdier.

GCC har uhyggeligt mange options, og man ofte kan få den til at gøre 'det rigtige'.
Tilgengæld mener jeg også, at det ikke brude være nødvendigt med dette. -Ox burde (set fra programmøreren) være rigeligt - og den burde justere loop-unlopp udfra hvor meget den får reduceret - og ikke efter en hard-codet parameter ...

Angående performance-tab på 25% - så har jeg kun set noget lignende hvis man må tage MS Visual Studio ind i konkurrencen .... :)

  • Stem op 3
  • Stem ned 0
  • anmeld
  • Log ind eller opret en konto for at skrive kommentarer
Poul-Henning Kamps billede
Poul-Henning Kamp 13. jun. 2012 - 10.03
 
Re: Angående loop unrolling

Jeg må indrømme at jeg ikke har meget til overs for GCCs underlige options: Det bør ikke være min opgave at læse gcc-kildeteksten igennem for at finde ud af hvilke options jeg skal sætte...

  • Stem op 16
  • Stem ned 0
  • anmeld
  • Log ind eller opret en konto for at skrive kommentarer
Morten Andersen 13. jun. 2012 - 10.24
 
Re: Angående loop unrolling
Angående performance-tab på 25% - så har jeg kun set noget lignende hvis man må tage MS Visual Studio ind i konkurrencen .... :)

Interessant - for 10 år siden mener jeg at MSVC var en ret hæderlig compiler til optimeringer. Jeg mener rangordningen var nogenlunde således (bedste øverst):

  • Intel
  • MSVC / Watcom
  • GCC

Og ang. llvm mener jeg også (ca. 1 år gammel viden) at llvm generelt producerede lidt dårligere kode end gcc, men tilgengæld havde en mere clean kodebase. Men det kan jo være den pænere kodebase nu har kapitaliseret sig således at flere har gider tilføje nye optimeringstricks til llvm. Lyder da godt, hvis man således kan få alle fordele ved at bruge llvm.

  • Stem op 8
  • Stem ned 0
  • anmeld
  • Log ind eller opret en konto for at skrive kommentarer
Thomas Fach-Pedersen 13. jun. 2012 - 10.42
 
GPLv3...

Du skriver at du bruger en ren FreeBSD 9, så jeg går ud fra at du kører med default-udgaven af GCC deri.

Så vidt jeg kan læse mig frem til er standard-installation af GCC i FreeBSD 9 en temmelig gammel udgave (4.2.1 20070831).

En nyere udgave af GCC vil formentlig give dig bedre performance, måske også bedre end Clang/LLVM, hvis du og ESO kan leve med kompliceringen i at opgradere GCC og licens-skiftet til GPLv3.

  • Stem op 3
  • Stem ned 0
  • anmeld
  • Log ind eller opret en konto for at skrive kommentarer
Casper Bangs billede
Casper Bang 13. jun. 2012 - 11.34
 
Clang + LLVM_2.0

Jeg kender ikke til hvordan de optimerer, men det er min klare overbevisning at man i dag bør benytte Clang + LLVM_2.0 frem for GCC. LLVM som modular compiler platform, og med al den fokus den modtager (f.eks. fra Apple via Xcode 4), virker det ikke som om der er megen fremtid for GCC. Der har vist også været noget snak omkring hvorvidt Fedora er på vej væk fra GCC og over til LLVM.

  • Stem op 1
  • Stem ned 0
  • anmeld
  • Log ind eller opret en konto for at skrive kommentarer
Poul-Henning Kamps billede
Poul-Henning Kamp 13. jun. 2012 - 14.19
 
Re: Clang + LLVM_2.0

Jeg er ikke religiøs med compilere men jeg har altid fundet det dybt problematisk at GCC havde et så stort monopol.

GCC projektets "kundeservice" lod ikke meget tilbage for det TDC/KTAS i monopoldagene.

På den måde kan man sige at der trods alt er kommet noget godt ud af GPLv3: Det tvang en konkurrent til GCC frem.

  • Stem op 8
  • Stem ned 0
  • anmeld
  • Log ind eller opret en konto for at skrive kommentarer
Lars Lundin 13. jun. 2012 - 17.04
 
Re: Optimization

Vi brugte -O2 for begge

Jeg arbejder med C99-kode, der ikke kan oversættes med clang, så jeg er nødt til at danse med flodhesten...

Vektorisering af løkker (f.eks. med SSEx instruktioner) kan gøre en stor forskel.

Auto-vektorisering er forbedret i gcc 4.7.

Se også -ffast-math, -ftree-vectorize et al.

  • Stem op 0
  • Stem ned 0
  • anmeld
  • Log ind eller opret en konto for at skrive kommentarer
Thomas Søndergaard 13. jun. 2012 - 19.53
 
-march=?

Bygger du til samme cpu? Muligvis er gcc mere konservativ en clang i valg af instruktionssæt, og der kan måske også være forskel på hvor godt gcc og clang optimerer afhængig af -march. Prøv evt at gentage eksperimentet med -march=native.

  • Stem op 0
  • Stem ned 0
  • anmeld
  • Log ind eller opret en konto for at skrive kommentarer
Eske Christiansen 13. jun. 2012 - 22.41
 
c++

Min erfaring siger mig når man oversætter c++ kode med clang++ at der mangler ca. 5-10% i forhold til gcc. (dette er clang 2.1 som kommer med xcode til Mac OS x)

  • Stem op 0
  • Stem ned 0
  • anmeld
  • Log ind eller opret en konto for at skrive kommentarer
Morten Juhl-Johansen Zölde-Fejér 14. jun. 2012 - 02.37
 
OpenBSD/Bitrig

Der er i hvert fald en gruppe OpenBSD-entusiaster, der er kommet til samme konklusion:
http://www.h-online.com/open/news/item/OpenBSD-forked-to-create-Bitrig-1...

  • Stem op 1
  • Stem ned 0
  • anmeld
  • Log ind eller opret en konto for at skrive kommentarer
Kim Højgaard-hansens billede
Kim Højgaard-hansen 15. jun. 2012 - 16.52
 
bedre performance

Et software projekt jeg benytter meget i min PhD har haft nogenlunde samme erfaring, dog med en noget højre -Ox

OMNeT++ Network Simulator

"Compiled OMNeT++ with clang and llvm on OS X. Compile times reduced by 10% and has shown 15% percent speedup with -O4. Pretty cool IMHO."

https://twitter.com/omnetpp/status/160353880159436800

  • Stem op 0
  • Stem ned 0
  • anmeld
  • Log ind eller opret en konto for at skrive kommentarer
Kim Højgaard-hansens billede
Kim Højgaard-hansen 22. aug. 2012 - 13.11
 
GCC version

Får vi nogensinde et svar på hvilken version af GCC du brugte i stedet for at gætte på det må være den der er standard i FreeBSD9? :)

  • Stem op 1
  • Stem ned 0
  • anmeld
  • Log ind eller opret en konto for at skrive kommentarer

Tilføj kommentar

Opret en konto eller log ind for at følge indhold på Version2 - og bliv opdateret via e-mail eller rss

Følg kommentarer
Log ind herunder eller opret en bruger for at skrive kommentarer
Du kan logge ind med din e-mail-adresse
Der er forskel på store og små bogstaver i adgangskoden.
Glemt adgangskode?

Seneste nyt

Teenager står frem: Derfor hackede jeg Version2

Udgivet 17. maj 16.40Opdateret 17. maj 16.40

Fredagshumor: Sådan ser indbakkens pestilenser ud i virkeligheden

Udgivet 17. maj 15.00Opdateret 17. maj 15.00

New Zealand dropper softwarepatenter

Udgivet 17. maj 14.09Opdateret 17. maj 14.09

Microsoft gemmer udspekuleret jobanonnce på Bing

Udgivet 17. maj 11.35Opdateret 17. maj 11.35

Ny wifi-standard med gigabit-hastighed er en gave til it-chefen

Udgivet 17. maj 10.54Opdateret 17. maj 10.54

Flere it-nyheder »

Tilmeld dig Version2's it-nyhedsbrev og vind den nye iPad.

Seneste debat

  1. Hvorfor blev min disk fyldt op?

    20 comments.
    Last update 20 minutter 47 sekunder
    Skrevet af Peter Toft
  2. New Zealand dropper softwarepatenter

    6 comments.
    Last update 1 time 30 minutter
    Skrevet af Jørgen Henningsen
  3. Sådan kommunikerer du uden at afsløre din identitet

    23 comments.
    Last update 12 timer 1 minut
    Skrevet af Kristian Klausen
  4. Retten er sat: Kusine stævner fætter om familiedomænet

    32 comments.
    Last update 12 timer 28 minutter
    Skrevet af Kristian Klausen
  5. Teenager står frem: Derfor hackede jeg Version2

    25 comments.
    Last update 14 timer 59 minutter
    Skrevet af Baldur Norddahl
  6. Send penge til alle med en sms

    15 comments.
    Last update 17 timer 20 minutter
    Skrevet af Daniel Hardy
  7. Hackere på Version2

    12 comments.
    Last update 18 timer 17 minutter
    Skrevet af Lars Tørnes Hansen
  8. Konkurrence til Raspberry Pi: Ny linux-minicomputer til 260 kroner

    63 comments.
    Last update 18 timer 57 minutter
    Skrevet af Jesper Høgh

Mere debat »

It-virksomheder

4C Management Consulting
|
Aalborg Data
|
Netlinq
|
Interface
|
Greener Pastures
|
Twins Consulting
|
solvo it
|
IT Company
|
Secorigo
|
CapaSystems
|
NNIT
|
Innologic A/S
 

Information

  • Kontakt redaktionen
  • Job- og annoncesalg
  • Teknisk support
  • Om Version2
  • Brugerbetingelser
  • Cookie- & privatlivspolitik

Aktuelle emner

  • Agil udvikling
  • Business Intelligence
  • Cloud computing
  • Intranet
  • It-sikkerhed
  • NemID
  • Open source CMS
  • Projektledelse
  • Scrum
  • Sharepoint intranet
  • Storage
  • Ubuntu
  • Virtualisering
  • Windows 8
  • Windows Server 2012
  • iOS 6
  • iPhone 5

Tjenester

  • iPhone-app
  • RSS-feeds
Følg @version2dk
Tilmeld dig Version2's it-nyhedsbrev og vind den nye iPad.

Version2 udgives af

  • Mediehuset Ingeniøren A/S work Trekronergade 26 2500 Valby
  • Tlf. work 33265300