6 L'exemple : la multiplication de matrices carrées

Pour commencer par clarifier la situation, voici le fonctionnement que décrira notre programme.

  • CPU : Allocation de trois matrices carrées
  • CPU : Initialisation des deux matrices carrées à multiplier avec des nombres aléatoires
  • CPU : Remplissage des matrices d'entrée
  • GPU : Calcul du produit matriciel, dont le résultat est stocké sur une troisième matrice
  • CPU : Écriture de la troisième matrice;
  • CPU : Nettoyage de la mémoire et fin de l'exécution du programme.

Nous avons vu les différents types de mémoire, mais pas la manière d'y accéder. Or, cela sera nécessaire pour permettre l'exécution du programme. Nous allons ici nous concentrer sur l'utilisation de la mémoire globale, le but étant de montrer le fonctionnement d'un programme CUDA et non d'optimiser au maximum une application. Mais on le fera après, soyez patient.

Et ne vous inquiétez pas, même si ce que l'on fait tout de suite n'est pas "optimisé" vous allez voir que le résultat est surprenant.

Au lieu de faire n'importe quoi, nous allons tout de suite commencer par structurer notre programme. Et pour une fois, nous allons faire un programme en C, ça nous changera.

  • Nous allons mettre la fonction pour faire la multiplication de matrice sur la carte graphique dans un fichier calcul_cuda.cu, c'est l’extension habituelle pour les fichiers CUDA
  • Nous allons aussi mettre dans ce fichier une fonction en C pour permettre d’appeler la fonction CUDA
  • Pour connaître cette fonction en C, nous allons créer un fichier calcul_cuda.h, ça vous connaissez
  • Le fichier main.c, pour avoir la fonction main du programme
  • Et le fichier CMakeLists.txt pour pouvoir compiler d'une manière tellement simple qu'elle va vous navrer

Et pour bien commencer, nous allons aussi utiliser des fonctions (en fait une seule) pour savoir combien de temps à mis telle ou telle fonction à s'exécuter.