Ottimizzare i tempi di compilazione di un programma

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
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
conraid
Staff
Staff
Messaggi: 12727
Iscritto il: gio lug 14, 2005 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Località: Livorno
Contatta:

Ottimizzare i tempi di compilazione di un programma

Messaggioda conraid » dom ott 19, 2008 17:52

Ieri in IRC accennavo a delle prove fatte per stabilire il numero di jobs ottimale nel mio sistema nella compilazione del kernel

Ecco i risultati
http://www.dabliutri.net/2008/10/19/ott ... programma/

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

Re: Ottimizzare i tempi di compilazione di un programma

Messaggioda Mario Vanoni » dom ott 19, 2008 18:40

conraid ha scritto:Ieri in IRC accennavo a delle prove fatte per stabilire il numero di jobs ottimale nel mio sistema nella compilazione del kernel

Ecco i risultati
http://www.dabliutri.net/2008/10/19/ott ... programma/


Interessante, ma altri parametri sono importanti:

- la L2 cache del/dei processore/i
- la memoria totale disponibile
- il Makefile, kernel OK esecuzione parallela prevista

Ho compilato oggi il 2.6.27.2, statico, su 3 macchine:
make -j 3 bzImage, sono Intel Core 2 Dual 1866MHz,
una ha L2 di 2MB e 3GB RAM, le altre due 4MB e 4GB.

I tempi variano di qualche secondo +/- contro make -j 2,
tempi (con time di bash) su 6 minuti e 5...10 secondi,
contano di piu` i processi in sottofondo (crontab).

Rimango alla regola make -j NUMERO_PROCESSORI.

Avatar utente
Vito
Staff
Staff
Messaggi: 4175
Iscritto il: mar dic 05, 2006 17:28
Nome Cognome: Vito
Distribuzione: Linux Mint 17
Località: Augsburg (DE)
Contatta:

Re: Ottimizzare i tempi di compilazione di un programma

Messaggioda Vito » dom ott 19, 2008 19:22

Da quello che vedo anche secondo me è meglio restare al make -j Numero_processori ...ho provato a fare lo stesso sulle mie 2 macchine :una con un Intel Core 2 Duo T9300 e 4GB di Ram , l'altra con un Athlon XP 3000+ e 1GB di Ram.
"Stat rosa pristina nomina, nomina nuda tenemus." [ Umberto Eco - Il nome della rosa]

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

birg81
Linux 2.6
Linux 2.6
Messaggi: 760
Iscritto il: lun gen 16, 2006 10:57
Nome Cognome: Biagio
Slackware: 12.2
Kernel: 3.4.7
Desktop: LxDE
Distribuzione: ArchLinux
Località: Castellammare di Stabia (NA)
Contatta:

Ottimizzare i tempi di compilazione di un programma

Messaggioda birg81 » dom ott 19, 2008 23:44

Si ma come si stabilisce il numero migliore?!

jurrehart
Linux 1.0
Linux 1.0
Messaggi: 3
Iscritto il: gio set 25, 2008 10:43
Nome Cognome: Jurgen Hart
Slackware: 12.1
Kernel: 2.6.25-jur #9
Desktop: KDE

Re: Ottimizzare i tempi di compilazione di un programma

Messaggioda jurrehart » mar ott 21, 2008 15:02

Ciao tutti,

E molto difficile stabilire il numero migliore perche ci sono troppi fattori in gioco.
come hanno gia detto prima nel forum
nr di CPU/core
dimensione della cache
RAM

Ma puoi anche aggiungere:
Velocita disco
dipendenze dal codice durante la compilazione

quello che intendo dire se per la compilazione di un programma hai bisogno di moduli A,B,C e D ma D dipende da C che a suo tempo dipende da B che dipende da A anche se hai un -j 4 devi comunque aspettare che hai A pornto prima di poter finire B e cosi via.

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

Re: Ottimizzare i tempi di compilazione di un programma

Messaggioda conraid » mar ott 21, 2008 15:18

jurrehart ha scritto:quello che intendo dire se per la compilazione di un programma hai bisogno di moduli A,B,C e D ma D dipende da C che a suo tempo dipende da B che dipende da A anche se hai un -j 4 devi comunque aspettare che hai A pornto prima di poter finire B e cosi via.


Come ho scritto nel blog, a volte hai anche errori, perché magari una parte viene compilata prima e si aspetta che ce ne sia un'altra già pronta.
Ma devo dire che usando -j2 solo una volta mi è capitata una situazione simile, ma può succedere.

La cosa da fare sarebbe fare tutti uno stesso test, magari con le stesso .config sugli stessi kernel e postare i risultati per ogni tipologia di macchina... ma alla fine ognuno fa prima a farselo da solo :)

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

Re: Ottimizzare i tempi di compilazione di un programma

Messaggioda Mario Vanoni » gio ott 23, 2008 21:07

Ho fatto dei test seri,
kernel 2.6.26.[56] statici e 2.6.27.[123] statici,
tre macchine Core 2 Dual, 3/4GB RAM, 1866MHz,
una HD IDE, le altre due HD SATA,
totale quindi 15 compilazioni, con e senza X.
Tempi +/- 3 secondi, riproducibili.

Con X attivo:
time make -j 2 bzImage 6m45
time make -j 3 bzImage 6m45

Senza X, unico schermo con sh:
time make -j 2 bzImage 6m12
time make -j 3 bzImage 6m12

Quindi incidono molto i processi in sottofondo,
_NON_ make -j NUMERO_PROCESSORI,
la diifferanza: circa 8 percento.


Torna a “Programmazione”

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite