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

DF vil gøre det muligt for ofre for identitetstyveri at få nyt CPR-nummer

Udgivet 22. maj 11.37Opdateret 22. maj 11.37

Markant færre netbankindbrud i 2013: Kun 380.761 kroner er stjålet

Udgivet 22. maj 10.44Opdateret 22. maj 10.44

NemID-krav har skræmt danske spillefugle fra pc'en over på mobilen

Udgivet 22. maj 9.58Opdateret 22. maj 9.58

Ny Xbox One kører spil og Windows på Hyper-V

Udgivet 22. maj 9.28Opdateret 22. maj 11.29

Ny rapport: Jo mindre piratkopiering, desto større økonomisk vækst

Udgivet 22. maj 7.45Opdateret 22. maj 7.45

Flere it-nyheder »

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

Seneste debat

  1. DF vil gøre det muligt for ofre for identitetstyveri at få nyt CPR-nummer

    1 comment.
    Last update 23 minutter 53 sekunder
    Skrevet af Ove Andersen
  2. NemID nåede ikke målene for support i halvdelen af 2012

    3 comments.
    Last update 39 minutter 26 sekunder
    Skrevet af Gustav Brock
  3. Sådan gemmer Det Kongelige Bibliotek alle danske computerspil

    10 comments.
    Last update 40 minutter 57 sekunder
    Skrevet af Thue Kristensen
  4. Ny rapport: Jo mindre piratkopiering, desto større økonomisk vækst

    8 comments.
    Last update 41 minutter 42 sekunder
    Skrevet af Leif Lodahl
  5. Kabelpriser

    46 comments.
    Last update 53 minutter 33 sekunder
    Skrevet af Søren Mejlhede
  6. Ny wifi-standard med gigabit-hastighed er en gave til it-chefen

    15 comments.
    Last update 56 minutter 34 sekunder
    Skrevet af Christian Nobel
  7. Ny Xbox One kører spil og Windows på Hyper-V

    4 comments.
    Last update 1 time 3 minutter
    Skrevet af Pelle Söderling
  8. Brug for billed-backup? Flickr giver 1 terabyte gratis lagerplads

    1 comment.
    Last update 1 time 4 minutter
    Skrevet af Claus Jepsen

Mere debat »

It-virksomheder

Docas Systems
|
Twins Consulting
|
Secu
|
Netop Business Solutions
|
Financys
|
Queue-IT
|
Rehfeld
|
ProData Consult
|
MOC
|
Tradeshift
|
Zylinc
|
CODEWIRE.NET
 

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