[batch] plusieurs commandes pour ne pas saturer les processeurs

Fermé
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 4 mars 2013 à 11:56
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 5 mars 2013 à 14:22
Bonjour,
voilà, j'ai une machine avec 4 processeurs, et une série de calculs scientifiques à effectuer (un vingtaine environ). C'est à dire que je lance un programme qui occupe 100% d'un processeur pendant un certain temps.
L'idée, c'est d'éviter de lancer en concurrence les 20 calculs simultanément, pour éviter de surcharger la RAM en premier lieu, et que je ne suis pas sur que ça soit le plus efficace.
L'idée m'est donc venu d'utiliser la commande batch qui semble faite pour ça.
Je liste donc toutes mes commandes dans un fichier texte calcul.txt :
cd  rep_calcul1; Prog calcul1.input;
cd  rep_calcul2; Prog calcul2.input;
...
cd  rep_calcul21; Prog calcul21.input;
puis je lance avec la commande batch -f calculs.txt.
Le problème c'est qu'il ne lance les calculs que 1 par 1. J'ai aussi du mal à comprendre le 0.8 par défaut.


4 réponses

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
4 mars 2013 à 16:50
Pour essayer d'être encore plus clair :
J'ai une vingtaines de processus à lancer sur une machine, mais je ne veux pas que plus de 4 tournent en même temps.
Habituellement, je m'en tire avec un script shell qui incrémente une variable, mais si je peux me passer de la lourdeur d'écrire un script à chaque fois ça serait parfait.
1
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 415
4 mars 2013 à 14:20
Salut,

L'idée, c'est d'éviter de lancer en concurrence les 20 calculs simultanément, pour éviter de surcharger la RAM en premier lieu,
[...]
Le problème c'est qu'il ne lance les calculs que 1 par 1.


J'ai du mal à saisir ce que tu veux vraiment ??? ;-\
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
4 mars 2013 à 16:32
Salut zipe31, merci de ton intéret.
Comme j'ai 4 processeurs, je peux en lancer 4 simultanément.
En gros, je veux que l'occupation totale de la machine soit proche de 1. Avec un seul calcul je suis autour de 0.25.
En espérant avoir été plus clair.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 415
4 mars 2013 à 16:40
Voir du côté de GNU_parallel peut être ?

Complément d'infos sur linuxfr.org
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
4 mars 2013 à 16:46
Pas disponible sur ma distribution :-/
Je ne suis pas root sur ma machine. En lisant la description de batch, j'avais l'impression que c'était vraiment ce que je cherchais : éviter de sursaturer les processeurs.
0
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
5 mars 2013 à 13:15
hello
ce script maintient 4 commandes en exécution, lues dans fichier par ligne, chaque ligne peut contenir plusieurs commandes séparées par ;
#!/bin/bash
C=4
while read CMD ; do
        bash -c "$CMD" &
        jobs=($(jobs -p))
        while (( ${#jobs[*]} >= $C )) ; do
                sleep 3;  jobs=($(jobs -p))
        done
done < fichier
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
5 mars 2013 à 14:22
merci dubeck, mais comme déjà dit, je sais le faire avec un script et des variables. Je me disais que comme batch inclu directement une fonction regardant la charge, ça pourrait être plus simlpe.
0