Loading s7crs_l14_gpu...

enib_small.png S7-CRS L14_Gpu — Accélération de calculs sur GPU

Les fichiers servant de support à cette expérimentation seront obtenus par la commande $ cp -r /home/TP/sujets/CRS_L14_Gpu . depuis les salles de Labo de l'ENIB, ou par la commande $ sftp -P 55555 -r votre_identifiant@sftp.enib.fr:/home/TP/sujets/CRS_L14_Gpu . depuis l'extérieur de l'ENIB.

Il s'agit d'une série d'exercices en rapport avec l'utilisation d'une carte graphique pour en exploiter les multiples unités de calcul.
Au cours de cette séance nous mettrons en évidence les caractéristiques essentielles de cette technologie ainsi que quelques écueils qui limitent les performances et envisagerons des démarches pour les éviter.

Chaque programme est volontairement très simple afin de se focaliser sur la découverte des services proposés sans être distrait par les détails annexes d'une quelconque application particulière.
Il convient de traiter ces exercices tranquillement, en s'interrogeant à chaque fois sur le propos de la fonctionnalité particulière qui est mise en avant.
Il ne sert strictement à rien d'enchaîner les exercices sans les comprendre en se contentant de “ça compile et ça ne plante pas donc j'ai bon, je passe à la suite...”

Le fichier d'en-tête crsCuda.hpp doit être consulté très régulièrement puisqu'il fournit la mise à disposition dans une forme facilitée pour les étudiants (dissimulation des détails de l'API) des fonctionnalités de mise en œuvre de l'API CUDA-driver de Nvidia.
Le fichier d'en-tête crsUtils.hpp doit également être consulté très régulièrement puisqu'il fournit, au delà de quelques fonctionnalités utilitaires, la mise à disposition dans une forme facilitée pour les étudiants (limitation des pointeurs, des conversions de types, utilisation de chaînes et vecteurs C++, contrôle des échecs...) des appels et fonctionnalités systèmes que nous utiliserons.

Vous êtes censés savoir refaire et réutiliser tous ces exercices lors des séances ultérieures ; n'hésitez donc pas à poser des questions lors de cette séance et à les refaire tout seul ensuite pour vous entraîner.

  • Afin de faire usage du GPU, le fichier GNUmakefile doit être modifié pour positionner use_cuda=1 (parmi les réglages du début du fichier).

  • Nous nous intéressons ici aux performances des diverses solutions explorées.
  • Les mesures de performances n'ont de sens que si le code est compilé en mode “optimisé” ; toutes les options de mise au point sont alors désactivées.
  • Pour tester le fonctionnement de vos programme pendant la mise au point, vous pourrez vous contenter de les fabriquer avec make.
  • En revanche, pour relever les performances il faudra refabriquer l'ensemble avec make rebuild opt=1 pour activer les optimisations.
{1 #minimal } Démarche de mise en œuvre d'un GPU
{2 #compute } Calcul massif sur GPU
{3 #transfer } Transferts entre hôte et GPU
{4 #aos } Disposition Array-Of-Structures
{5 #soa } Disposition Structure-Of-Arrays

Cette découverte de la mise en œuvre d'un GPU visait à présenter les caractéristiques essentielles de cette technologie ainsi que quelques écueils qui risquent de brider les performances d'une réalisation.
Nous n'avons traité ici que de problèmes triviaux, mais les facteurs limitants en performance qui ont été évoqués laissent entrevoir le fait que cette solution n'est malheureusement pas adaptée à une grande variété de problèmes.

De nombreux autres points mériteraient encore d'être abordés :