Algoritmi Biometrici nell’era del Parallel Computing

10/05/2013
Compartir!

Tradizionalmente, l'industria dei semiconduttori è stata in grado di aumentare la velocità di clock dei dispositivi informatici raddoppiando il numero di transistor ad ogni nuova generazione. Purtroppo, a causa di vincoli di potenza e frequenza di clock, la crescita ha attraversato una fase di stallo negli ultimi dieci anni ed i maggiori produttori di microprocessori hanno svoltato verso architetture multicore. Le GPU moderne vanno anche oltre e attualmente integrano centinaia di semplici core ad un bilancio di potenza ragionevole. Grazie a ciò, le società di software hanno lottato per adattarsi e mappare algoritmi sequenziali tradizionali che sono stati concepiti per l'esecuzione seriale in questi nuovi dispositivi. Questo compito di parallelizzazione non è così semplice come si potrebbe pensare. In generale, gli esseri umani tendono a pensare naturalmente alle loro azioni in modo sequenziale. Sei in grado di immaginare rapidamente centinaia di azioni simultanee (alcune delle quali anche con interdipendenze) in parallelo? La maggior parte delle migliori menti e dei programmatori di tutto il mondo non lo sono. E questo è ragionevole. Nella nostra vita quotidiana, tendiamo ad essere sopraffatti al lavoro, se abbiamo a che fare con nove o dieci cose importanti allo stesso tempo. Ma in poche parole, sembra che il nostro cervello non sia progettato per gestire il multitasking. Più attività cerchiamo di svolgere in parallelo (per esempio, rispondere ad una e-mail durante l’esecuzione di una telefonata), più è probabile che causiamo un errore dovuto alla scarsa attenzione. Questo è il motivo per cui scrivere codice parallelo ottimizzato e scalabile che he l’obiettivo di essere eseguito su dispositivi come le GPU è un processo lungo e noioso. La scrittura di codice per queste architetture è solitamente soggetto ad errori ed è difficile da debuggare. Non è raro spendere mesi per la scrittura di codice parallelo efficiente per una particolare operazione del kernel la cui versione serializzata potrebbe essere facilmente programmata e testata in un paio di giorni.

In questa nuova era del computing parallelo, se una società vuole rilasciare un prodotto software che sfrutti appieno le capacità hardware parallele di ultima generazione disponibili sul mercato, deve sicuramente investire una maggiore quantità di denaro e risorse di quelle che venivano richieste in passato. Noi di Herta Security abbiamo iniziato ad adottare la parallelizzazione nei nostri prodotti fin dall'inizio e ben presto ci siamo resi conto che gli algoritmi biometrici possono trarre grandi vantaggi dalla parallelizzazione a grana fine e nel calcolo parallelo dei dati vettoriali. Multiple fasi della tradizionale pipeline biometrica, come il processo di estrazione delle caratteristiche, sono intrinsecamente parallele. Tuttavia, la complessità dei modelli di accesso alla memoria di alcune caratteristiche rendono impegnative strategie come il riutilizzo dei dati, il caching ed il prefetching. Con l'avvento della GPU computing, il programmatore deve adesso affrontare milioni di thread concorrenti, sincronizzarli e sfruttare efficientemente l'architettura eterogenea della cache di tali dispositivi al fine di ridurre la latenza il più possibile. Anche se queste attività sono da molto tempo una prospettiva di ricerca e sviluppo, ci consentono di offrire prodotti di buona qualità in grado di scalare bene con i più recenti progressi nell’ambito dell’hardware, fornendo un'esperienza utente imbattibile.