Produit Matrice Vecteur

Le but de ce projet est d'implémenter le produit Matrice-Vecteur en utilisant une topologie en anneau.

  • On considère une matrice de taille NxN
  • Chaque noeud de l'anneau aura une copie du vecteur
  • La matrice initiale sera découpée en blocs de ligne (N/P)
  • Chaque noeud calculera le produit de sa sous matrice avec le vecteur
  • Les calculs seront ramenés sur le processus de rang 0 et le résultat final affiché.

L'ensemble des communications devra utiliser la topologie en anneau. Il est interdit d'utiliser MPI_Bcast ou d'autres primitives de plus haut niveau pour les communications.

La distribution du vecteur (resp. la matrice) devra utiliser l'algorithme de broadcast (resp. scatter) sur anneau vu en cours.

Les fichiers d'entrée seront toujours bien formés

  • Une ligne de fichier ('\n') par ligne de matrice/vecteur
  • Élements entiers séparés par un espace
  • Pas d'espace en fin de ligne
  • La dernière ligne de la matrice se finit aussi par un '\n'

Le code source aura comme nom votreNom.c (remplacez votreNom par votre nom...). Le programme prendra le fichier contenant la matrice, puis le fichier contenant le vecteur, comme argument sur la ligne de commande

  • ./votreNom matrice vecteur

Contraintes et informations

  • N>=P (on ne traite pas le cas où il y a moins de lignes que de processeurs)
  • Le code de calcul devra utiliser OpenMP
  • La taille maximale des matrices ne dépassera pas ce qu'il est possible d'envoyer en un unique appel MPI (voir les paramètres de MPI_Send).
  • Le cas N divisible par P (N % P == 0) donnera une note maximale de 15/20 si tous les tests sont réussis.
  • Le cas N non divisible par P rapportera des points en plus.

En bas de page vous trouverez des fichiers d'exemple pour des matrices 4x4 et 8x8.