Movatterモバイル変換


[0]ホーム

URL:


Aller au contenu
Wikipédial'encyclopédie libre
Rechercher

Compute Unified Device Architecture

Un article de Wikipédia, l'encyclopédie libre.

Cet article est uneébauche concernant l’informatique.

Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations desprojets correspondants.
Compute Unified Device Architecture

Description de l'image Nvidia CUDA Logo.jpg.
Informations
Développé parNvidiaVoir et modifier les données sur Wikidata
Première versionVoir et modifier les données sur Wikidata
Dernière version13.1.1 ()[1]Voir et modifier les données sur Wikidata
Système d'exploitationMicrosoft Windows,Linux etmacOSVoir et modifier les données sur Wikidata
TypePile de logiciels
Interface de programmationVoir et modifier les données sur Wikidata
LicenceLicence propriétaireVoir et modifier les données sur Wikidata
Site webdeveloper.nvidia.com/cuda-zoneVoir et modifier les données sur Wikidata

modifier -modifier le code -voir Wikidata(aide)

Schéma de principe de l'architecture CUDA :
  1. Les données de la mémoire principale sont copiées vers la mémoire du GPU
  2. Le CPU active lenoyau de calcul du GPU
  3. Les cœurs CUDA du GPU exécutent le noyau de calcul en parallèle
  4. Les données résultantes de la mémoire du GPU sont copiées vers la mémoire principale

CUDA (initialement l'acronyme deCompute Unified Device Architecture[2]) est une technologie propriétaire[3] deGPGPU (General-Purpose Computing on Graphics Processing Units), c'est-à-dire utilisant unprocesseur graphique (GPU) pour exécuter des calculs généraux à la place duprocesseur central (CPU). En effet, ces processeurs comportent couramment de l'ordre d'un millier de circuits de calcul fonctionnant typiquement à 1 GHz, ce qui représente un potentiel très supérieur à un processeur central à 4 GHz, fût-ilmulticœurs etmulti-threads. Cette utilisation requiert que le calcul à effectuer soitparallélisable.

CUDA permet de programmer des GPU enC++. Elle est développée parNvidia, initialement pour ses cartes graphiquesGeForce 8, et utilise unpilote unifié utilisant une technique destreaming (flux continu).

Le premierkit de développement pour CUDA est publié le[4].

Applications

[modifier |modifier le code]

Est réalisable en CUDA tout ce qui demande ducalcul intensif maillable en deux ou trois dimensions, ainsi que ce qui est décomposable en calculs indépendants sur des facteurs premiers, tel que cassage de codes,cassage de mot de passe[5], calculs de structures, simulation de fluides, algorithmes de recuit simulé, calculs économétriques sur de très grandesmatrices (des techniques de découpages de ces matrices en blocs permettent de largement en paralléliser le produit).

Cette section est vide, insuffisamment détaillée ou incomplète.Votre aide est la bienvenue !Comment faire ?

Architectures reconnues par CUDA

[modifier |modifier le code]

Architecture Tesla

[modifier |modifier le code]

L'architectureTesla, introduite en novembre 2006, qui offre selonNvidia la puissance de calcul d'unsuperordinateur (4 téraflops en simple précision, 80 gigaflops en double précision) pour une somme de 10 000 dollars, est construite sur CUDA.

Architecture Fermi (obsolète)

[modifier |modifier le code]

L'architectureFermi, introduite en 2010 avec le GF100, est maintenant obsolète, les versions de CUDA ultérieures aux versions 8.0.x ne la prenant pas en charge.

Architecture Pascal

[modifier |modifier le code]

L'architecturePascal, introduite en 2016 avec les cartes GTX1080 et GTX1070 à 2560 cœurs (gravure en 16 nm) et qui utilise de laGDDR5Xsurcadençable à 2,1 GHz, est également utilisable avec CUDA. NVidia lui annonce 11 téraflops en simple précision.

Architecture Volta

[modifier |modifier le code]

L'architectureVolta, conçue pour des usages professionnels, a été introduite en 2017 et intègre la carte V100, première architecture de NVidia à introduire l'usage des Tensor Cores, des cœurs d'arithmétique spéciaux qui permettent d'accélérer grandement les calculs de matrices en réduisant la précision de 32 à16 bit[6].

Architecture Turing

[modifier |modifier le code]

L'architectureTuring, introduite en 2018 avec les RTX 20, succède aussi à Pascal, mais vise les particuliers, contrairement à Volta. Elle possède de nouvelles unités arithmétiques en plus de Tensor Cores améliorés, les RT Cores, qui eux permettent d'accélérer les calculs deray tracing. Cependant ces derniers ne sont pas programmables via CUDA[7].

Programmation

[modifier |modifier le code]

CUDA présente plusieurs particularités par rapport à la programmation en C, en proposant d'effectuer des calculs génériques sur GPU :

  • hiérarchisation explicite des zones de mémoire (privée, locale, globale) permettant d'organiser finement les transferts entre elles ;
  • regroupement desthreads en grilles de grilles : grille 1D, 2D ou 3D locale de threads pouvant se partager rapidement la mémoire locale. Les grilles locales sont ordonnées en grille globale permettant d'accéder à la mémoire globale.

Quelques réalisations combinent l'usage du langageGo, très orienté sur la programmation de processus concurrents et la gestion de mémoire sans fuites, avec celui de CUDA[8].

Avantages

[modifier |modifier le code]
  • Accès relativement standardisé à la puissance de calcul.
  • Un programme réalisé avec CUDA reste utilisable sur plus d'une génération de matériel.

Limites

[modifier |modifier le code]
  • Les vitesses de transfert entre l'hôte et le client peuvent être un goulet d'étranglement ; il peut être évité par des copies asynchrones.
  • Regroupement desthreads par groupe de trente-deux, pour des questions de performances (leswarps). Les divergences au sein d'unwarp, dues aux exécutions conditionnelles, peuvent nuire grandement aux performances. Il s'agit d'une limitation due au modèle SIMD. De ce fait, tous les algorithmes ne gagnent pas à être portés sur CUDA, et plus généralement sur un modèle SIMD.
  • Un code C valide peut être rejeté à cause des contraintes matérielles, telles que le manque de mémoire ou le nombre dethreads.
  • Les premières versions (1.x) de CUDA ne supportent pas larécursion, lespointeurs de fonctions, et d'autres limites qui tendent à disparaître.
  • La précision des calculs : la double précision n'est disponible que depuis la version 1.3. De plus, la normeIEEE 754 n'est que partiellement atteinte : en double précision, le seul mode d'arrondi estround-to-nearest-even. En simple précision, les nombres ne sont pas dénormalisés, le signalNaN est absent et les deux seuls modes d'arrondi sontchop etround-to-nearest even. Ces particularités ne sont pas valables à partir des GPU de Compute Capability 2.0[9].
  • Seuls les GPU nVidia supportent CUDA, les fabricants concurrents ne peuvent pas l'implémenter[10],[3].

Exemples

[modifier |modifier le code]

Exemple avec émulation de carte

[modifier |modifier le code]
#include<stdio.h>#include<stdlib.h>#include<cuda.h>#include<cuda_runtime.h>__global__voidmykernel(float*A1,float*A2,float*R){intp=threadIdx.x;R[p]=A1[p]+A2[p];}intmain(){floatA1[]={1,2,3,4,5,6,7,8,9};floatA2[]={10,20,30,40,50,60,70,80,90};floatR[9];// 9 additions, aucune boucle !mykernel<<<1,9>>>(A1,A2,R);// sortie à l'ecranfor(inti=0;i<9;i++){printf("%f\n",R[i]);}}

Cet exemple fonctionne seulement si on émule la carte graphique, car on ne recopie pas les données sur la carte. L'émulation a été supprimée à partir de CUDA 3.1[11][réf. non conforme].

Compilation par :

nvcc -deviceemu -o run prog.cu

Exemple avec une carte graphique NVidia

[modifier |modifier le code]
#include<stdio.h>#include<stdlib.h>#include<cuda.h>#include<cuda_runtime.h>__global__voidmykernel(float*A1,float*A2,float*R){intp=threadIdx.x;R[p]=A1[p]+A2[p];}intmain(){floatA1[]={1,2,3,4,5,6,7,8,9};floatA2[]={10,20,30,40,50,60,70,80,90};floatR[9];inttaille_mem=sizeof(float)*9;// on alloue de la memoire sur la carte graphiquefloat*a1_device;float*a2_device;float*r_device;cudaMalloc((void**)&a1_device,taille_mem);cudaMalloc((void**)&a2_device,taille_mem);cudaMalloc((void**)&r_device,taille_mem);// on copie les donnees sur la cartecudaMemcpy(a1_device,A1,taille_mem,cudaMemcpyHostToDevice);cudaMemcpy(a2_device,A2,taille_mem,cudaMemcpyHostToDevice);//9 additions, aucune boucle !mykernel<<<1,9>>>(a1_device,a2_device,r_device);// on recupere le resultatcudaMemcpy(R,r_device,taille_mem,cudaMemcpyDeviceToHost);// sortie à l'ecranfor(inti=0;i<9;i++){printf("%f\n",R[i]);}}

Compilation par :

nvcc -o add_cuda add_cuda.cu

Notes et références

[modifier |modifier le code]
  1. « Index of /compute/cuda/redist »(consulté le)
  2. (en) Anand LalShimpi et Wilson, Derek, « Nvidia's GeForce 8800 (G80): GPUs Re-architected for DirectX 10 », AnandTech,(consulté le).
  3. a etb(en) AgamShah, « Nvidia not totally against third parties making CUDA chips », surtheregister.com(consulté le).
  4. (en)« http://news.developer.nvidia.com/2007/02/cuda_for_gpu_co.html »(Archive.orgWikiwixArchive.isGoogleQue faire ?), surNvidia.
  5. « Cryptohaze », surSourceForge(consulté le).
  6. (en-US) « Programming Tensor Cores in CUDA 9 », surNVIDIA Technical Blog,(consulté le).
  7. (en-US) « NVIDIA Turing Architecture In-Depth », surNVIDIA Technical Blog,(consulté le).
  8. https://hpcugent.github.io/easybuild/files/FOSDEM14/FOSDEM14_HPC_devroom_14_GoCUDA.pdf
  9. (en) « Floating Point and IEEE 754 », surdocs.nvidia.com(consulté le).
  10. (en) « CUDA GPUs - Compute Capability », surNVIDIA Developer(consulté le).
  11. https://developer.download.nvidia.com/compute/cuda/3_1/sdk/docs/CUDA_SDK_release_notes.txt

Voir aussi

[modifier |modifier le code]

Articles connexes

[modifier |modifier le code]

Produits concurrents

[modifier |modifier le code]

Liens externes

[modifier |modifier le code]

Installation de CUDA en fonction dessystèmes d'exploitation

[modifier |modifier le code]

Architecture CUDA

[modifier |modifier le code]
v ·m
TechnologiesNvidia
Processeur graphique
Premiers Chipsets
Série RIVA
SérieGeForce
Architectures
Autres séries
GPU pourconsole
Électronique grand public
Chipsets nForce
Technologies
Logiciels
Ce document provient de « https://fr.wikipedia.org/w/index.php?title=Compute_Unified_Device_Architecture&oldid=232281944 ».
Catégories :
Catégories cachées :

[8]ページ先頭

©2009-2026 Movatter.jp