2025-11-10T02:34:56.080990

Verification Challenges in Sparse Matrix Vector Multiplication in High Performance Computing: Part I

Zhang
Sparse matrix vector multiplication (SpMV) is a fundamental kernel in scientific codes that rely on iterative solvers. In this first part of our work, we present both a sequential and a basic MPI parallel implementations of SpMV, aiming to provide a challenge problem for the scientific software verification community. The implementations are described in the context of the PETSc library.
academic

Défis de Vérification dans la Multiplication Matrice-Vecteur Creuse en Calcul Haute Performance : Partie I

Informations Fondamentales

  • ID de l'article: 2510.13427
  • Titre: Verification Challenges in Sparse Matrix Vector Multiplication in High Performance Computing: Part I
  • Auteur: Junchao Zhang (Argonne National Laboratory)
  • Classification: cs.LO cs.DC cs.MS
  • Conférence de publication: International Workshop on Verification of Scientific Software (VSS 2025)
  • Informations de publication: EPTCS 432, 2025, pp. 98–105
  • Lien de l'article: https://arxiv.org/abs/2510.13427

Résumé

La multiplication matrice-vecteur creuse (SpMV) est un noyau fondamental dans les codes scientifiques qui s'appuient sur des solveurs itératifs. Dans cette première partie de notre travail, nous présentons à la fois une implémentation séquentielle et une implémentation parallèle MPI de base de SpMV, visant à fournir un problème de défi pour la communauté de vérification des logiciels scientifiques. Les implémentations sont décrites dans le contexte de la bibliothèque PETSc.

Contexte de Recherche et Motivation

Définition du Problème

Cette recherche aborde les défis de vérification logicielle pour la multiplication matrice-vecteur creuse (SpMV) en calcul haute performance. SpMV est l'opération centrale pour résoudre les systèmes linéaires creux Ax=b, largement utilisée dans les codes de calcul scientifique basés sur des solveurs itératifs, en particulier dans les méthodes de sous-espace de Krylov à grande échelle.

Importance

  1. Caractère fondamental: SpMV est un algorithme central du calcul scientifique, dont la correction affecte directement la fiabilité des applications de niveau supérieur
  2. Complexité: Bien que la définition mathématique soit simple (yi = Σ(aij·xj)), les formats de stockage, la distribution des données, la parallélisation et l'optimisation rendent l'implémentation complexe
  3. Défis de vérification: Les implémentations hautement optimisées existantes posent des défis majeurs pour la vérification logicielle

Limitations des Approches Existantes

  • La bibliothèque PETSc contient des implémentations MPI parallèles SpMV hautement optimisées, mais leur complexité rend la vérification difficile
  • Absence de problèmes de défi standardisés conçus spécifiquement pour la communauté de vérification logicielle

Motivation de la Recherche

Fournir à la communauté de vérification des logiciels scientifiques un problème de défi structuré, en proposant des implémentations SpMV allant du simple au complexe, pour aider au développement et à l'évaluation des outils et méthodes de vérification.

Contributions Principales

  1. Fourniture d'un problème de défi de vérification standardisé: Conception de cas de test standardisés SpMV pour la communauté de vérification des logiciels scientifiques
  2. Implémentation de deux algorithmes SpMV de complexités différentes:
    • Implémentation séquentielle (seq.c)
    • Implémentation parallèle MPI de base (mpibasic.c)
  3. Établissement d'un cadre de vérification complet: Incluant la génération de données d'entrée, la vérification de correction et les mécanismes de détection d'erreurs
  4. Définition explicite des objectifs de vérification: Fourniture d'exigences de vérification spécifiques et de défis pour chaque implémentation

Détails de la Méthode

Définition de la Tâche

Entrées:

  • Matrice creuse A (M×N, NNZ éléments non nuls), stockée au format CSR
  • Vecteur x (dimension N)
  • Résultat attendu z = Ax (dimension M)

Sorties:

  • Résultat calculé y = Ax
  • Vérification de correction: ||y-z||² devrait être 0 (en ignorant les erreurs d'arrondi en virgule flottante)

Contraintes:

  • Utilisation du format Compressed Sparse Row (CSR)
  • Support du calcul distribué parallèle MPI

Conception de la Structure de Données

Représentation au Format CSR

La matrice creuse A est représentée par trois tableaux:

  • a[nnz]: Stockage des valeurs des éléments non nuls
  • j[nnz]: Stockage des indices de colonne des éléments non nuls
  • i[m+1]: Pointeurs de ligne, ik pointe vers la position de départ de la ligne k dans a et j

Définition des Types de Données

// Version séquentielle
typedef struct {
    int m, n;        // Dimensions de la matrice
    int *i, *j;      // Indices au format CSR
    double *a;       // Valeurs des éléments non nuls
} Mat;

// Version parallèle MPI
typedef struct {
    int m, n, M, N;  // Dimensions locales et globales
    int rstart, cstart; // Indices de ligne et colonne de départ
    int *i, *j;
    double *a;
} Mat;

Implémentation de l'Algorithme

Implémentation Séquentielle

for (i = 0; i < A.m; i++) {
    y.a[i] = 0.0;
    for (j = A.i[i]; j < A.i[i + 1]; j++)
        y.a[i] += A.a[j] * x.a[A.j[j]];
}

Implémentation Parallèle MPI

  1. Stratégie de distribution des données:
    • Matrice distribuée par blocs de lignes: m = M/size + (M%size > rank ? 1 : 0)
    • Vecteur x distribué par disposition de colonnes: n = N/size + (N%size > rank ? 1 : 0)
  2. Motif de communication:
    • Utilisation de MPI_Allgather ou MPI_Allgatherv pour collecter le vecteur x complet
    • Utilisation de MPI_Allreduce pour calculer la norme globale
  3. Flux de calcul:
    • Calcul de la disposition de matrice locale (rstart, cstart)
    • Extraction des données locales à partir du tableau global
    • Collecte du vecteur distribué x vers une copie locale complète X
    • Exécution du calcul SpMV local
    • Calcul de la norme d'erreur locale et réduction globale

Points d'Innovation Technique

  1. Conception de complexité progressive: Du simple implémentation séquentielle à l'implémentation parallèle de base, facilitant les tests progressifs des outils de vérification
  2. Interface de vérification standardisée: Fourniture d'un format d'entrée-sortie unifié et d'un mécanisme de vérification de correction
  3. Contexte d'application réelle: Basé sur les modèles d'implémentation réels de la bibliothèque PETSc, avec une signification pratique
  4. Cadre extensible: Pose les fondations pour les versions optimisées plus complexes futures (Partie II)

Configuration Expérimentale

Ensembles de Données

  • Échelle de la matrice: Matrice 32×36 contenant 50 éléments non nuls
  • Génération de données: Utilisation du script Python accompagnant csr.py pour générer les données de test
  • Entrées codées en dur: Pour simplifier l'utilisation, les données de test sont directement intégrées dans le code source
  • Personnalisabilité: Les utilisateurs peuvent modifier les paramètres du script Python pour générer différents cas de test

Métriques d'Évaluation

  • Vérification de correction: Calcul de la norme au carré ||y-z||²
  • Critère de succès: Norme ≤ 1e-6 (en tenant compte des erreurs d'arrondi en virgule flottante)
  • Code de retour: Retour 0 en cas de correction, valeur non nulle en cas d'erreur

Détails d'Implémentation

  • Langage de programmation: C
  • Cadre parallèle: MPI
  • Exigences de compilation: Compilateur C ou compilateur MPI uniquement
  • Disponibilité du code: Publication publique dans le référentiel GitHub

Résultats Expérimentaux

Objectifs de Vérification

Exigences de Vérification pour l'Implémentation Séquentielle

Vérification que le résultat calculé y satisfait: yi = Σ(aij·xj), où les aij non stockés dans la représentation CSR sont considérés comme 0

Exigences de Vérification pour l'Implémentation Parallèle MPI

  1. Correction de la disposition: Vérification que Σm = M, Σn = N
  2. Correction du calcul local: Vérification que le y sur chaque processus est le résultat correct du produit de la sous-matrice locale correspondante avec le vecteur x complet

Cas de Test

L'article fournit des données de test concrètes:

  • Matrice d'entrée: Matrice creuse 32×36 (50 éléments non nuls)
  • Vecteur d'entrée: Vecteur de dimension 36
  • Sortie attendue: Vecteur résultat de dimension 32
  • Toutes les données fournies sous forme de tableaux d'entiers et de nombres flottants

Travaux Connexes

Domaines de Recherche Connexes

  1. Méthodes de sous-espace de Krylov: SpMV est le composant central des solveurs itératifs
  2. Bibliothèque PETSc: Fournit une suite riche de méthodes de Krylov et d'implémentations SpMV
  3. Vérification des logiciels scientifiques: Vérification de correction pour les logiciels scientifiques de calcul haute performance

Positionnement de cet Article

  • Comble le vide du manque de défis de vérification SpMV standardisés dans la communauté de vérification des logiciels scientifiques
  • Fournit une référence de base pour la vérification des implémentations optimisées complexes
  • Relie les méthodes de vérification théoriques aux besoins réels des applications HPC

Conclusions et Discussion

Conclusions Principales

  1. Établissement réussi d'un problème de défi standardisé pour la vérification logicielle SpMV
  2. Fourniture de deux implémentations de complexités différentes, adaptées aux tests progressifs des outils de vérification
  3. Basé sur les modèles réels de la bibliothèque PETSc, avec une valeur d'application pratique

Limitations

  1. Limitation d'échelle: Les cas de test actuels sont de petite taille (matrice 32×36)
  2. Absence d'optimisation: L'implémentation MPI de base n'inclut pas les optimisations complexes des environnements de production réels
  3. Portée de vérification: Couvre uniquement la correction de base, ne traite pas la vérification de performance et de stabilité numérique

Directions Futures

  1. Développement de la Partie II: Prévision de fournir des implémentations MPI optimisées plus complexes dans les travaux ultérieurs
  2. Extension des cas de test: Ajout de matrices de test à plus grande échelle et avec différents motifs de parcimonie
  3. Intégration des outils de vérification: Tests d'intégration avec les outils de vérification existants

Évaluation Approfondie

Avantages

  1. Valeur pratique élevée: Résout les besoins réels de la communauté de vérification des logiciels scientifiques
  2. Conception rationnelle: La conception de complexité progressive facilite le développement et les tests des outils de vérification
  3. Haut degré de standardisation: Fourniture de spécifications complètes d'entrée-sortie et de mécanismes de vérification de correction
  4. Forte reproductibilité: Code accessible publiquement, données de test intégrées, facile à reproduire
  5. Contexte pratique: Basé sur la bibliothèque PETSc largement utilisée, avec une signification d'application réelle

Insuffisances

  1. Manque d'analyse théorique: Absence d'analyse de complexité algorithmique ou de discussion des propriétés théoriques
  2. Couverture de test limitée: Fourniture d'un seul cas de test, diversité insuffisante
  3. Profondeur de vérification: Accent principal sur la correction fonctionnelle, manque d'analyse de précision numérique et de conditions limites
  4. Considérations de performance: N'aborde pas les défis liés à la vérification de performance

Impact

  1. Contribution au domaine: Fournit une plateforme de test standardisée importante pour la vérification des logiciels scientifiques
  2. Valeur pratique: Peut être directement utilisé pour le développement et l'évaluation des outils de vérification
  3. Extensibilité: Pose les fondations d'un cadre pour les implémentations plus complexes ultérieures
  4. Valeur communautaire: Favorise la collaboration entre les communautés HPC et de vérification logicielle

Scénarios d'Application

  1. Développement d'outils de vérification: Utilisation comme cas de test standard pour vérifier l'efficacité des outils
  2. Applications pédagogiques: Approprié comme cas d'étude pour l'enseignement du calcul parallèle et de la vérification logicielle
  3. Tests de référence: Peut servir de référence pour la correction des implémentations SpMV
  4. Plateforme de recherche: Fournit une plateforme standardisée pour la recherche d'algorithmes et d'optimisations connexes

Références

  1. S Balay et al. (2025): PETSc/TAO Users Manual. Technical Report ANL-21/39 - Revision 3.23, Argonne National Laboratory
  2. Yousef Saad (2003): Iterative Methods for Sparse Linear Systems, second edition. Society for Industrial and Applied Mathematics

Évaluation Globale: Cet article est un travail très pratique qui, bien que sa contribution en innovation théorique soit limitée, fournit à la communauté de vérification des logiciels scientifiques un problème de défi standardisé très demandé. L'article est bien structuré, l'implémentation est complète, avec une bonne reproductibilité et extensibilité, et a une valeur importante pour promouvoir le développement du domaine de la vérification des logiciels HPC.