Skip to content

MFC & CUDA

Io e le MFC abbiamo una lunga storia alle spalle, le ho sempre viste come una cosa che non mi serve, una complicazione in un sistema semplice e bello come quello a messaggi di windows. Alla fine invece bisogna vedere mfc come quello che è: un semplice strato tra i messaggi e un sistema a classi, arcaico, progettato così così, basato su define più che su classi, ma di una potenza senza eguali nella programmazione windows. Basta vedere le librerie codejock o quelle BCGSoft (integrate in visual studio 2008) per vedere cosa si puo’ e cosa fanno con MFC. Anch’io mi sono cimentato nella creazione di controlli MFC, ho speso davvero tanto tempo a creare una toolbar con una suddivisione a gruppi delle icone, la visualizzazione del titolo e il supporto per le icone a 32bit. Alla fine è venuta una cosa graziosa, con tanti bug che non credo risolverò mai… Pensavo di creare una classe per la gestione dei menù contestuali a torta, ma dubito che mi ci metterò mai. Alla fine MFC non sono per niente male, trovo molto peggiori le librerie .NET per fare interfaccie, ed anche quelle le ho usate a fondo, non ‘sto dando un giudizio approssimativo, alla fine quello che preferisco e sempre l’API di BeOS, ora trovabile in Haiku. Alla fine non posso scrivere molto sulle MFC, tranne il fatto che le promuovo (nel senso che se fossi un’insegnate le farei passare di anno, no che vado in giro a dire “usate MFC” per me ognuno è libero…).

Altro argomento di cui mi sono occupato in questi mesi è CUDA, l’API di nVidia per il GPU computing. Teoricamente con CUDA si possono scrivere programmi simil C da fare girare nella scheda video, in pratica puoi scrivere solo delle funzioni da fare eseguire alla scheda video. Queste funzioni solitamente devono avere un output distribuito, ad esempio un’immagine dove ogni chiamata a questa funzione definisce un pixel, un sistema di particelle dove la funzione aggiorna una particella. Immagino che in un sistema fisico ci sia la funzione che per ogni coppia di corpi dia le collisioni, per ogni collissione applica delle forze e poi la funzione che aggiorna ogni corpo. Diciamo che il sistema di fisica è la seconda applicazione CUDA che viene in mente da fare, la prima è un sistema di raytracing, dove ogni funzione è un pixel. Un bellissimo esempio è tokaspt, in questo programmino si vede davvero la potenza di cuda e si vede anche come sia facile creare rendering foto realistici con tanta potenza di calcolo. Quindi mi sono detto, se questo tizio strano crea una cosa del genere perché non farlo anche io, quindi mi sono messo a studiare CUDA ed ho creto un semplice sistema di rendering unbiased, il risulato è l’immagine che vedere qua a sopra a destra, qua ci sono 48 triangoli, 3 tipi di materiali (emissivo, riflettente e diffuso) e un calcolo di diverse ore, per fare una passata di unbiasing ci mette un settimo di secondo, tokaspt ci mette circa un quarantersimo, ma bisogna dire che tokaspt usa sfere, molto più semplici da testare per il raytracing, e ne usa quasi sempre quantità infinitesimali, ad esempio il cornell box sono 7 sphere, quindi mi sa che ci sono andato vicino. Spero in futuro di accelerare questo calcolo con un sistema di divisione spaziole, stavo pensando infatti di creare una texture 3D della scena e per ogni texel indicare i triangoli al suo interno. Così il raytrancing si traduce nel rasterizzare il raggio nella texture 3D e controllare solo i triangoli dei vari texel. Un test interessante che ho fatto è stato provare a tradurre tutto il codice CUDA in C e farlo partire, il risultato è stato che ci mette circa 13 secondi a fare una passata, però questo senza multithread, infatti la potenza di cuda risiede nel fatto che esegue fino a 256 thread della stessa funzione contemporaneamente. Nel mio caso ho dovuto impostare questo valore a 128, quindi se consideriamo la funzione senza multithread la scheda video ci metterebbe 18sec. Sono cifre che fanno pensare…. Spero di creare presto una versione con l’ottimizzazione del mio renderer cuda, con il supporto per un formato delle scene, e di rilasciare l’eseguibile per tutti i possessori di schede video nVidia. Fino ad allora hasta luego e buone vacanze!

Be First to Comment

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.


*