La sigla CUDA, ben conosciuta da chi si occupa di programmazione nell’ambito della computer graphics e computer vision, è l’acronimo di Compute Unified Device Architecture e rappresenta una infrastruttura API di accesso alle potenzialità di calcolo offerte dalla schede video NVIDIA, direttamente da codice, offrendo enormi vantaggi di scalabilità computazionale.

In pratica, un programmatore può sfruttare la potenza di calcolo delle GPU NVIDIA per eseguire calcoli complessi in parallelo.

Ecco perché oggi, con la diffusione di modelli deep learning, risulta sempre più utile sfruttare queste potenzialità di calcolo, soprattutto nelle fasi di learning dei modelli.

Ma..c’è sempre un ma!
Da un punto di vista operativo, arrivare a tale operatività necessita spesso di articolate manovre di editing e configurazione di codice per trovarela giusta “affinità” tra le librerie e le GPU supportate.
Infatti, man mano che vengono prodotte nuove schede video, GPU e nuovi driver, vengono rese disponibili versioni CUDA più recenti che vanno a stimolare, allo stesso tempo, l’aggiornamento delle librerie di calcolo (come tensorflow, pytorch, keras, ecc.) che ovviamente cercano, di volta in volta, una più integrata ottimizzazione dei propri codici alle ultime possibilità offerte dalle API.

Ma questo rincorrersi non trova facilmente soluzione.

A noi programmatori ci tocca maneggiare tra le righe nella disperata ricerca di compatibilità tra CUDA e librerie e, a loro volta, fra librerie e compilatori, arrivando spesso a rendere operativo un listato e vanificando allo stesso istante precedenti affinità ancestrali che rendevano operativi precedenti codici e che, a distanza di qualche aggiornamento, si ritrovano orfani nella nostra cartella di lavoro, senza più possibilità di essere eseguiti (se non tramite un’altra sfiancante operazione di versioning che, inevitabilmente, porterebbe altri listati nella stessa disperazione.

Esiste una figura a supporto di questa nevrosi digitale ?