3.2.4 : Les informations sur un GPU local



Voici ce que j'obtiens sur mon portable qui a une Quadro M2200 :

./test_cuda_capabilities
Detected 1 CUDA Capable device(s)

Device 0: "Quadro M2200" CUDA Driver Version / Runtime Version 11.2 / 11.2 CUDA Capability Major/Minor version number: 5.2 Total amount of global memory: 4044 MBytes (4240179200 bytes) MapSMtoCores for SM 5.2 is undefined. Default to use 128 Cores/SM ( 8) Multiprocessors, (128) CUDA Cores/MP: 1024 CUDA Cores GPU Clock rate: 1036 MHz (1.04 GHz) Maximum Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096) Maximum Layered 1D Texture Size, (num) layers 1D=(16384), 2048 layers Maximum Layered 2D Texture Size, (num) layers 2D=(16384, 16384), 2048 layers Total amount of constant memory: 65536 bytes Total amount of shared memory per block: 49152 bytes Total number of registers available per block: 65536 Warp size: 32 Maximum number of threads per multiprocessor: 2048 Maximum number of threads per block: 1024 Max dimension size of a thread block (x,y,z): (1024, 1024, 64) Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535) Maximum memory pitch: 2147483647 bytes Texture alignment: 512 bytes Concurrent copy and kernel execution: Yes with 2 copy engine(s) Run time limit on kernels: Yes Integrated GPU sharing Host Memory: No Support host page-locked memory mapping: Yes Alignment requirement for Surfaces: Yes Device has ECC support: Disabled


Voilà notre toute première utilisation de la bibliothèque Cuda (même si nous n'avons pas fait de calcul).

Il y a quand même tout un tât de concept qu'il va falloir expliquer noteNous allons passer sous silence les informations en rapport avec les textures car ce n'est pas le but de ce cours. :

  • La version de Cuda et des drivers : 11.2 / 11.2
  • La quantité de mémoire du GPU : 4044 MBytes (4240179200 bytes)
  • Le nombre de coeurs par Streaming Multiprocessors : 128
  • Le nombre de coeurs total : 1024 (8 Streaming Multiprocessors de 128 coeurs chacun)
  • La fréquence d'horloge : 1036 MHz (1.04 GHz)
  • Quantité de mémoire constante : 65536 bytes (un genre de cache)
  • Quantité de mémoire partagée par bloc : 49152 bytes (une sotre de cache plus rapide mais plus petite)
  • Nombre de registres disponibles par bloc : 65536
  • Nombre de Warp : 32 (on peut voir ça comme un paquet de 32 threads qui vont être exécutés en même temps noteLes threads seront exécutés progressivement, 2 intructions par 2 instructions pour toutes les Warp)
  • Nombre de threads maximal par Streaming Multiprocessors : 2048
  • Nombre de threads maximal par bloc : 1024
  • Dimension maximale d'un bloc : (1024, 1024, 64)
  • Dimension maximale de la grille (qui contient les blocs) : (2147483647, 65535, 65535)
  • Nombre de copies concurentes simultanées : 2 (c'est pratique, mais compliqué à programmer correctement)


Lorsqu'un GPU est utilisé, les deux premières instructions des threads de la première warp sont exécutés, puis les deux premières instructions des threads de la deuxième warp etc. Et ensuite on recommence avec les deux suivantes.