Ottimizzazione CUDA su GPU NVIDIA Blackwell: guida alle funzionalità per famiglia | | | | Turtles AI
Con l’architettura Blackwell e CUDA 12.9, NVIDIA introduce funzionalità specifiche per famiglia, permettendo ottimizzazioni avanzate del codice GPU mantenendo la compatibilità all’interno della stessa famiglia di architetture.
Punti chiave:
- Le funzionalità specifiche per famiglia sono supportate da dispositivi con la stessa versione principale della capacità di elaborazione.
- L’uso dei suffissi f e a nei flag di compilazione consente di targettizzare rispettivamente funzionalità specifiche per famiglia e per architettura.
- Il codice PTX offre compatibilità futura, mentre i binari cubin sono ottimizzati per prestazioni su architetture specifiche.
- L’utilizzo di librerie come CUTLASS e cuBLASDx facilita l’implementazione di funzionalità avanzate con percorsi di fallback integrati.
Con l’avvento dell’architettura Blackwell e l’aggiornamento CUDA 12.9, NVIDIA ha introdotto un nuovo paradigma nella progettazione del codice GPU: le funzionalità specifiche per famiglia. Queste funzionalità, contraddistinte dal suffisso f nei flag di compilazione (sm_100f, compute_100f), sono garantite su tutte le GPU appartenenti alla stessa famiglia, ovvero con la stessa versione principale della capacità di elaborazione, ma possono variare nella versione secondaria. Questo approccio differisce dalle funzionalità specifiche per architettura, identificate dal suffisso a (sm_90a, compute_90a), che sono limitate a una singola versione di capacità di elaborazione e non garantiscono compatibilità con altre architetture.
La compilazione del codice CUDA può includere sia binari cubin, ottimizzati per prestazioni su specifiche architetture, sia codice PTX, che offre compatibilità futura grazie alla compilazione just-in-time (JIT) da parte del driver CUDA. Tuttavia, quando si utilizzano funzionalità specifiche per famiglia o per architettura, è necessario includere i relativi flag di compilazione per garantire il corretto funzionamento del codice su dispositivi compatibili. Ad esempio, per sfruttare appieno le funzionalità dei Tensor Core su GPU Hopper o Blackwell, è opportuno compilare il codice con i flag -gencode arch=compute_90a,code=sm_90a o -gencode arch=compute_100f,code=sm_100f rispettivamente.
L’utilizzo di librerie come CUTLASS e cuBLASDx, che integrano percorsi di codice ottimizzati per diverse architetture e capacità di elaborazione, facilita l’implementazione di funzionalità avanzate senza compromettere la compatibilità. Queste librerie includono percorsi di fallback che garantiscono il corretto funzionamento del codice anche su GPU che non supportano determinate funzionalità specifiche.
L’introduzione delle funzionalità specifiche per famiglia con l’architettura Blackwell e CUDA 12.9 rappresenta un’evoluzione significativa nella progettazione del codice GPU, offrendo nuove opportunità di ottimizzazione mantenendo al contempo la compatibilità all’interno delle famiglie di architetture.


