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 distribuzione usata e la versione della utility coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano Gnu/Linux in genere.
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.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza dell'ultima regola porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

Sfruttare tutti i core nella compilazione.

Messaggioda Trotto@81 » sab mag 24, 2008 2:57 pm

Ma è possibbile sfruttare al massimo le cpu multi core durante la compilazione dei nostri programmi?
Avatar utente
Trotto@81
Linux 2.6
Linux 2.6
 
Messaggi: 1335
Iscritto il: sab giu 26, 2004 1:00 am
Località: Monasterace M. (RC)
Nome Cognome: Andrea
Numero utente: 741
Slackware: Slackware64 current
Kernel: 2.6.32.7
Desktop: KDE 4.3.4

Re: Sfruttare tutti i core nella compilazione.

Messaggioda d4z_c0nf » sab mag 24, 2008 3:19 pm

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
How many roads must a man walk down before you can call him a..subgenius ?!
Linux User #472138, Machine Number #390561
Avatar utente
d4z_c0nf
Packager
Packager
 
Messaggi: 1050
Iscritto il: mar mar 14, 2006 8:07 pm
Località: Salerno
Nome Cognome: Rocco Aliberti
Numero utente: 3159
Slackware: current64
Kernel: 2.6.30.1
Desktop: Xfce 4.6.1

Re: Sfruttare tutti i core nella compilazione.

Messaggioda davide77 » sab mag 24, 2008 3:32 pm

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%.
I’m not anti-social; I’m just not user friendly
Avatar utente
davide77
Packager
Packager
 
Messaggi: 339
Iscritto il: mar apr 26, 2005 1:00 am
Località: Bergamo
Numero utente: 2086
Slackware: 12.2
Kernel: 2.6.27.7
Desktop: xfce

Re: Sfruttare tutti i core nella compilazione.

Messaggioda Mario Vanoni » sab mag 24, 2008 3:40 pm

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.
s. e. & o. Linux Registered User #31896, Machines #203540, #276590, #340941 @ http://counter.li.org
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 2655
Iscritto il: lun set 03, 2007 10:20 pm
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Numero utente: 4203
Slackware: 12.2 ext2
Kernel: 2.6.33-rc7 statico
Desktop: fluxbox

Re: Sfruttare tutti i core nella compilazione.

Messaggioda gigiobagiano » sab mag 24, 2008 3:45 pm

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
gigiobagiano
Linux 2.2
Linux 2.2
 
Messaggi: 386
Iscritto il: dom mar 11, 2007 2:58 pm
Numero utente: 4015
Slackware: 11 - 13.0
Kernel: 2.6.31.1
Desktop: KDE 4.2.4 - OpenBox
Distribuzione: Mandriva - Gentoo

Re: Sfruttare tutti i core nella compilazione.

Messaggioda d4z_c0nf » sab mag 24, 2008 3:51 pm

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
How many roads must a man walk down before you can call him a..subgenius ?!
Linux User #472138, Machine Number #390561
Avatar utente
d4z_c0nf
Packager
Packager
 
Messaggi: 1050
Iscritto il: mar mar 14, 2006 8:07 pm
Località: Salerno
Nome Cognome: Rocco Aliberti
Numero utente: 3159
Slackware: current64
Kernel: 2.6.30.1
Desktop: Xfce 4.6.1

Re: Sfruttare tutti i core nella compilazione.

Messaggioda lyapunov » sab mag 24, 2008 3:58 pm

Ma la regola non era -j <numeroCore+1> ?
Avatar utente
lyapunov
Linux 2.0
Linux 2.0
 
Messaggi: 176
Iscritto il: dom mag 04, 2008 5:12 pm
Slackware: 12.1

Re: Sfruttare tutti i core nella compilazione.

Messaggioda conraid » sab mag 24, 2008 3:59 pm

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

Bob by Prof. Bad Trip
Avatar utente
conraid
Staff
Staff
 
Messaggi: 9109
Iscritto il: gio lug 14, 2005 1:00 am
Località: Livorno
Nome Cognome: Corrado Franco
Numero utente: 2423
Slackware: current
Kernel: 2.6.32
Desktop: KDE 4.3

Re: Sfruttare tutti i core nella compilazione.

Messaggioda Vito » sab mag 24, 2008 4:12 pm

Ma se si dà solo make che succede?
aka John-Cena
"Sono il Diavolo e del Diavolo vengo a fare l'opera.Non ho un nome.Puoi chiamarmi V." - V for Vendetta
Linux User #448775
Immagine
Avatar utente
Vito
Staff
Staff
 
Messaggi: 2965
Iscritto il: mar dic 05, 2006 7:28 pm
Località: Forio (NA) / Napoli (Studio)
Nome Cognome: Vito Magnanimo
Numero utente: 3767
Slackware: 64 13.0
Kernel: 2.6.32.*-xps
Desktop: KDE 4.2.4
Distribuzione: Fedora 12

Re: Sfruttare tutti i core nella compilazione.

Messaggioda Mario Vanoni » sab mag 24, 2008 4:22 pm

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.
s. e. & o. Linux Registered User #31896, Machines #203540, #276590, #340941 @ http://counter.li.org
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 2655
Iscritto il: lun set 03, 2007 10:20 pm
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Numero utente: 4203
Slackware: 12.2 ext2
Kernel: 2.6.33-rc7 statico
Desktop: fluxbox

Re: Sfruttare tutti i core nella compilazione.

Messaggioda Mario Vanoni » sab mag 24, 2008 4:24 pm

Vito ha scritto:Ma se si dà solo make che succede?


Lettura sequenziale del Makefile,
usi un solo processore.
s. e. & o. Linux Registered User #31896, Machines #203540, #276590, #340941 @ http://counter.li.org
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 2655
Iscritto il: lun set 03, 2007 10:20 pm
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Numero utente: 4203
Slackware: 12.2 ext2
Kernel: 2.6.33-rc7 statico
Desktop: fluxbox

Re: Sfruttare tutti i core nella compilazione.

Messaggioda davide77 » sab mag 24, 2008 4:56 pm

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.
I’m not anti-social; I’m just not user friendly
Avatar utente
davide77
Packager
Packager
 
Messaggi: 339
Iscritto il: mar apr 26, 2005 1:00 am
Località: Bergamo
Numero utente: 2086
Slackware: 12.2
Kernel: 2.6.27.7
Desktop: xfce

Re: Sfruttare tutti i core nella compilazione.

Messaggioda Trotto@81 » sab mag 24, 2008 9:39 pm

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.
Avatar utente
Trotto@81
Linux 2.6
Linux 2.6
 
Messaggi: 1335
Iscritto il: sab giu 26, 2004 1:00 am
Località: Monasterace M. (RC)
Nome Cognome: Andrea
Numero utente: 741
Slackware: Slackware64 current
Kernel: 2.6.32.7
Desktop: KDE 4.3.4

Re: Sfruttare tutti i core nella compilazione.

Messaggioda Mario Vanoni » sab mag 24, 2008 9:51 pm

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%.
s. e. & o. Linux Registered User #31896, Machines #203540, #276590, #340941 @ http://counter.li.org
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 2655
Iscritto il: lun set 03, 2007 10:20 pm
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Numero utente: 4203
Slackware: 12.2 ext2
Kernel: 2.6.33-rc7 statico
Desktop: fluxbox

Re: Sfruttare tutti i core nella compilazione.

Messaggioda Bart » dom mag 25, 2008 5:53 pm

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.
Slacky Member #0886
Immagine
Avatar utente
Bart
Staff
Staff
 
Messaggi: 3736
Iscritto il: lun ago 09, 2004 1:00 am
Località: Bologna/Rimini
Numero utente: 0886
Slackware: current
Kernel: 2.6.32.7-lf
Desktop: kde 4.3.4

Prossimo

Torna a Gnu/Linux in genere

Chi c’è in linea

Visitano il forum: ildiama e 1 ospite