Archivio per 18 Luglio 2008

Compilare in parallelo

Luglio 18, 2008

Se abbiamo un processore multicore o più processori, per compilare più velocemente sfruttando il parallelismo, possiamo dare make con l’opzione -jn dove n sta per il numero di processori più 1. Oppure per fare in modo che ad ogni compilazione questo sia impostato di default basta impostare la variabile d’ambiente CONCURRENCY_LEVEL. Ma perché numero_processori+1? Tindal mi ha dato la risposta che copio ed incollo qui

il concurrency level va impostato ad un numero maggiore rispetto al numero di processori (o core), se vuoi risparmiare più tempo possibile parallelizzando i processi, per assicurare che ci sia sempre un processo ovviabile quando c’è un po’ di tempo di calcolo disponibile

ogni processo ha dei periodi in cui non riesce ad usare al massimo il processore: se hai 2 processori e 2 processi avrai qualche tempo morto per entrambi i processi, e il fatto di averne almeno un altro in esecuzione ti permette di usare anche questi tempi morti

bada che di solito parliamo di poco (penso che nella compilazione di un kernel puoi guadagnare al max 10-20 secondi, a occhio), ma dipende dai processi: più ci sono tempi morti più guadagni aumentando il numero di processi concorrenti

ah, ovviamente non riuscirai a fare molto altro con il pc mentre lo tieni così occupato

Ora daremo l’esempio più classico per i desktop moderni: due core (naturalmente vale sia per AMD che INTEL o altro…)

Per archlinux (o simili)

sudo nano /etc/profile

e aggiungiamo la riga

CONCURRENCY_LEVEL=3
export CONCURRENCY_LEVEL

poi

source /etc/profile

Prova che funzioni

echo $CONCURRENCY_LEVEL

Se invece intendete sfruttare per intero il multicore anche per makepkg leggere il wiki di archlinux e se non volete perdervi con l’inglese una buona lettura è anche questa guida di gentoo sui flags per l’ottimizzazione di gcc.
Per debian (o simili)

sudo nano /etc/environment

e aggiungiamo la riga

CONCURRENCY_LEVEL=3
export CONCURRENCY_LEVEL

poi

source /etc/environment

Prova che funzioni

echo $CONCURRENCY_LEVEL

Attenzione
In realtà non è sempre consigliabile dare compilazioni parallele, dipende dal programma, dal codice, dal Makefile ecc ecc…Quindi è utile averlo globalmente se e solo se quello che compiliamo di solito gradisce sfruttare al massimo il multicore/multiprocessore durante la compilazione (e per me risulta sempre così, compreso ricompilazione kernel).

Finito tirocinio (ufficiosamente)

Luglio 18, 2008

Ufficiosamente dico che ho finito tirocinio, ho fatto tutto fin dove volevo e potevo arrivare.

Fra oggi e la prossima settimana devo solo trovare come occupare il tempo. Vengo qua solo per figurare, a chiunque, di aver fatto quelle 20 settimane in cui distribuire quelle 500 ore, effettivamente fatte, ma di sicuro non spalmante come da regolamento. Già perché i primi tempi facevo ore e straore, poi sempre meno causa corsi, esami, studio, un mese di pausa e poi a luglio sono ritornato…

Sto qui anche per coscienza dato che qua potrei ballare nudo e nessuno mi direbbe niente, mi porto il portatile per farmi ogni tanto i cazzi miei, prendere appunti per la relazione che dovrò fare del tirocinio, ascoltare musica addirittura nessuno mi ha mai detto niente che staccavo e riattaccavo i cavi ethernet per farli arrivare al mio laptop. Potrei andare e tornare quando voglio, mangio in mensa senza dare niente e via dicendo.

Sono un fantasma e nessuno si è mai curato del sottoscritto, nemmeno di spiegarmi se non, dopo 2 mesi, cosa stavo programmando né come si faceva questo o quello. Non che sappia tanto più di prima, ho parlato solo con il tutor e facevo riferimento solo a lui. La cosa simpatica è questa: potevo sviluppare un po’ come cazzo mi girava il programma se non mi preoccupavo di andare a chiedere io cosa era meglio per l’utilizzatore finale!!!

Ora ho capito come ha fatto il mio predecessore, se ne è sbattuto i coglioni da buon tirocinante, mi ha lasciato un obbrobrio che non funzionava e non faceva quello che doveva fare. Rispetto a prima il mio è un gioiello, ho preso tutto ciò come sfida personale e ora mi sento realizzato: non sapendo un h ce l’ho fatta e la prossima settimana vengo in azienda solo ed esclusivamente per cazzeggiare, mangiare a sbafo e tirarmi giù le ultime cose utili per la relazione finale. Guai, se proprio alla fine, qualcuno viene a rompere i coglioni!