venerdì 25 gennaio 2008

Null coalescing operator

Geniale, utile, elegante.

public static Singleton getInstance()
{
return theInstance ?? (theInstance = new Singleton());
}



Per il momento, disponibile in C# 2

martedì 22 gennaio 2008

Violare la legge di Amdahl?

La Legge di Amdahl pone un limite all'incremento di prestazioni di un sistema multiprocessore (nella sua versione generalizzata pone un limite all'incremento atteso di prestazioni di un sistema di elaborazione quando vengono migliorate alcune componenti dello stesso): in particolare (rimando al link su wikipedia le formulazze), se P è la porzione di calcolo interamente parallelizzabile, mentre S è la restante parte di calcolo non parallelizzabile, il fattore di incremento è uguale a (P + S) / ((P/N)+S) [dove N è il numero di processori] - ovviamente senza considerare l'overhead dovuto al parallelismo.
Questo è un limite deprimente, soprattutto adesso che i sistemi multiprocessore (o multicore) sono oramai ovunque (e sopratuttto a casa mia... ;)
Ed ecco quindi, prendendo spunto sopratutto da un fantastico post di Carlo, una piccola disserzione sulle strategie che si possono adottare per ottenere un incremento di prestazioni in qualche modo superiore a quello che potremmo attenderci con un approccio tradizionale; in particolare, (visto che è impossibile violare la legge di Amdahl) si può lavorare per ottenere il massimo incremento possibile spostando quanto più possibile il "lavoro" nellla variabile P:
  • Dove non è possibile parallelizzare un algoritmo, si può tentare di parallelizzare i dati
  • Dove non si può parallelizzare un processo seriale, si può "pipeline-izzare"
  • Dove non si può migliorare la performance, si possono introdurre nuove features sfruttando comunque il parallelismo e senza deteriorare le prestazioni
Se "lato server" è relativamente facile ottenere netti vantaggi dalla presenza di più unità di elaborazione, è "lato client", cioè per le applicazioni monoutente, che la legge di Amdahl pone seri limiti all'incremento di performance, e diventa veramente difficile ottenere dei vantaggi significativi.
A questo punto, è interessante il concetto di "velocità percepita", cioè la qualità di prestazione fornita dal computer percepita dall'utente. In questi termini diventa fondamentale il tempo di risposta ai comandi, il feedback fornito dal sistema, più che l'effettivo tempo di esecuzione dei job. In questo caso il fatto di avere più unità di calcolo potrebbe non tanto accelerare l'esecuzione di un processo quanto piuttosto dare la possibilità all'utente di continuare a sfruttare la macchina anche durante l'esecuzione di un compito pesante.

sabato 19 gennaio 2008

My new box


E' finalmente arrivata la mia ultima creatura: un case booksize contiene un Pentium E2140, 2Gb di RAM, un disco da 500Gb, e un DVD Lightscribe; la sk video integrata è una Intel GMA950.

E' la mia prima macchina only linux (per ora ho messo Ubuntu 7.10) e... funziona benissimo!
Pochissimo rumore, poco calore, prestazioni sufficienti; funziona persino il dongle Wi-fi della Netgear!
Al più presto installerò anche il software Lightscribe. Tra l'altro, il tutto con una spesa veramente ragionevole...

venerdì 18 gennaio 2008

Sun to Acquire MySQL


Leggo or ora la notizia...
Un bel colpo per Sun che integra nella sua struttura uno dei migliori DB open, un bel colpo per MySQL AB che si affaccia al tradizionale mercato ERP.
Solaris + ZFS + MySQL su hardware Sun: un ottimo prodotto per i partner Sun Italia ;)