Sfruttare tutti i core nella compilazione.

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Avatar utente
Trotto@81
Iper Master
Iper Master
Messaggi: 3559
Iscritto il: sab 26 giu 2004, 0:00
Nome Cognome: Andrea
Slackware: Slackware64 14.2 bet
Kernel: default
Desktop: KDE 4.14.14
Località: Monasterace M. (RC)
Contatta:

Sfruttare tutti i core nella compilazione.

Messaggio da Trotto@81 »

Ma è possibbile sfruttare al massimo le cpu multi core durante la compilazione dei nostri programmi?

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar 14 mar 2006, 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.2-current64
Kernel: 4.14.73
Desktop: awesomeWM
Località: Pinerolo

Re: Sfruttare tutti i core nella compilazione.

Messaggio 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

Avatar utente
davide77
Linux 2.x
Linux 2.x
Messaggi: 359
Iscritto il: mar 26 apr 2005, 0:00
Desktop: xfce
Distribuzione: XUbuntu
Località: Bergamo

Re: Sfruttare tutti i core nella compilazione.

Messaggio 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%.

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: Sfruttare tutti i core nella compilazione.

Messaggio 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.

Avatar utente
gigiobagiano
Linux 3.x
Linux 3.x
Messaggi: 530
Iscritto il: dom 11 mar 2007, 12:58
Nome Cognome: Filippo
Slackware: 14.2
Kernel: vanilla-4.4.38
Desktop: xfce
Distribuzione: SalixOS
Contatta:

Re: Sfruttare tutti i core nella compilazione.

Messaggio 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

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar 14 mar 2006, 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.2-current64
Kernel: 4.14.73
Desktop: awesomeWM
Località: Pinerolo

Re: Sfruttare tutti i core nella compilazione.

Messaggio 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

Avatar utente
lyapunov
Linux 2.x
Linux 2.x
Messaggi: 204
Iscritto il: dom 4 mag 2008, 16:12

Re: Sfruttare tutti i core nella compilazione.

Messaggio da lyapunov »

Ma la regola non era -j <numeroCore+1> ?

Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: Sfruttare tutti i core nella compilazione.

Messaggio da conraid »

Ma modules_install non fa altro che copiare i moduli già compilati nella dir giusta, non è una compilazione vera e propria

Avatar utente
Vito
Staff
Staff
Messaggi: 4182
Iscritto il: mar 5 dic 2006, 17:28
Nome Cognome: Vito
Desktop: MacOS
Località: Monaco (DE)
Contatta:

Re: Sfruttare tutti i core nella compilazione.

Messaggio da Vito »

Ma se si dà solo make che succede?
"Stat rosa pristina nomina, nomina nuda tenemus." [ Umberto Eco - Il nome della rosa]

"Faber est suae quisque fortunae ." [ Appio Claudio Cieco]

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: Sfruttare tutti i core nella compilazione.

Messaggio 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.

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: Sfruttare tutti i core nella compilazione.

Messaggio da Mario Vanoni »

Vito ha scritto:Ma se si dà solo make che succede?
Lettura sequenziale del Makefile,
usi un solo processore.

Avatar utente
davide77
Linux 2.x
Linux 2.x
Messaggi: 359
Iscritto il: mar 26 apr 2005, 0:00
Desktop: xfce
Distribuzione: XUbuntu
Località: Bergamo

Re: Sfruttare tutti i core nella compilazione.

Messaggio 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.

Avatar utente
Trotto@81
Iper Master
Iper Master
Messaggi: 3559
Iscritto il: sab 26 giu 2004, 0:00
Nome Cognome: Andrea
Slackware: Slackware64 14.2 bet
Kernel: default
Desktop: KDE 4.14.14
Località: Monasterace M. (RC)
Contatta:

Re: Sfruttare tutti i core nella compilazione.

Messaggio 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.

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: Sfruttare tutti i core nella compilazione.

Messaggio 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%.

Bart
Staff
Staff
Messaggi: 4249
Iscritto il: lun 9 ago 2004, 0:00
Località: Rimini

Re: Sfruttare tutti i core nella compilazione.

Messaggio 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.

Rispondi