Edificio di Boost in pochi minuti

Qualcuno può spiegare perché seguendo queste istruzioni:

http://www.boost.org/doc/libs/1_59_0/more/getting_started/unix-variants.html#easy-build-and-install

… prende la mia macchina decente 5 ore a costruire tutti Boost, mentre alcune persone report facendo lo stesso in solo 3 minuti ?

C’è un altro modo per costruire la Spinta di quello citato sopra, che infatti va piuttosto veloce (rispetto a diverse ore, a qualsiasi velocità).

Sto usando il compilatore Clang su Darwin (Mac) opzione. Non sono sicuro di come rilevante, ma ho 16 GB di RAM e un recente SSD. Il clock a 2.3 Ghz.

Edit: io sono felice di segnalare, sulla base dei commenti e risposte, che utilizza il ./b2 -j4 -d0 opzioni, ho avuto la mia compilation tempo fino al 13 minuti. Anche il -jN opzione non è presente nel set di opzioni disponibili con il default --help, è invece necessario chiamare --help-options per vedere queste altre più “avanzati” tecniche.

  • che compilatore e la piattaforma?
  • Hai citato nel link che hai un quad core, 3 anno vecchio macbook. Si dovrebbe essere in grado di ridurre di 5 ore per un po ‘ più di mezz’ora utilizzando make -j8; vedere iSanych risposta.
  • Non -d0 davvero influenzare la Spinta a costruire la velocità?
InformationsquelleAutor johnbakers | 2015-11-06

 

3 Replies
  1. 17

    Ho appena fatto un paio di prove con un paio di build diverse configurazioni.

    Hardware: 2012 MacBook Pro (2.3 Ghz Ivy Bridge i7 [i7-3615QM]), la fabbrica di SSD e 16GB di ram.

    Software: Mac OS X 10.11.1 con Xcode 7 (Apple LLVM versione 7.0.0 clang-700.1.76). Nuova copia di Aumentare 1.59.0 dal sito web.

    Ho testato i seguenti comandi di compilazione:

    Default Costruzione:

    ./bootstrap.sh && ./b2 -j N

    Costruire costringendo il collegamento di libc++

    ./bootstrap.sh && ./b2 toolset=clang cxxflags="-stdlib=libc++" linkflags="-stdlib=libc++" -j N

    Per ciascun ho provato tre diversi valori di N: 1 (singolo thread), 4 (corrispondente core fisici), e 8 (corrispondente hyperthreaded core).

    Di Default il collegamento:

    • Con 8 il tempo di costruzione è stato di 6:45 minuti
    • Con 4 il tempo di costruzione è stato di 7:22 minuti
    • Con 1 il tempo di costruzione è di 22 ore e 58 minuti

    Collegamento libc++:

    • Con 8 il tempo di costruzione è stato di 4:35 minuti
    • Con 4 il tempo di costruzione è stato di 5:45 minuti
    • Con 1 il tempo di costruzione è stato 17:15 minuti

    Conclusione: Boost non deve prendere tutto il giorno per costruire un sistema multi-core con un SSD, anche se non è nuovo di zecca. Edificio con il default (individuati thread) non prendere più di un parallelo costruire. La Spinta a costruire con fragore su OS X non beneficio leggermente da hyperthreading. Il collegamento con libc++ sembra un po ‘ più veloce.

    • Molte grazie per l’aiuto su questo. 1 nucleo di costruire può richiedere molto tempo, credo che, se si tratta di qualcosa come il mio.
    • Siete anche voi a fare centinaia di migliaia di build log uscite con la Spinta ./b2 ?
    • Edificio con clang produce un sacco di ripetuti avvisi del compilatore che Linux/gcc costruisce non. Mi prenderò un conteggio esatto quando questa build è fatto, ma in genere sì. Le configurazioni di cui sopra producono un sacco di output.
    • forse tutti che la registrazione di uscita è rallentato le cose per me
    • conteggio finale per la compilazione completa con fragore, come sopra descritto, è stato 318116 linee di uscita. Finale di tempo di costruire su che hardware per un singolo thread era ~17 minuti. Non grande, ma non 5 ore. Probabilmente c’è qualcos’altro con la vostra macchina.
    • Miniera sarebbe caduto sotto il tuo di Default in quanto non ho passare tutte le opzioni a tutti, non forzare ogni collegamento. Aspetterò con impazienza di quello che prova mostra nel vostro caso.
    • È l’-j1 costruire ancora in esecuzione?
    • Ho aggiornato la mia domanda gli ottimi risultati dei vostri suggerimenti, grazie.
    • sono tutti fatti ora. La più lunga j1 costruire preso 23 minuti su questo tipo di hardware. Sembra -j scala è quasi lineare con il numero di core e hyper-threading aggiunge un 10-20% di boost.
    • grazie per l’esecuzione di questi test. Credo che una grande parte del tempo è stato in output del compilatore. Mentre parallelo edificio certamente contribuito molto, stimo che almeno 30 minuti di tempo di compilazione è stata indotta proprio a causa della registrazione dettagliata di uscita, nel mio caso.
    • A parte la sorpresa che clang genera tanto di uscita (come zaphoyd verificato), vi suggerisco di impostare una linea più bassa la dimensione del buffer per il tuo terminale. Non credo che si potrà mai davvero necessario mezzo milione di linee di storia, e sembra notevolmente rallentare.
    • buon punto, che era probabilmente una grande parte del problema per me. era solo un buffer di shell emacs, che mantiene il tutto

  2. 5

    Credo che non si sta utilizzando in parallelo opzione build -gv (dove N è il numero di processi, potrebbe essere di poco superiore al numero di core sulla macchina). Anche 3 min suono come singola configurazione della macchina con sdd o il disco ram, e 5 ore come ogni configurazione con singolo processo lento e HDD.

    • Non ho specificato opzioni, appena usato il Boost di default, come previsto in quel link, quindi credo che io non sono la costruzione in parallelo. Vorrei davvero vedere un aumento di almeno 10 volte nel tempo di costruire andando in parallelo (come suggerito in uno dei commenti alla mia domanda)?
    • Utilizzare ./b2 -jn con n parità di numero di core che si hanno. Si vedrà una riduzione del tempo di costruzione della rotatoria x/n (come dovrebbe essere). Per confronto, ho appena fatto un time ./b2 -j12 sul mio dev workstation (dual hexacore Xeon @ 3.3 GHz), e si avvicinò con 2:05 min tempo reale, 22:54 min tempo utente.
    • 22:54 del tempo è ancora un grido lontano dal mio 300 minuti. Inoltre, la mia generazione di output (i log ./b2 crea) è stato di oltre mezzo milione di linee in base al buffer di shell emacs. È anche normale? Forse tutti che la registrazione era rallentato le cose (anche se non si è sicuri, è possibile disattivare la registrazione, comunque).
    • Se si dispone di 8 Core di CPU, memoria sufficiente, e il disco potrebbe mantenere si potrebbe ottenere almeno 8 volte speedup con -j10. Inoltre, si potrebbe prendere in considerazione di cosa avete bisogno: debug/release/sia, statica/shared/sia – unica variante è molto più veloce di tutti varaints
    • Potrebbe essere che il tuo Mac valori predefiniti diversi dal mio (Linux). Forse si sta costruendo diverse varianti, come ISanych accennate. Come per la registrazione, ho 2131 linee, e il tempo di andare a terminale (rispetto al disco) non dovrebbe essere un problema. C’è un molto di leggere/scrivere il traffico che passa comunque. Quindi… non so perché la tua build è così lento.
    • Potrete vedere qualche miglioramento, specificando in più rispetto al numero di core — supponendo che il core dual core (che sono un 2012 MacBook Pro).
    • Io sono in esecuzione un altro test ora con ./b2 -j4 -d0 per vedere cosa succede….
    • Ho aggiornato la mia domanda gli ottimi risultati dei vostri suggerimenti, grazie.
    • Dico “core”, nel significato di “core” – 2 per il dual core, 4 per la cpu quad core, etc.

  3. 0

    Più spinta pacchetti sono solo intestazioni. Se hai bisogno solo di coloro che poi l’installazione è solo la copia dei file. In base a quanti pacchetti compilati si sta facendo il tempo può variare a seconda di diversi ordini di grandezza. Plus sì, compilazione parallela, macchina diversa (Raspberry Pi vs 32 CPU IvyBridge Lama), etc. Plus edificio e in /dev/shm si può ottenere un significativo aumento di velocità.

    • Come funziona la directory di compilazione incide sulla velocità?
    • /dev/shm è sostenuto da memoria (per esempio un disco ram), piuttosto che la più lenta SSD o HDD.
    • Per essere onesti, alla OP, un sacco di quelle dell’onu-costruito libs sono piuttosto le funzioni di base per l’utilizzo di Spinta, in primo luogo.

Lascia un commento