Testez l'évolutivité de votre algorithme PETSc lors du rescale

La boîte à outils extensible portable pour le calcul scientifique (PETSc) est une suite de structures de données et de routines développées par le Laboratoire national d'Argonne pour la solution évolutive (parallèle) d'applications scientifiques modélisées par des équations aux dérivées partielles. PETSc est l'une des bibliothèques de logiciels numériques parallèles les plus utilisées au monde pour les équations aux dérivées partielles et les calculs de matrices clairsemées.
Traditionnellement, lorsqu'un scientifique ou un développeur d'algorithmes termine un nouvel algorithme parallèle dans PETSc, il doit l'exécuter dans un cluster informatique multicœur pour tester son évolutivité et son accélération. Un cluster est généralement une ressource de calcul partagée à un université, gouvernement, ou une entreprise avec un travail administratif important pour maintenir la ressource HPC. De plus, pour créer une exécution, le scientifique ou le développeur doit préparer l'environnement, ce qui peut être difficile et prendre du temps, et tout imprévu pendant l'exécution peut provoquer un échec et aucune donnée de sortie générée.
Avec Rescale, tester l’évolutivité de l’algorithme PETSc devient beaucoup plus simple. Un scientifique ou un développeur peut spécifier le type de matériel et le nombre de cœurs, puis exécuter le travail avec une connexion Internet et un navigateur Web.
Algorithme à tester
L'algorithme que je vais tester provient du tutoriel officiel du package PETSc. Le code résout un système linéaire en parallèle avec KSP. J'ai choisi KSP car c'est l'une des opérations les plus couramment utilisées dans le package PETSc. J'ai apporté une légère modification qui génère les horodatages des opérations de chaque appel de fonction PETSc pour tous les processus dans un fichier journal pour une analyse plus approfondie.
Voici la code source après mes modifications. J'ai également créé un makefile pour le compiler.
Ce que KSP fait, c'est résoudre l'équation linéaire AX=B pour le vecteur X – qui a n éléments – où A est une matrice de taille mxn et B est un vecteur qui a m éléments.
Exécutez votre algorithme sur Rescale
Après vous être inscrit sur Rescale, vous pouvez créer une nouvelle tâche qui vous permet de compiler et d'exécuter votre algorithme PETSc.
Sur la page Configuration, sélectionnez PETSc dans la section Code d'analyse. Dans les paramètres matériels, sélectionnez Core Type comme HPC+ avec 8 cœurs. L'image ci-dessous montre à quoi devrait ressembler votre écran.

Sur la page Workflow, téléchargez le code source et le makefile. Alternativement, vous pouvez également choisir de télécharger le fichier binaire exécutable compilé à la place. Dans la commande Analyse, saisissez la commande que vous souhaitez exécuter.
faire; mpirun -n 8 ./ksp_test -n 1024 -m 1024 -logfile ksp_test_1024_1024_8.log
La page Workflow devrait ressembler à ceci :
Cliquez sur Soumettre dans le coin inférieur droit pour exécuter votre tâche vers Rescale. Après la soumission du travail, la page Statut vous permettra de surveiller le travail en temps réel.
Une fois le travail terminé, vous pouvez afficher et télécharger les fichiers de sortie et les fichiers journaux à partir de la page Résultats.
Résultats des tests KSP
Lors de mon test d'évolutivité, j'ai choisi 1, 2, 4, 8, 16 et 32 cœurs, avec le type de cœur HPC+ de Rescale. La taille de la matrice A était de 1024 1024 x XNUMX XNUMX. Voici les résultats du temps d'exécution moyen du processus, du nombre d'itérations et du temps par itération.
À partir du temps d'exécution moyen des processus, nous pouvons voir qu'à mesure que le nombre de cœurs augmentait, le temps diminuait – jusqu'à 16 cœurs – puis augmentait de manière inattendue jusqu'à 32 cœurs. Cela s'est produit parce que je devais prendre en compte le nombre d'itérations.
Chaque fois que l'algorithme démarrait, la matrice et le vecteur de droite étaient générés aléatoirement. Cela signifiait que les itérations nécessaires pour converger vers la « norme d’erreur » étaient différentes à chaque fois. Dans le graphique suivant, nous voyons le nombre d'itérations pour chaque exécution de notre test.
Le dernier graphique montre le nombre d'itérations par seconde, qui est calculé en fonction du nombre d'itérations/du temps d'exécution moyen du processus. À partir des graphiques, nous pouvons voir que le KSP parallèle évolue bien avec le nombre croissant de cœurs.
Si vous disposez d'un compte Rescale, vous pouvez cliquer sur ICI. (en anglais seulement) pour cloner le travail de test KSP que j'ai mentionné et essayer d'exécuter la simulation avec différents paramètres matériels, nombre de cœurs et paramètres. Vous pouvez également cliquer ICI. (en anglais seulement) pour cloner un exemple de travail « PETSc helloworld ». Si vous n'avez pas de compte, veuillez cliquer ICI. (en anglais seulement) se inscrire.