Article de reference

Boucles de pochoir itératives

La forme d'un pochoir 3D à 7 points de style von Neumann . Les boucles itératives de stencil (ISL), ou calculs de stencil, constituent une classe de solutions de traitement numé...

La forme d'un pochoir 3D à 7 points de style von Neumann .

Les boucles itératives de stencil (ISL), ou calculs de stencil, constituent une classe de solutions de traitement numérique de données qui mettent à jour les éléments d'un tableau selon un motif fixe, appelé stencil . Elles sont fréquemment utilisées dans les simulations informatiques , notamment en dynamique des fluides numérique dans le cadre d'applications scientifiques et d'ingénierie. Parmi les autres exemples notables, citons la résolution d'équations aux dérivées partielles , le noyau de Jacobi , la méthode de Gauss-Seidel , le traitement d'images et les automates cellulaires . La structure régulière des tableaux distingue les techniques de stencil d'autres méthodes de modélisation telles que la méthode des éléments finis . La plupart des codes aux différences finies fonctionnant sur des grilles régulières peuvent être formulés comme des ISL.

Définition

Les ISL effectuent une séquence de balayages (appelés pas de temps) sur un tableau donné. Il s'agit généralement d'une grille régulière à 2 ou 3 dimensions. Les éléments du tableau sont souvent appelés cellules. À chaque pas de temps, tous les éléments du tableau sont mis à jour. En utilisant les éléments voisins du tableau selon un motif fixe (le stencil), la nouvelle valeur de chaque cellule est calculée. Dans la plupart des cas, les valeurs limites restent inchangées, mais dans certains cas (par exemple, pour les codes LBM ), elles doivent également être ajustées pendant le calcul. Le stencil étant identique pour chaque élément, le schéma d'accès aux données est répété.

Plus formellement, nous pouvons définir les ISL comme un quintuplet

Puisque I est un intervalle d'entiers à k dimensions, le tableau aura toujours la topologie d'une grille régulière finie. Ce tableau est également appelé espace de simulation et chaque cellule est identifiée par son indice.

Leurs états sont donnés par la mise en correspondance du tuple

C'est tout ce dont nous avons besoin pour définir l'état du système pour les étapes temporelles suivantes.

Noter que

Cela peut s'avérer utile pour la mise en œuvre de conditions aux limites périodiques , ce qui simplifie certains modèles physiques.

Exemple : Itération de Jacobi en 2D

Dépendances des données d'une cellule sélectionnée dans le tableau 2D.

Pour illustrer la définition formelle, examinons comment définir une itération de Jacobi bidimensionnelle . La fonction de mise à jour calcule la moyenne arithmétique des quatre voisins d'une cellule. Dans ce cas, la solution initiale est égale à 0. Les bornes gauche et droite sont fixées à 1, tandis que les bornes supérieure et inférieure sont fixées à 0. Après un nombre suffisant d'itérations, le système converge vers un point en forme de selle.

S_0
S_200
S_400
S_600
S_800
S_1000
Itération de Jacobi 2D sur un

Pochoirs

La forme du voisinage utilisé lors des mises à jour dépend de l'application. Les modèles les plus courants sont les versions 2D et 3D des voisinages de von Neumann et de Moore . L'exemple ci-dessus utilise un modèle 2D de von Neumann, tandis que les codes LBM utilisent généralement sa variante 3D. Le Jeu de la Vie de Conway utilise le voisinage 2D de Moore. D'autres modèles existent également , comme un modèle à 25 points pour la propagation des ondes sismiques

Pochoir 2D à 9 points
Pochoir à 5 points
Pochoir 2D à 5 points
Pochoir à 6 points
Pochoir 3D à 7 points
Pochoir à 25 points
Pochoir 3D à 25 points
Une sélection de pochoirs utilisés dans diverses applications scientifiques.

Problèmes de mise en œuvre

De nombreux codes de simulation peuvent être formulés naturellement sous forme de lignes matricielles (ISL). Le temps de calcul et la consommation de mémoire augmentant linéairement avec le nombre d'éléments du tableau, les implémentations parallèles des ISL sont d'une importance capitale pour la recherche. Ceci représente un défi car les calculs sont fortement couplés (les mises à jour des cellules dépendant des cellules voisines) et la plupart des ISL sont limitées par la mémoire (c'est-à-dire que le rapport entre les accès mémoire et les calculs est élevé). Presque toutes les architectures parallèles actuelles ont été explorées pour l'exécution efficace des ISL ; à l'heure actuelle, les GPGPU se sont avérées les plus performantes.

Bibliothèques

Compte tenu de l'importance des ISL pour les simulations informatiques et de leurs exigences de calcul élevées, de nombreux efforts visent à créer des bibliothèques réutilisables pour aider les scientifiques à réaliser des calculs basés sur des stencils. Ces bibliothèques se concentrent principalement sur la parallélisation, mais peuvent également aborder d'autres problématiques, telles que les entrées/sorties, le pilotage et la sauvegarde des points de contrôle . Elles peuvent être classées selon leurs API.

Bibliothèques basées sur des patchs

Il s'agit d'une conception classique. La bibliothèque gère un ensemble de tableaux scalaires n- dimensionnels, auxquels le programme utilisateur peut accéder pour effectuer des mises à jour. Elle assure la synchronisation des frontières (appelées zone fantôme ou halo). L'avantage de cette interface réside dans la possibilité pour le programme utilisateur de parcourir les tableaux, ce qui facilite l'intégration de code existant . En revanche, la bibliothèque ne gère pas le blocage du cache (car cela doit être fait au sein des boucles ) ni l'encapsulation des appels d'API pour les accélérateurs (par exemple via CUDA ou OpenCL ). Parmi les implémentations, on peut citer Cactus , un environnement de résolution de problèmes physiques, et waLBerla .

Bibliothèques cellulaires

Ces bibliothèques déplacent l'interface vers la mise à jour de cellules de simulation individuelles : seules la cellule courante et ses voisines sont exposées, par exemple via des méthodes d'accès (getters/setters). L'avantage de cette approche est que la bibliothèque peut contrôler précisément quelles cellules sont mises à jour et dans quel ordre, ce qui est utile non seulement pour implémenter le blocage du cache , mais aussi pour exécuter le même code sur des systèmes multicœurs et des GPU . Cette approche exige que l'utilisateur recompile le code source avec la bibliothèque. Autrement, un appel de fonction serait nécessaire pour chaque mise à jour de cellule, ce qui nuirait considérablement aux performances. Ceci n'est possible qu'avec des techniques telles que les modèles de classes ou la métaprogrammation , ce qui explique également pourquoi cette conception ne se retrouve que dans les bibliothèques plus récentes. Physis et LibGeoDecomp en sont des exemples .

Wayback Machine
  • waLBerla