Notes / Rappels Système

Processus, CPUs et parallélisation

Un programme ou processus exécuté sur une machine n'utilisera pas automatiquement tous les coeurs/CPUs disponibles. Pour qu'un programme puisse exploiter plusieurs coeurs/CPUs, celui-ci doit :

  • avoir été conçu pour pouvoir exécuter différentes tâches en parallèle,

  • explicitement exécuter ces tâches sur différents threads ou sous-processus afin d\'être exécutés sur plusieurs coeurs/CPUs.

NB : Beaucoup de frameworks spécifiques (écrits en Java, Lua, R...) prennent en charge cette parallélisation (mais pas toujours) et la rendent transparente pour l'utilisateur. Attention cependant à bien configurer (si possible) le nombre de threads ou workers générés par le framework et faire correspondre le nombre de CPUs que vous réservez afin d'optimiser le temps total d'exécution.

Notes sur l'exécution d'un programme sur un serveur de calcul

L\'exécution d\'un programme sur un serveur de calcul se fait de manière non-interactive :

  • Pas de saisie : l'utilisateur n'a pas la possibilité de saisir quoi que ce soit ou de répondre à une requête du programme (pas d'input, entrée standard désactivée). Celui-ci doit s'exécuter de manière totalement autonome.
  • Sortie écran : l'affichage renvoyé par le programme (output, sortie standard). est accumulée dans un fichier texte (dont le nom et l'emplacement sont paramétrables dans le batch) et sera accessible qu'une fois l'exécution du job terminée.

Variables d'environnement

Récupération de la valeur d'une variable d'environnemnt "VAR" en ...

Shell/Bash/[T]CSH: $VAR
Python: os.environ.get('VAR') [OU] os.getenv('VAR')
Java: System.getenv("VAR")
Lua os.getenv(VAR)