MATLAB è uno degli ambienti più utilizzati in ambito di ricerca, sia accademica sia industriale, per la modellazione di sistemi complessi (come ad esempio macchine industriali, componenti aeronavali, sistemi di elaborazione delle immagini, e via dicendo) e l'analisi dei risultati di nuovi algoritmi. Ciò è reso possibile sia dalla versatilità dell'ambiente di sviluppo, che fa del gran numero di toolbox il suo cavallo di battaglia, sia dal fatto che MATLAB è estremamente user-friendly, e lascia libero lo sviluppatore di concentrarsi sul test di modelli ed algoritmi (da implementare successivamente a basso livello), piuttosto che sulla risoluzione di problemi di gestione della memoria.
Introduzione
Purtroppo, la complessità degli algoritmi, unita all'overhead intrinseco dell'ambiente di sviluppo, compromette le prestazioni dei nostri script e funzioni, lasciandoci per un numero imprecisato ore in attesa del tanto atteso risultato che, peraltro, potrebbe essere errato o inatteso! Da programmatori, quindi, dobbiamo affidarci a tutte le tecniche che possono rendere il nostro codice più performante (e risparmiare quindi tempo prezioso); una delle più interessanti, che trae vantaggio dai recenti sviluppi in termini di cloud computing ed architetture multicore, è quella del parallel computing, il cui supporto è garantito dal Parallel Computing Toolbox. Grazie al calcolo parallelo, è possibile suddividere l'onere computazionale tra più processori (o computer in rete), riducendo notevolmente i tempi di elaborazione; vale quindi la pena di esplorare insieme i principi alla base di questa tecnica.
Matlab ci permette qualsiasi tipo di operazione su di un'immagine e, se usato sapientemente, risulta essere più versatile di strumenti dedicati, come Photoshop o GIMP (che, in realtà, 'mascherano' dietro un'interfaccia - più o meno - user friendly le operazioni che Matlab ci permette di fare 'a mano'). Questa flessibilità, però, ha un prezzo da pagare: le elaborazioni più complesse richiedono un'elevata capacità computazionale, che può mettere in difficoltà anche sistemi di fascia medio-alta. Per dare un'idea dei costi in gioco, consideriamo un algoritmo che, date due immagini a colori A e B in ingresso, dia in uscita un'immagine O a colori in cui, per ogni canale k, il valore di ogni pixel Ok(i,j) sia dato dalla somma dei valori dei pixel del k-mo canale delle immagini A e B. Analiticamente:
Ak(i,j) + Bk(i,j) = Ok(i,j), k = 1, 2, 3
Ovviamente, supponiamo che, per semplicità, A e B abbiano la stessa risoluzione. L'operazione precedente deve essere reiterata per tutti i valori di i e j: ciò significa che, per un'immagine full HD, avremo un totale di 1920 x 1080 x 3 operazioni (circa sei milioni!). E' importante sottolineare come si stia considerando un caso estremamente semplice. Il costo computazionale degli algoritmi utilizzati nell'elaborazione dei segnali e nell'analisi statistica, quindi, limita l'efficienza del nostro codice: è di conseguenza importante sfruttare al meglio gli strumenti a nostra disposizione, ed in questo articolo vedremo come farlo.
Pensiamo in parallelo
Torniamo alla nostra immagine. Di default, Matlab elabora i dati in maniera sequenziale, sfruttando un solo processore e seguendo un diagramma di flusso simile a quello in figura 1.
Questo processing è sub-ottimo, in quanto è sfruttato un unico core, lasciando completamente inattivi gli altri. Perché allora non utilizzarli, assegnando (ad esempio) l'elaborazione dell'i-mo canale all'i-mo core? Il diagramma di flusso si trasformerà quindi in quello della figura 2.
Sfruttare n differenti core non significa ridurre i tempi di calcolo di un fattore pari ad n. Infatti, le operazioni di coordinamento e comunicazione tra i processori introducono un overhead che, per forza di cose, ridurrà i benefici introdotti dalla computazione parallela. Adesso, però, è opportuno introdurre [...]
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2073 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.
Matlab è estremamente potente. Tempo fa usai la GUI per realizzare un sistema di DAQ per la gestione di motori e schede varie con le proprie DLL. La flessibilità con il calcolo computing e i tool anche per i deep learning lo rendono davvero interessante.
Sì, a tutto questo aggiungerei anche la possibilità di utilizzare il GPGPU, che permette, soprattutto nel caso del machine learning, di ottenere un incremento esponenziale delle prestazioni, e che è implementato in maniera ‘trasparente’ in MATLAB.