giugno 2003 - Posts
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...
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.
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ì...
Sono aperte le iscrizioni a
PDC 2003 che si terrà a Los Angeles dal 26 al 30 ottobre 2003. Appena torno da TechEd vedrò di iscrivermi e soprattutto di prenotare un albergo vicino...
Questa
recensione descrive il nuovo iPAQ h2215, il primo con PocketPC 2003, che ora si chiama
Windows Mobile for Pocket PC.
Mi piacerebbe scoprire il motivo per cui in Microsoft cambiano i nomi ai prodotti con questa frequenza, a volte pochi giorni prima dell'uscita...
Se qualcuno ha fretta di scaricare la patch di Office 2003 beta 2...
questo sito ha pubblicato un po' di link del sito Microsoft, quindi tecnicamente non si può parlare di pirateria...
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...
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?).
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! :-)
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!
Ho ricevuto e letto velocemente un nuovo libro su MDX,
Fast Track to MDX: è un libro che parte veramente da zero e va bene per cominciare. Se si vuole qualcosa di approfondito, la scelta migliore (e anche l'unica) resta sempre
MDX Solutions di George Spofford: testo lungo, dettagliato e con molti esempi di scenari reali.
Sto installando il mio nuovo Inspiron 8500, usando Windows 2003 nonostante i molti consigli di tenermi stretto Windows XP su un notebook. A parte qualche problema iniziale con la rete (risolto masterizzando un CD con un po' di driver, altrimenti non vedevo niente), la maggior parte dei dolori deriva dalla scelta di voler lavorare (e sviluppare) con un utente che non è amministratore locale della macchina.
Il lato positivo di questa scelta è legato al prendere coscienza di tutti i problemi legati alla security. Il lato negativo è che ci si rende conto di aver sempre ignorato come configurare correttamente tutta una serie di dettagli relativi a come configurare correttamente la security di una macchina...
Comunque, è una buona palestra per imparare!
Se avete ancora dei dubbi su dove si va col TabletPC, date un'occhiata xThink MathJournal....
Beh, se siete dei programmatori con la repulsione per la matematica, potreste sempre consolarvi con
Leszynski inTegrate per disegnare dei form (Windows Forms!) a mano libera...
Questo
interessante articolo di Ingo Rammer fa un po' di considerazioni su quali siano gli scenari in cui è più opportuno usare Remoting. Fa impressione vedere che i CAO non andrebbero usati praticamente mai in rete... In effetti un'eccezione è fatta per i CAO in uno scenario con un singolo server... ma il problema è la continuità di servizio in caso di manutenzione al server. Per essere sincero, a me la cosa risulta un po' drastica, ma in effetti è bene usare un servizio una volta che si è stati ammoniti dal farlo, così da valutare (e accettare) i rischi e le controindicazioni cui si va incontro...
Nei
commenti all'articolo, Ingo specifica che il motivo per preferire HttpChannel a TcpChannel è legato alla possibilità di definire un timeout, cosa non prevista su TcpChannel. Anche se TcpChannel è molto più performante, le considerazioni sull'affidabilità e il controllo prevalgono.
Considerazione finale: usare Remoting per usare BinaryFormatter e HttpChannel. Per usare Soap... meglio usare i Web Services con una pagina ASMX (ASP.NET). Considerazione condivisibile anche prima di questo articolo, che però, come si dice... mette una pietra sopra a tutta la questione!
Ieri mi sono chiesto chi è quell'uomo - quel grande uomo - che ha inventato l'aria condizionata.
Ecco la risposta:
Willis Carrier, che ha fondato un'azienda, la
Carrier, ancora oggi sul mercato. La cosa più stupefacente è che l'invenzione ha già
100 anni, anche se le prime implementazioni più "ragionevoli" sono arrivate a partire
dal 1928.
Pensate a come sarebbe difficile scrivere software senza l'aria condizionata quando fuori ci sono 36 gradi...
More Posts
Next page »