La complessità di Itanium 2

Il pomeriggio è trascorso in compagnia di un estroverso ingegnere/scienzato di Intel, molto distante dallo stereotipo di questo tipo di personaggi. A parte la nota di colore, la cosa che mi ha colpito di più è la complessità raggiunta da quest’architettura: avevo già letto un libro su Itanium, e la seconda versione migliora il funzionamento complessivo senza comunque cambiare l’architettura complessiva di EPIC, il set di istruzioni di questo microprocessore.
La complessità è data dal fatto che il processore è fortemente basato sulla parallelizzazione interna delle unità di esecuzione; per arrivare al limite, l’assembler espone in maniera molto diretta la possibilità di ottimizzare (o no) il codice in modo da favorire le pipeline di esecuzione e i vari livelli di cache interna (che sono 3).
Senza entrare in dettagli troppo tecnici, ottimizzare il codice per un’architettura così è un’operazione assolutamente complessa. Inoltre, poiché l’ottimizzazione assoluta è impossibile perché dipende dal contesto di esecuzione, appare chiaro che un’architettura basata su una compilazione dinamica (come il JIT di .NET) consente sulla carta di applicare algoritmi euristici di compiplazione che, basandosi sull’analisi delle statistiche (Itanium 2 offre più di 400 counter nativi del processore per analizzare cache miss, blocchi sulla pipeline, ecc.), ricompila il codice che dovesse manifestare particolari inefficienze.
Questo scenario è sicuramente stimolante ed è pura frontiera di ricerca (questa mattina uno speaker di Intel insisteva sul fatto che l’hardware è molto più avanti del software, nel senso che non ci sono software, probabilmente intesi come sistemi operativi, che sfruttano a dovere l’hardware); la domanda è: ne vale la pena? Il costo della ricerca di un’ottimizzazione migliore in fase di esecuzione non sarà maggiore del risparmio ottenibile? L’istinto potrebbe suggerire che non ne vale la pena… ma in questo campo di istintivo c’è sempre di meno, quindi staremo a vedere.
Comunque ci vorrà ancora qualche anno: per ora, le ottimizzazioni estreme si fanno ragionando sugli algoritmi e cambiandone l’implementazione, dopo aver fatto le opportune misure…

Intel Software College

Primo giorno di TechEd, pre-conference day. Ho scelto di seguire una sessione che definire tutorial può essere visto come un eufemismo: si parla di ottimizzazione del codice per i processori Intel.
In realtà gli argomenti non sono poi così complessi. Una considerazione interessante sullo sviluppo per notebook è quello di adeguare l’applicazione al Power Scheme: un’applicazione che faccia attività di polling al mondo esterno (si pensi a un Web Service) dovrebbe adeguare il proprio comportamento allo stato complessivo del sistema operativo, altrimenti potrebbe inibire lo sleep o lo spegnimento dell’hard disk, a causa delle operazioni periodiche che potrebbe compiere.
Altrettanto interessanti le considerazioni sul tipo di controlli da fare per verificare lo stato di connessione di un’applicazione… Con un notebook collegato in modo wireless non è piacevole avere delle applicazioni che si comportano “male” quando cade la connessione e che non sono in grado di ripristinarsi quanto questa ritorna. I riferimenti sono alle API GetAdaptersInfo, DeviceIoContro, InternetGetConnectedState per verificare lo stato della connessione, arrivando a misurare i tempi di latenza della rete usando tecniche di PING basate sull’invio di pacchetti UDP.
OpenMP: si tratta di una tecnologia che consente di parallelizzare il codice scritto in C/C++ senza necessariamente apportarvi modifiche. Consiste in un’estensione del compilatore con alcune librerie e l’uso di appositi #pragma per le direttive richieste dal programmatore. In realtà qualche modifica al codice va apportata, ma l’idea è di sfruttare i thread del sistema operativo senza scrivere del codice apposito per creare thread e sincronizzarli. In altre parole, mettendo qualche pragma qua e là si ottiene la parallelizzazione. Ad es.:

	#pragma omp parallel sections {
	        #pragma omp section
	        a = a + b; // un thread
	        #pragma omp section
	        c = c + d; // un altro thread
	}

La cosa è più interessante per i loop:

	#pragma omp parallel for
		for (int i = 0; i < maxvalue; i++ ) {
		    // ...
		}

il loop viene spezzato in N parti uguali (dove N è il numero di processori); bisogna poi considerare come definire le variabili condivise e quelle private (che non richiedono sincronizzazione), il tutto sempre usando dei pragma). Per bilanciare il carico del ciclo for è possibile usare “schedule”, che in pratica divide il lavoro in un numero maggiore di parti che sono poi assegnate ai vari processori attraverso un meccanismo simile a quello dei thread pool. E’ interessante il bilanciamento progressivo ottenibile con

schedule( guided ... )

che è più “dinamico” rispetto al

schedule (dynamic ...)

che invece decide a priori la divisione del ciclo in parti uguali prima di cominciare (il nome confonde parecchio… ma lo speaker di Intel mi ha detto che è lo standard non l’hanno definito loro…).
Tutte le informazioni su OpenMP si trovano sul sito www.openmp.org.

Arrivati a Barcellona, pronti (o quasi) per il TechEd

Siamo appena arrivati a Barcellona, giusto il tempo per fare un giro per La Rambla e mangiare qualcosa. Abbiamo l’albergo esattamente a metà di questa via, speriamo che i tripli vetri ci proteggano dalle follie notturne di questa zona.
Oggi c’è molto movimento per via di un raduno europeo di Harley Davidson (che continuano a fare avanti e indietro per La Rambla) e stasera un concerto dei Rolling Stones, il che spiega le centinaia di persone con indosso la maglietta del gruppo rock.
Domani si comincia col pre-conference day, il vero TechEd comincia martedì…

Prese elettriche nel mondo

Internet ha tutto, basta saper cercare. Pianificando la settimana al TechEd di Barcellona, uno dei problemi da risolvere è come alimentare tutti i nostri bei device… Una volta tanto vorrei evitare di arrivare come uno sprovveduto e ho cercato su Internet quali sono i formati usati. Nessun sito meglio di questo fornisce tutte le informazioni, per tutti i paesi del mondo o quasi…

Blogger torinesi

Piccola nota di colore del mondo dei blogger: oggi ho personalmente incontrato Pecus, blogger storico di Torino. In realtà già ci conoscevamo, ma ci eravamo persi di vista da qualche tempo (com’è noto, il tempo è un concetto relativo, e non mi esprimo mai in termini assoluti nei confronti di tale dimensione su ordini di grandezza maggiori di 6 mesi). Il web, Google e il caso hanno voluto che ci ritrovassimo. Mi interessa molto capire l’altra faccia del web, quella vista dagli utenti che lo usano senza preoccuparsi troppo di quello che c’è dietro. Matteo non è esattamente il prototipo di questo tipo di utente, ma per tanti motivi conosce bene quel mondo e me lo può spiegare. Due ore passate piacevolmente (sarà stato anche perché ero sotto un getto di aria condizionata?).

Primo giorno col TabletPC

Oggi mi è arrivato un vero TabletPC: il NEC Versa T400.
Beh, che dire… partiamo dalle cose belle. E’ veramente leggero, lo si porta ovunque e non sembra assolutamente un pezzo di ferro da nerd… E’ molto stiloso, nella sua essenzialità. All’accensione tutto fila liscio, il setup di XP non dà problemi e in pochi minuti sono già in rete.
Ovviamente è ancora la versione inglese, ma il riconoscimento fa veramente paura: capisce il mio corsivo!!! Non lo capisco io, ma lui lo interpreta senza errori!!! A patto di scrivere in inglese, ma per fine anno dovrebbe vedere la luce la versione italiana, speriamo prima.
Prova salotto: costasse un terzo di quello che costa, è il device ideale per leggere le ultime notizie facendo a meno di televisione-parabola-satellite. Su questo fronte non avrebbe nessun rivale, a patto di avere ADSL+wireless in casa, ovviamente.
Qualche piccolo difetto. La retroilluminazione del display non è eccellente, se lo sfondo non è bianco e lo si usa in verticale (ideale per navigare sui siti web, credetemi) si fa un po’ fatica a trovare un angolo visuale ideale. Sui bordi il riconoscimento della penna sbaglia un po’, nonostante un paio di tarature. Proverò meglio.
Oggi ho anche preso una tastiera USB (non ha ingressi PS/2), anche se non ho ancora avuto bisogno di usarla, ma prima o poi serve: col notebook c’è una staffa che consente di tenerlo quasi in verticale, con una tastiera seria lo si può usare per scrivere velocemente… vedremo… Dopo il TechEd cominceranno gli esperimenti di sviluppo, il bello di queste cose, come sempre, è che si possono programmare! 🙂

Windows 2003 come Windows XP :-)

Forse provocato da qualche “collega”, ho insistito nell’installare Windows Server 2003 Standard sul mio nuovo notebook, un Inspiron 8500.
In effetti funziona proprio tutto, e ho anche scoperto come non rinunciare ai temi di XP: basta abilitare l’apposito servizio, che di default è disabilitato.
Ho trovato questo utile documento che spiega questo e altro (tra cui come installare correttamente DirectX 9…): il documento, provocatoriamente, è una “guida a convertire Windows Server 2003 in Windows Professional 2003” 🙂
La cosa carina è che non c’è da fare niente di sporco o di non documentato, stavolta si gioca pulito!