calcul "embarrassingly parallel": codes non mpi

Les prérequis

Cet article s’applique aux calculs ayant les caractéristiques suivantes :

  • Un exécutable séquentiel ou multithreadé est appliqué de manière répétitive sur un ensemble de fichiers d’entrée
  • Les noms des fichiers d’entrée se terminent tous par la même extension
  • Il n’y a pas de dépendance entre les différents traitements
  • Il n’y a donc pas de communication entre eux
  • Il est possible de lancer plusieurs instances de l’exécutable simultanément.

Les précautions à pendre

ATTENTION - chdb est un outil très puissant : s’il y a une erreur dans votre exécutable produisant des effets néfastes pour le système, en particulier des entrées-sorties intensives, ceux-ci seront démultipliés. La règle d’or est donc la suivante :

AVANT DE LANCER UN EXÉCUTABLE AVEC chdb, VÉRIFIEZ QUE CELUI-CI FONCTIONNE CORRECTEMENT EN LE LANÇANT en "STANDALONE". Si le comportement de votre exécutable est correct, alors seulement vous pouvez envisager de l’utiliser avec chdb.

Initialiser l’environnement

L’environnement doit être initialisé :

module load chdb/1.0

La commande chdb

chdb permet d’exécuter un programme présentant les caractéristiques ci-dessus sur un nombre arbitraire de processeurs et de nœuds.

Lire la documentation

chdb --help

On doit passer les paramètres suivants :

  • --in-dir Le nom du répertoire dans lequel se trouvent les fichiers d’entrée. Ce répertoire doit exister
  • --in-type L’extension des fichiers que l’on considère comme fichiers d’entrée. Par exemple txt, pdb, etc.
  • --out-files Le nom du ou des fichiers créés par la commande, pour chaque exécution de la commande le nom est bien sûr différent, on utilise des "templates" qui seront remplacés avec le nom du fichier d’entrée. S’il y a plusieurs fichiers créés, leurs noms doivent être séparés par des virgules (,)
  • --command-line La ligne de commande utilisée. Il est possible de mettre un morceau de shell complet (une série de commandes séparée par des | par exemple). La seule restriction est que cette commande doit lire un fichier en entrée, écrire un ou plusieurs fichiers en sortie. La commande doit être mise entre guillemets, sinon elle sera interprétée par le shell
  • --out-dir Le nom du répertoire contenant les fichiers de sortie. Ce répertoire ne doit pas exister au démarrage de chdb

On peut passer en outre les paramètres suivants :

  • --work-dir Avant d’exécuter la commande, chdb fera un chdir dans ce répertoire. Ce répertoire est souvent le même que --outdir, et les mêmes "templates" peuvent être utilisés.
  • --create-environment Vous pouvez entrer ici un "petit morceau" de code shell, qui sera exécuté après le chdir précédent et avant l’appel de la commande : cela vous permet par exemple de copier des fichiers d’entrée qui seraient obligatoirement présents dans le répertoire courant.
  • --sort-by-size Les fichiers présentés en entrée sont triés du plus gros au plus petit, si l’on fait l’hypothèse que le temps de traitement est proportionnel à la charge cela devrait permettre un meilleur équilibrage de la charge
  • --block-size=10 Si on met 10 par exemple, cela signifie que les process mpi traitent les fichiers par blocs de 10. Cela permet de minimiser les communications lorsque le nombre de fichiers est important. S’il y a peu de fichiers, cette option risque par contre de générer un déséquilibrage de la charge.
  • --in-files Permet de ne traiter qu’une partie des fichiers du répertoire d’entrée

En cas d’erreur dans la commande exécutée :

  • Si la commande exécutée renvoie un code d’erreur (c’est-à -dire un statut différent de zéro), le comportement par défaut de chdb est d’arrêter tout traitement.
  • On peut toutefois modifier ce comportement en spécifiant le paramètre --on-error : le nom des fichiers ayant provoqué une erreur est conservé, cela permet de relancer chdb (avec des paramètres différents).
  • Pour cela, le paramètre --in-files sera utile car il permettra de ne relancer le programme que sur les fichiers d’entrée qui ont provoqué l’erreur.

Insérer chdb dans un script slurm

Le script suivant permet de lancer chdb sur 1 nœud, en utilisant 36 cœurs par nœud:

#!/bin/bash
#SBATCH -J chbd
#SBATCH -N 1
#SBATCH -n 36
#SBATCH --ntasks-per-node=36
#SBATCH --ntasks-per-core=1
#SBATCH --mail-user=toto [at] mail [dot] com
#SBATCH --mail-type=ALL

srun chdb --in-dir input --in-type txt --out-files %out-dir%/%path% --command "./mon_programme <%path% >%out-dir%/%path%"

Voir aussi

calcul "embarrassingly parallel": codes mpi

Lancer avec chdb des traitements mpi

The chdb tutorial

In this tutorial, you’ll learn how to use chdb to run your embarassingly parallel computations. All the usecases supported by chdb will be described here.