Benchmarks GPU

Plusieurs tests de fonctionnement et de performance de ces cartes sont présentés :

Tests de détection matériel et logiciel

Avec la commande linux lspci (qui affiche la liste de périphériques PCI, dont les cartes GPU) :

c82gpgpu34:~> lspci -v | grep -i nvidia
05:00.0 3D controller: NVIDIA Corporation GK110GL [Tesla K20m] (rev a1)
	Subsystem: NVIDIA Corporation Device 1015
	Kernel driver in use: nvidia
83:00.0 3D controller: NVIDIA Corporation GK110GL [Tesla K20m] (rev a1)
	Subsystem: NVIDIA Corporation Device 1015
	Kernel driver in use: nvidia

Cette commande ne retourne rien si lancée sur les serveurs de compilations (p.ex. e5-2670comp1) puisqu'il n'y a pas de carte GPU installée.

La sortie précédente est obtenue sur un noeud de calcul qui dispose de cartes GPU (dans cet exemple il s'agit du noeud c82gpgpu34 qui dispose de 2 cartes Tesla K20).

La commande linux lsmod affiche l'état et la liste de modules chargés du noyau Linux :

c82gpgpu34:~> lsmod | grep nvidia
nvidia_uvm             33340  0 
nvidia              10492298  1 nvidia_uvm
i2c_core               23876  4 i2c_algo_bit,igb,i2c_i801,nvidia

Pour afficher la version du driver CUDA installé :

c82gpgpu34:~> cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module  340.65  Tue Dec  2 09:50:34 PST 2014
GCC version:  gcc version 4.6.3 (Debian 4.6.3-14) 

Pour afficher la version du CUDA Toolkit installé :

c82gpgpu34:~> nvcc -V 
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2013 NVIDIA Corporation
Built on Wed_Jul_17_18:36:13_PDT_2013
Cuda compilation tools, release 5.5, V5.5.0

nvcc est le compilateur fourni dans le driver pour compiler des programmes CUDA (il appelle le compilateur gcc pour compiler le code C)

Uns autre possibilité (hors commandes Linux) pour détecter la présence et le type de GPUS NVIDIA est de faire appel au programme deviceQuery dont le source .cpp est contenu dans la suite NVIDIA_GPU_Computing_SDK (devenue NVIDIA_CUDA-x.y_Samples dans les versions x.y récentes). Après compilation, ce programme détecte les périphériques “CUDA-capable” du système. Ci-après le output de cette exécution sur un noueud avec des GPUs NVIDIA K20 :

c82gpgpu34:~> cd NVIDIA_GPU_Computing_SDK
c82gpgpu34:~/NVIDIA_GPU_Computing_SDK~> ./C/bin/linux/release/deviceQuery
 
./C/bin/linux/release/deviceQuery Starting...
 
 CUDA Device Query (Runtime API) version (CUDART static linking)
 
Found 2 CUDA Capable device(s)
 
Device 0: "Tesla K20m"
  CUDA Driver Version / Runtime Version          6.5 / 5.5
  CUDA Capability Major/Minor version number:    3.5
  Total amount of global memory:                 4800 MBytes (5032706048 bytes)
MapSMtoCores SM 3.5 is undefined (please update to the latest SDK)!
MapSMtoCores SM 3.5 is undefined (please update to the latest SDK)!
  (13) Multiprocessors x (-1) CUDA Cores/MP:     -13 CUDA Cores
  GPU Clock Speed:                               0.71 GHz
  Memory Clock rate:                             2600.00 Mhz
  Memory Bus Width:                              320-bit
  L2 Cache Size:                                 1310720 bytes
  Max Texture Dimension Size (x,y,z)             1D=(65536), 2D=(65536,65536), 3D=(4096,4096,4096)
  Max Layered Texture Size (dim) x layers        1D=(16384) x 2048, 2D=(16384,16384) x 2048
  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 block:           1024
  Maximum sizes of each dimension of a block:    1024 x 1024 x 64
  Maximum sizes of each dimension of a grid:     2147483647 x 65535 x 65535
  Maximum memory pitch:                          2147483647 bytes
  Texture alignment:                             512 bytes
  Concurrent copy and execution:                 Yes with 2 copy engine(s)
  Run time limit on kernels:                     No
  Integrated GPU sharing Host Memory:            No
  Support host page-locked memory mapping:       Yes
  Concurrent kernel execution:                   Yes
  Alignment requirement for Surfaces:            Yes
  Device has ECC support enabled:                Yes
  Device is using TCC driver mode:               No
  Device supports Unified Addressing (UVA):      Yes
  Device PCI Bus ID / PCI location ID:           5 / 0
  Compute Mode:
     < Exclusive Process (many threads in one process is able to use ::cudaSetDevice() with this device) >
 
Device 1: "Tesla K20m"
  CUDA Driver Version / Runtime Version          6.5 / 5.5
  CUDA Capability Major/Minor version number:    3.5
  Total amount of global memory:                 4800 MBytes (5032706048 bytes)
MapSMtoCores SM 3.5 is undefined (please update to the latest SDK)!
MapSMtoCores SM 3.5 is undefined (please update to the latest SDK)!
  (13) Multiprocessors x (-1) CUDA Cores/MP:     -13 CUDA Cores
  GPU Clock Speed:                               0.71 GHz
  Memory Clock rate:                             2600.00 Mhz
  Memory Bus Width:                              320-bit
  L2 Cache Size:                                 1310720 bytes
  Max Texture Dimension Size (x,y,z)             1D=(65536), 2D=(65536,65536), 3D=(4096,4096,4096)
  Max Layered Texture Size (dim) x layers        1D=(16384) x 2048, 2D=(16384,16384) x 2048
  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 block:           1024
  Maximum sizes of each dimension of a block:    1024 x 1024 x 64
  Maximum sizes of each dimension of a grid:     2147483647 x 65535 x 65535
  Maximum memory pitch:                          2147483647 bytes
  Texture alignment:                             512 bytes
  Concurrent copy and execution:                 Yes with 2 copy engine(s)
  Run time limit on kernels:                     No
  Integrated GPU sharing Host Memory:            No
  Support host page-locked memory mapping:       Yes
  Concurrent kernel execution:                   Yes
  Alignment requirement for Surfaces:            Yes
  Device has ECC support enabled:                Yes
  Device is using TCC driver mode:               No
  Device supports Unified Addressing (UVA):      Yes
  Device PCI Bus ID / PCI location ID:           131 / 0
  Compute Mode:
     < Exclusive Process (many threads in one process is able to use ::cudaSetDevice() with this device) >
 
deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 6.5, CUDA Runtime Version = 5.5, NumDevs = 2, Device = Tesla K20m, Device = Tesla K20m

Test de la bande passante

Un autre test fourni avec NVIDIA_GPU_Computing_SDK est le programme bandwidthTest. Après la compilation du programme source .cpp, son exécution donne la largeur de la bande pour trois transferts qui doivent être pris en compte dans le développement de codes CUDA :

  • transfert depuis CPU sur le GPU
  • transfert depuis GPU sur le CPU
  • transfert depuis GPU sur le GPU (intra GPU)

Ci-dessous la sortie complète de ce programme sur le même noeud que précédemment :

c82gpgpu34:~> cd NVIDIA_GPU_Computing_SDK
c82gpgpu34:~> .C//bin/linux/release/bandwidthTest 
 
./C/bin/linux/release/bandwidthTest Starting...
 
Running on...
 
 Device 0: Tesla K20m
 Quick Mode
 
 Host to Device Bandwidth, 1 Device(s), Paged memory
   Transfer Size (Bytes)	Bandwidth(MB/s)
   33554432			3819.7
 
 Device to Host Bandwidth, 1 Device(s), Paged memory
   Transfer Size (Bytes)	Bandwidth(MB/s)
   33554432			3381.9
 
 Device to Device Bandwidth, 1 Device(s)
   Transfer Size (Bytes)	Bandwidth(MB/s)
   33554432			143586.3

Tests de performance de la composante FFT de Cuda

Tests de performance des bibliothèques d'algèbre linéaire

Tests de performance des codes "maison" portés sur GPUs

des codes “maison” portés sur GPUs (Anisotropic Blur )

documentation/tools/benchmarksgpu.txt · Dernière modification: 2020/08/25 17:58 (modification externe)