Pagina 1 di 2

Sfruttare tutti i core nella compilazione.

Inviato: sab 24 mag 2008, 13:57
da Trotto@81
Ma è possibbile sfruttare al massimo le cpu multi core durante la compilazione dei nostri programmi?

Re: Sfruttare tutti i core nella compilazione.

Inviato: sab 24 mag 2008, 14:19
da d4z_c0nf
Trotto@81 ha scritto:Ma è possibbile sfruttare al massimo le cpu multi core durante la compilazione dei nostri programmi?
make -j numero_di_core

così mandi in parallelo n job, 1 per core.

rock

Re: Sfruttare tutti i core nella compilazione.

Inviato: sab 24 mag 2008, 14:32
da davide77
Qualcuno suggerisce si fare numero di core + 1 per sfruttare appieno le cpu. Io, se posso, compilo con -j numero di core x 2, in questo modo ho sempre tutte le cpu al 100%.

Re: Sfruttare tutti i core nella compilazione.

Inviato: sab 24 mag 2008, 14:40
da Mario Vanoni
d4z_c0nf ha scritto:
Trotto@81 ha scritto:Ma è possibbile sfruttare al massimo le cpu multi core durante la compilazione dei nostri programmi?
make -j numero_di_core

così mandi in parallelo n job, 1 per core.

rock
No sempre vero/usabile.

Solo se il Makefile del programma lo ha previsto,
per esempio il kernel in parte (bzImage e modules),
make -j 2 modules_install fallisce (installazione parallela).
Altri progarmmi (la maggioranza) non lo gradiscono.

Re: Sfruttare tutti i core nella compilazione.

Inviato: sab 24 mag 2008, 14:45
da gigiobagiano
Io ho spesso compilato il kernel con opzione -j5 e va tutto senza nessun problema, per fare (bzimage,modules e modules_install) non impiego più di 10 minuti su un T7300

Re: Sfruttare tutti i core nella compilazione.

Inviato: sab 24 mag 2008, 14:51
da d4z_c0nf
Mario Vanoni ha scritto:
d4z_c0nf ha scritto:
Trotto@81 ha scritto:Ma è possibbile sfruttare al massimo le cpu multi core durante la compilazione dei nostri programmi?
make -j numero_di_core

così mandi in parallelo n job, 1 per core.

rock
No sempre vero/usabile.

Solo se il Makefile del programma lo ha previsto,
per esempio il kernel in parte (bzImage e modules),
make -j 2 modules_install fallisce (installazione parallela).
Altri progarmmi (la maggioranza) non lo gradiscono.
Avevo notato il problema con il m
make -j N modules_install
per il resto non sapevo dipendesse strettamente dal Makefile,
facevo riferimento al man make.

rock

Re: Sfruttare tutti i core nella compilazione.

Inviato: sab 24 mag 2008, 14:58
da lyapunov
Ma la regola non era -j <numeroCore+1> ?

Re: Sfruttare tutti i core nella compilazione.

Inviato: sab 24 mag 2008, 14:59
da conraid
Ma modules_install non fa altro che copiare i moduli già compilati nella dir giusta, non è una compilazione vera e propria

Re: Sfruttare tutti i core nella compilazione.

Inviato: sab 24 mag 2008, 15:12
da Vito
Ma se si dà solo make che succede?

Re: Sfruttare tutti i core nella compilazione.

Inviato: sab 24 mag 2008, 15:22
da Mario Vanoni
lyapunov ha scritto:Ma la regola non era -j <numeroCore+1> ?
Per esperienza
make -j numero_dei_pocessori+1
non porta niente, spesso rallenta, ideale e`
make -j numero_dei_processori

Importa di piu` la grandezza del/dei (*) loro L2 cache
e la memoria totale disponibile, piu` grandi sono, meglio.

(*) Core 2 hanno L2 cache in comune,
macchine con 2 XEON ogni CPU ha la sua L2 cache.
Le P4 HT hanno 2 CPU, ma la stessa L2 cache insieme.

Re: Sfruttare tutti i core nella compilazione.

Inviato: sab 24 mag 2008, 15:24
da Mario Vanoni
Vito ha scritto:Ma se si dà solo make che succede?
Lettura sequenziale del Makefile,
usi un solo processore.

Re: Sfruttare tutti i core nella compilazione.

Inviato: sab 24 mag 2008, 15:56
da davide77
Mario Vanoni ha scritto:Per esperienza
make -j numero_dei_pocessori+1
non porta niente, spesso rallenta, ideale e`
make -j numero_dei_processori

Importa di piu` la grandezza del/dei (*) loro L2 cache
e la memoria totale disponibile, piu` grandi sono, meglio.

(*) Core 2 hanno L2 cache in comune,
macchine con 2 XEON ogni CPU ha la sua L2 cache.
Le P4 HT hanno 2 CPU, ma la stessa L2 cache insieme.
È chiaro. Però il ragionamento di cache, processore e ram è valido per ogni lavoro; da quanto ne so io il guadagno o perdita dipende anche dal sorgente: se compili un programma in c++ la compilazione è molto più pesante del semplice c, quindi i vantaggi non si vedono, mentre se compili, ad esempio, il kernel, riduci un po' i tempi aumentando il numero di processi di compilazione rispetto ai core (ovviamente su macchine recenti, su macchine vecchie ad 1 solo core non so quanto valga). La spiegazione è che, quando compili, la prima fase è la lettura dal disco, che, se è la fase più lenta, ti lascia in wait un processo su un core con conseguente perdita di tempo utile, mentre se hai una "scorta" di processi già pronti da compilare riduci il tempo di attesa.

Tutto questo IMVHO, se non è così correggimi pure.

Re: Sfruttare tutti i core nella compilazione.

Inviato: sab 24 mag 2008, 20:39
da Trotto@81
Ho provato a compilare una libreria abbastanza impegnativa come le wxgtk con il mio q6600 con j 4 e non ho sfruttato la cpu oltre il 90%, stesso discorso con 5 processi.
Però una cosa è sicura, queste cpu fanno paura, compilano programmi abbastanza complessi in pochi minuti.

Re: Sfruttare tutti i core nella compilazione.

Inviato: sab 24 mag 2008, 20:51
da Mario Vanoni
davide77 ha scritto: La spiegazione è che, quando compili, la prima fase è la lettura dal disco, che, se è la fase più lenta, ti lascia in wait un processo su un core con conseguente perdita di tempo utile, mentre se hai una "scorta" di processi già pronti da compilare riduci il tempo di attesa.
HD SATA WD 0.5TB con 16MB, Core 2 Dual 1866MHZ,
4MB L2 cache, 4GB di memoria, kernel 2.6.25.3 statico.

make clean
time make -j 2 bzImage
6m35.290s

make clean
time make j 3 bzImage
6m18.364s

sar -P ALL | less, osservando %idle
3...7 nel primo caso
0.03...0.08 nel secondo

Guadagno 19 secondi == 2%.
E con dischi IDE?

Il tutto con macchina idle al 99%.

Re: Sfruttare tutti i core nella compilazione.

Inviato: dom 25 mag 2008, 16:53
da Bart
Anche io pensavo di sfruttare maggiormente la cpu mettendo un core in più di quelli disponibili. La prossima volta che ricompilerò proverò mettendo il numero giusto. Grazie Mario.