PDA

View Full Version : Compilare con 2 processori


trallallero
04-02-2010, 08:38
Magari è una cosa risaputa, ma da poco ho saputo che basta digitare
make -j3 per compilare usando entrambi i processori.
Se si hanno 3 processori -j4, con 4 -j5 etc etc (non so perchè un numero in più).
Su Linux l'ho messo nel mio .bashrc (alias make='make -j3') mentre su Windows lo devo scrivere sempre (ma uso i make targets di eclipse).

Provare per credere, compila secondo me a più del doppio della velocità.

my 2 cents :D

cdimauro
04-02-2010, 10:12
Non capisco perché non lo faccia già il compilatore. :stordita:

trallallero
04-02-2010, 10:22
Non capisco perché non lo faccia già il compilatore. :stordita:

:boh:

So solo che è arrivato quà un collega con questa nuova info, l'ho provata e son rimasto così :eek:

Adesso sto lavorando su windows e, non so perchè, ho dato per scontato che non si possa fare "make -j3" ma che ci fosse un altro modo.
Stavo per aprire un 3d per chiedere come si fa su win e poi, per caso, ho provato "make -j3" ... eureka :D

Quindi ho cambiato il 3d trasformandolo in un "knowledge sharing 3d".

fero86
04-02-2010, 15:31
faresti meglio a specificare che si tratta di quella ciofeca di GNU Make, anche se lo si capisce benissimo visto che l'utility build di Microsoft sfrutta automaticamente tutti i processori :asd:

comunque, trattandosi di un'opzione del programma make, suppongo che si tratti semplicemente di eseguire separatamente target indipendenti, cioé non dipendenti l'uno dall'altro ne' direttamente ne' indirettamente; nel mio caso (progetti piccoli con 2 o 3 make targets tutto correlati e una sola chiamata al g++) sarebbe piu utile sapere se invece é possibile parallelizzare il lavoro del compilatore visto che i singoli files sorgenti possono essere compilati indipendentemente. ora investigo e poi condivido su questo thread i miei 2 cent di conoscenza; intanto grazie per l'idea :)

trallallero
04-02-2010, 15:37
faresti meglio a specificare che si tratta di quella ciofeca di GNU Make, anche se lo si capisce benissimo visto che l'utility build di Microsoft sfrutta automaticamente tutti i processori :asd:

comunque, trattandosi di un'opzione del programma make, suppongo che si tratti semplicemente di eseguire separatamente target indipendenti, cioé non dipendenti l'uno dall'altro ne' direttamente ne' indirettamente; nel mio caso (progetti piccoli con 2 o 3 make targets tutto correlati e una sola chiamata al g++) sarebbe piu utile sapere se invece é possibile parallelizzare il lavoro del compilatore visto che i singoli files sorgenti possono essere compilati indipendentemente. ora investigo e poi condivido su questo thread i miei 2 cent di conoscenza; intanto grazie per l'idea :)

Vabbè, io sto lavorando adesso su Windows ma è una cosa rara (fortunatamente :D).
E utilizzo QT con Eclipse, quindi mingw, non roba MS di cui so veramente poco.

Ok, se scopri qualcosa di nuovo be venga :)

fero86
04-02-2010, 15:41
mah, non trovo nulla e credo che giá lo faccia da solo: compilando il mio progettino universitario in C++ anche senza specificare -j3 a GNU Make il Task Manager mi segnala forte uso di entrambi i core. in effetti non c'é motivo per cui il compilatore dovrebbe attendere la generazione di un file oggetto prima di generare il successivo.

tomminno
04-02-2010, 16:17
faresti meglio a specificare che si tratta di quella ciofeca di GNU Make, anche se lo si capisce benissimo visto che l'utility build di Microsoft sfrutta automaticamente tutti i processori :asd:


Veramente almeno che tu non lavori con VS2010, la compilazione c++ multithread te la scordi.
Solo con VS2010 sono passati a MSBuild e quindi al supporto al multithread.

fero86
04-02-2010, 18:13
Veramente almeno che tu non lavori con VS2010, la compilazione c++ multithread te la scordi.
Solo con VS2010 sono passati a MSBuild e quindi al supporto al multithread. e chi ha parlato di Visual Studio infatti?

tomminno
04-02-2010, 18:53
e chi ha parlato di Visual Studio infatti?

VS non è altro che un'interfaccia di comodo verso cl.exe e link.exe
Cos'altro fornisce la microsoft per compilare?

fero86
04-02-2010, 20:30
VS non è altro che un'interfaccia di comodo verso cl.exe e link.exe
Cos'altro fornisce la microsoft per compilare? mi sembra una semplificazione un po' grossolana, comunque se rileggi io avevo parlato di build utility; si tratta di un programma che semplifica l'uso di NMAKE.

cionci
05-02-2010, 08:49
E utilizzo QT con Eclipse, quindi mingw, non roba MS di cui so veramente poco.
Prova a QtCreator :read:

trallallero
05-02-2010, 09:23
Prova a QtCreator :read:

Si ce l'ho, ma non l'ho mai provato. Appena torno su Windows (sto su Linux ora) gli do un occhio.

cionci
05-02-2010, 09:53
Si ce l'ho, ma non l'ho mai provato. Appena torno su Windows (sto su Linux ora) gli do un occhio.
Anche su Linux lo puoi provare ;)

Unrue
05-02-2010, 09:55
Vi posso dire per esperienza che non funziona molto bene (su Linux) Spesso compila 2 volte lo stesso oggetto ( vai a capire perché..) e quindi si perde gran parte del vantaggio.

E spesso capita che un core rimanga molto indietro rispetto all'altro.

Io sinceramente consiglio di non usarla. Magari con piccoli Makefile non capita, ma su grossi progetti non ho visto vantaggi per i motivi esposti sopra. Probabilmente dipende da come è strutturato il Makefile.

trallallero
05-02-2010, 10:06
Anche su Linux lo puoi provare ;)
Ops, ho l'icona QtCreator anche sul desktop di Ubuntu :stordita:

OT: Comunque QT è pieno di bugs :O

Vi posso dire per esperienza che non funziona molto bene (su Linux) Spesso compila 2 volte lo stesso oggetto e quindi si perde gran parte del vantaggio.

E spesso capita che un core rimanga molto indietro rispetto all'altro.

Io sinceramente consiglio di non usarla. Magari con piccoli Makefile non capita, ma su grossi progetti non ho visto vantaggi per i motivi esposti sopra.

Fino adesso non ho avuto problemi ma non so cosa intendi per "grossi progetti".
Mi compila benissimo (su Linux) un progetto di circa una quindicina di moduli e in meno della metà del tempo se non usassi i 2 processori.
Potrei chiedere quì in ditta dove fanno le simulazioni (grafica e audio) e hanno progetti veramente enormi.

Unrue
05-02-2010, 10:14
Fino adesso non ho avuto problemi ma non so cosa intendi per "grossi progetti".


Intendo progetti con migliaia di righe di codice, centinaia di file object e Makefile molto complessi.


Mi compila benissimo (su Linux) un progetto di circa una quindicina di moduli e in meno della metà del tempo se non usassi i 2 processori.
Potrei chiedere quì in ditta dove fanno le simulazioni (grafica e audio) e hanno progetti veramente enormi.

Non ne dubito, ma io personalmente purtroppo non ho rilevato vantaggi :)

La cosa migliore è fare una prova, ma senza dare per scontato che si otterrà benefici. Probabilmente è per questo che non è settato di default.

trallallero
05-02-2010, 10:23
Intendo progetti con migliaia di righe di codice, centinaia di file object e Makefile molto complessi.
Immaginavo :D


Non ne dubito, ma io personalmente purtroppo non ho rilevato vantaggi :)

La cosa migliore è fare una prova, ma senza dare per scontato che si otterrà benefici. Probabilmente è per questo che non è settato di default.
Se hai un progetto semplice dove i vari oggetti possono essere compilati senza dipendenze, hai sicuramente vantaggi.
Nel caso di progetti complessi con più makefiles, come quelli che dici tu, la vedo dura in effetti. Forse bisognerebbe lanciare i make in un certo ordine ...


@cionci: fiko QtCreator :fagiano:

Unrue
05-02-2010, 10:25
Forse bisognerebbe lanciare i make in un certo ordine ...



Si, anche secondo me. Però già parallelizzo codici, ci manca che debba parallelizzare anche i Makefile :D

trallallero
05-02-2010, 10:33
Si, anche secondo me. Però già parallelizzo codici, ci manca che debba parallelizzare anche i Makefile :D

Infatti, della serie: c'ho messo un mese a creare i make giusti, ma adesso compila con 15 secondi di vantaggio :asd:

!fazz
05-02-2010, 11:33
:boh:

So solo che è arrivato quà un collega con questa nuova info, l'ho provata e son rimasto così :eek:

Adesso sto lavorando su windows e, non so perchè, ho dato per scontato che non si possa fare "make -j3" ma che ci fosse un altro modo.
Stavo per aprire un 3d per chiedere come si fa su win e poi, per caso, ho provato "make -j3" ... eureka :D

Quindi ho cambiato il 3d trasformandolo in un "knowledge sharing 3d".

man make
questo sconsociuto eh :)

trallallero
05-02-2010, 11:51
man make
questo sconsociuto eh :)

Dai su, tu ogni giorno fai man <qualcosa> per vedere se ci sono cose che non conosci ? ;)

Kralizek
05-02-2010, 14:15
ma nò!

No manual entry for "ò"

battutaccia che girava all'univ...

Facoltá di Ingegneria, brutto posto... :doh: