Newsgroup: it.comp.hardware
Titolo: Riduzione tempi di compilazione software da sorgenti

 
Utilizzo Linux e ho parte del parco software pacchettizzato
a partire da sorgenti. A livello hardware, in generale quali
componenti / caratteristiche influenzano maggiormente i tempi
di compilazione?
 
La CPU?
- la frequenza
- il numero di core
- il tipo di cpu
 
La Ram?
 
Dubito faccia la differenza ma... il collegamento del disco
quindi SSD sata piuttosto che NVMe ?
 
 
Chi è l'indagato numero uno?
 
 
Domanda esotica, coinvolgere i core della scheda video per
lo scopo è pensabile?
So che si può implementare nel software eventualmente scritto ad hoc
la possibilità di sfruttare la GPU per calcoli vari, ma a livello di
runtime del software stesso. Non so se si possa sfruttare quella roba
per compilare software... tipicamente con gcc e simili. Non credo ma
la butto lì lo stesso, se qualcuno ne sa nulla...
 
Grazie in anticipo!

 Grazie in anticipo!
 
Non attualmente e non penso nel prossimo futuro. La metto molto molto semplice: le schede video sono pensate per lavori relativamente semplici che si possono effettuare in massa. 
Rispetto alle CPU general purpose, le GPU hanno molte unità esecutive con una complessità di gran lunga inferiore, mentre le CPU hanno poche unità esecutive ma allo stesso tempo molto complesse.
 


 
Le GPU si usano soprattutto per calcoli dove si ha
la necessita' di eseguire processi relativamente semplici
ma altamente parallelizzabili, oppure in ambito dell'elaborazione
matriciale come ad esempio nel machine learning.

 
 
Forse era un esperimento interessante nel 2006.
6 minuti e 45 secondi per compilare il kernel di linux con un vetusto 
Pentium 4 a 1,7ghz.
 
Ha senso mettere in piedi una infrastruttura del genere? quanto si potrà 
mai risparmiare.
 
 
 
 
 
 

 E perchè non dovrebbe andar bene anche oggi?
 
In effetti 30 secondi sono meno di 32.
 
Ne vale la pena! 
 
 


Forse era una ricompilazione con parte dei sorgenti già compilati, o 
forse era solo kernel + moduli.
Ti posso assicurare che che fare cross-compiling di un kernel general 
purpose sull'i7 2700k che uso non ci mette meno di tre quarti d'ora..
 


Ehhhh?  3/4 d'ora?
Ma hai provato, molto semplicemente, col 'monitor risorse' di Windows a 
verificare cosa viene realmente usato?
Se disco, se cpu, se ram, ...?
Il Gcc ha diverse possibilita' di ottimizzazione, hai verificato su 
qualche ng/forum di 'utenti gcc' se salta fuori qualcosa di buono?
Comunque anche senza ottimizzazioni mi pare davvero lenta la 
compilazione cosi' com'e' ora
 
https://stackoverflow.com/questions/47564415/which-of-gccs-o3-optimization-flags-enable-hardware-accelerated-instructions
 
 


Monitor di windows? Ahah, no no per l'amor di Dio...
 
La mia attività è principalmente cross-compilazione per architetture ARM 
(armbian) con linux virtualizzato sotto linux.
Sicuramente se gli forzo -O3 ci mette ancora di più, da quel che mi 
ricordo il kernel ha per default -O2


Rispondo qui un po' a tutti, per quello che ne sapevo io i flag
-O2 o -O3 servono per ottimizzare le performance del software
prodotto, non per velocizzare l'operazione di compilazione o
linking. Se si attivano quelle ottimizzazioni è giusto aspettarsi
tempi di compilazione maggiori.
 
Al volo da una googolata è spiegato più in dettaglio qui sotto:
https://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Optimize-Options.html
 
------
Without any optimization option, the compiler's goal is to *reduce the*
*cost of compilation* and to make debugging produce the expected results.
[...]
Turning on optimization flags makes the compiler attempt to improve the
performance and/or code size *at the expense of compilation time* and
possibly the ability to debug the program
------
 
Per quel che riguarda distcc, servono più macchine su cui distribuire
il carico di lavoro, non è il mio caso, mi sembra più indicato per chi
debba distribuire i binari di un parco software da installare ad esempio
su un sistema ufficiale "vanilla", che gli altri utenti possano avere:
esempio se io dovessi gestire un repository di software non ufficiale,
extra preparato per essere installato e funzionare sulla versione
stabile di Debian, o quel che è.
In quel caso avendo esempio 10 macchine su cui ho altrettante
installazioni "full" del software ufficiale Debian, posso farle lavorare
insieme e sarò sicuro che la compilazione e soprattutto il linking verrà
fatto "contro" librerie ufficiali che anche gli utenti finali avranno
sui loro sistemi se hanno un'installazione vanilla.
Se i sistemi messi in network che lavorano via distcc contengono
librerie diverse, non saprei cosa salterebbe fuori. I binari finari
girerebbero forse, ma forse no perché magari si aspettano di trovare
una certa libreria che invece non c'è.
Va be' non era questo lo spirito della mia domanda comunque, distcc
non è ciò che fa al caso mio, a meno di non costruire enne macchine
per lo scopo.
 
 
C'era anche un'altro progetto che memorizzava pezzi delle compilazioni
e li richiamava in caso di compilazioni successive, ccache:
https://ccache.dev
 
 
Però non l'ho mai provato.
Non so se funzionerebbe per effettuare compilazione di software
necessaria in caso di upgrade vari. Del tipo, aggiorno una libreria
e devo compilare i software che dipendono da quella libreria in modo
che si colleghino ad essa.
 
 
Tornando all'hardware...
Quindi principalmente volendo migliorare la situazione tempi di
compilazione, principalmente si deve avere una CPU più prestante
accompagnata da Ram in abbondanza che più ne abbiamo e meglio è
come da sempre, il tutto condito con SSD che ormai per ospitare
il sistema operativo è in ogni caso un must.
 
Faccio una domanda sul processore allora:
meglio puntare sulla frequenza o sul numero di core per lo scopo in
oggetto?
 
 
 

 
 
così per curiosità ogni quanto ricompili il kernel di linux? e 
sopratutto perchè?
 
Grazie
 
PS il pentium 4 era vetusto ma anche il i7-2700k non scherza eh.
 
 

 purpose sull'i7 2700k che uso non ci mette meno di tre quarti d'ora..
 
Manca solo Khaby Lame che tira fuori il suo C64 e ti fa il gesto. 
 
 

 oggetto?
 
Numero di core senza dubbio
 
 
-- 
 


Mi occupo di supportare alcune tv box ARM con SOC rockchip per il progetto armbian.
Ultimamente sto smanettando con un driver per il wireless quindi sto dedicando poco tempo al supporto tv box, però di solito ricompilo spesso, fino a diverse volte al giorno :D