NVIDIA annonce la nouvelle version de CUDA
L'API de calcul sur processeur graphique s'enrichit d'une bibliothèque de décodage d'images JPEG

En même temps que la sortie de sa nouvelle génération de cartes graphiques (Turing), NVIDIA annonce la prochaine version de sa suite logicielle pour l’exécution de codes de calcul sur ses processeurs graphiques : CUDA 10. Cette API est loin d’être remplacée par OpenCL et NVIDIA s’efforce de garder une certaine avance par rapport à l’API concurrente (mais librement implémentable). CUDA 10 n’est pas encore disponible au téléchargement, mais sa version finale sortira en 2018.

La version 10, outre la gestion des cartes Turing, apporte des améliorations habituelles de performance dans ses bibliothèques de calcul : la transformée de Fourier rapide (FFT) s’exécute plus vite sur plusieurs GPU (NVIDIA parle même de mise à l’échelle forte sur seize cartes), les routines d’algèbre linéaire dense (factorisation de Cholesky et valeurs propres) sont plus rapides, certains noyaux ont été optimisés pour les spécificités de gestion des précisions multiples de Turing.

Une nouvelle bibliothèque fait son apparition : nvJPEG, pour le décodage d’images au format JPEG (une par une ou bien en lot) et la conversion d’espaces colorimétriques. Le décodeur peut fonctionner tant uniquement sur la carte graphique qu’en mode hybride, en exploitant aussi le CPU. Les avantages sont un meilleur débit et une latence diminuée : nvJPEG peut décoder plus d’images par seconde qu’un CPU, mais prend aussi moins de temps par image. Ses applications prévues sont la vision par ordinateur, notamment par apprentissage profond : la plupart des images utilisées sont au format JPEG, qui prend relativement peu de place sur le disque. En sus, nvJPEG peut effectuer certaines opérations directement au même moment que le chargement, comme des translations, une mise à l’échelle, etc. Une préversion est déjà disponible.


Dans les nouvelles fonctionnalités, on compte aussi un nouveau mécanisme d’interopérabilité avec les API de rendu comme DirectX 12 et Vulkan, à destination principalement des applications en temps réel comme les jeux. La famille d’outils de développement Nsight s’enrichit de Systems (pour l’analyse de performance à l’échelle d’un système complet) et de Compute (plus spécifiquement pour les noyaux de calcul, avec une collection de données rapide et une interface entièrement programmable).


La microarchitecture de Turing promet également des modifications au niveau des capacités de calcul (Compute Capability). Par exemple, les cœurs tensoriels peuvent fonctionner avec d’autres précisions : jusqu’à présent, ils étaient limités à des nombres à virgule flottante sur demi-précision (seize bits) ; avec Turing, ils pourront descendre jusque des entiers sur huit et même quatre bits (avec des calculs respectivement deux et quatre fois plus rapides). Sur certaines applications, ces quelques modifications seront probablement très utiles à NVIDIA pour garantir une performance excellente — mais seulement sur quelques niches : avec quatre bits, on ne peut représenter que seize valeurs différentes…


Les multiprocesseurs de flux (SM) évoluent également, dans les cœurs de calcul (CUDA). Notamment, Volta avait séparé les parties effectuant des calculs sur des entiers, de telle sorte qu’il devient possible de travailler, exactement en même temps, sur des entiers et des nombres à virgule flottante. Ceci permet d’accélérer grandement des opérations de génération d’adresse, notamment.

Les unités arithmétiques et logiques de ces multiprocesseurs voient aussi la gestion des précisions inférieures de manière plus générale : toutes les opérations autrefois exclusivement FP32 peuvent être effectuées avec une précision moindre (FP16), à une vitesse double. Ceci était utile pour les réseaux neuronaux, mais l’est tout autant pour certains jeux.


Sources : Announcing CUDA Toolkit 10, NVIDIA Reveals Next-Gen Turing GPU Architecture: NVIDIA Doubles-Down on Ray Tracing, GDDR6, & More.