Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 23/07/2015, à 08:36

dva2tlse

[RéSOLU] Trois ou Dix-Neuf ?

Bonjour le forum; j'ai déjà posé sur ce forum des questions relatives au développement que j'ai à faire à mon boulot, et vos réponses m'ont bien aidé donc je reviens. C'est un gros programme en fortran, enfin gros pour moi en tous cas, qui ne suis pas du tout développeur mais ingénieur mécanicien, et le problème qui se pose à moi est, alors que ça marche pas mal sur un processeur, de pouvoir le faire tourner sur plusieurs proc's en même temps pour que ça aille plus vite, tout en contrôlant un peu ce qui se passe.

    [lecture optionnelle]
    Le programme lit ses données d'entrée, entiers et réels, dans six fichiers.
    Le premier ne contient principalement qu'une liste d'entités à traiter de façon répétitive. (jusqu’à onze mille entités environ)
    À l'aide de trois autres des fichiers d'entrée, chaque entité est transformée en une série d'une centaine de couples entier-réel.
    À l'aide de ces couples, les deux autres fichiers servent à fabriquer une gigantesque matrice de 31640 lignes par 326 colonnes, dans le sous programme le plus gourmand en ressources-machine.
    Puis chaque colonne est traitée pour donner un simple nombre de sortie, qui est donc une fonction de l'entité sélectionnée. (et des contenus des divers fichiers)
    Ça fait un paquet d'opérations semblables que je voudrais partager entre les processeurs de la machine que j'ai pour ce boulot. (une linux red-hat)

C'est une machine à trois processeurs x86_64 alors que je croyais jusqu'à hier qu'elle en avait dix-neuf. (d'après un collègue)
Donc j'avais un script en bash qui partageait le fichier d'entrèe en NP parts avec "awk" (NP=Nombre de Proc's voulus) et le script lancait $NP instances du programme dans $NP sous répertoires temporaires; et les résultats venaient s'accumuler à la suite les uns des autres dans un unique fichier de sortie.
J'avais imaginé pendant un temps de spécifier préalablement un N° de proc' pour faire chaque portion du boulot, mais on m'a dit sur ce forum que le système s'en chargerait seul. http://forum.ubuntu-fr.org/viewtopic.php?id=1526241
En effet, la vingtaine de relevés de temps que j'ai effectués me confirme un temps de calcul dépendant linéairement du nombre d’éléments, et inversement proportionnellement à $NP, le Nombre de Proc's que je croyais utiliser.

Et hier, PATATRAS... tout ce bel agencement s'effondre, il n'y a plus qu'une seule instance qui tourne. (et c'est en essayant de comprendre pourquoi que j'apprends que la machine n'a que trois proc's)

    [question]
Comment les relevés de temps que j'ai faits ont ils pu me mystifier au point que je croyais, chiffres à l'appui, que la machine avait 19 ou 20 proc's alors qu'elle n'en a que trois, par le simple jeu d'un programme lancé en plusieurs instances.

Et surtout, comment faire pour que ça remarche; il me faut récupérer la possibilité de faire s'exécuter à la fois plusieurs instances de mon programme.
    Merci,
David

Dernière modification par dva2tlse (Le 29/07/2015, à 14:38)


xubuntu 22.04 dans un PC assemblé
PS: Dis toto, pourquoi l'univers existe-t'il ?
Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se contacter auparavant.

Hors ligne

#2 Le 23/07/2015, à 10:17

claudius01

Re : [RéSOLU] Trois ou Dix-Neuf ?

Bonjour,

dva2tlse a écrit :

C'est une machine à trois processeurs x86_64 alors que je croyais jusqu'à hier qu'elle en avait dix-neuf.

Que donnent les 3 commandes tirées du blog Nombre de CPU physique et logique qui fournissent successivement:

  1. Le nombre de proc "physiques"

  2. Le nombre de proc "logiques"

  3. Le nombre de core par proc "physiques"

[root@CentOS-7 ~]# grep "physical id" /proc/cpuinfo |sort -u |wc -l
1
[root@CentOS-7 ~]# grep -c "processor" /proc/cpuinfo
4
[root@CentOS-7 ~]# echo "$(grep -c "processor" /proc/cpuinfo) / $(grep "physical id" /proc/cpuinfo |sort -u |wc -l)" | bc
4

NB: J'ai fais le test sur une CentOS-7 montée dans VirtualBox puisque tu précises que tu as un Linux red-hat ;-)

Hors ligne

#3 Le 23/07/2015, à 11:36

jplemoine

Re : [RéSOLU] Trois ou Dix-Neuf ?

19 étant un nombre premier : je ne vois pas comment on peut arriver à ce nombre mais 18 peut-être (c'est divisible par 3 et il y a l'air d'avoir 3 processeurs physique) mais ce sont des "subtilités" qui me dépassent.


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

En ligne

#4 Le 23/07/2015, à 13:09

dva2tlse

Re : [RéSOLU] Trois ou Dix-Neuf ?

@jplemoine : ça m'a fait tiquer aussi, mais comme c'est une instruction que "quelqu'un" à donnée à mon colègue, je me suis dit qu'il y aurait peut-être eu 20 proc's et qu'"on" lui recommandait de n'en utiliser que 19 pour en laisser un à la machine. (et moi je n'en utilisais que 18 en empilant le même genre de "sécurité" peut-être inutile)

@claudius01: je fais ça et reviens copier le résultat dès que c'est fait.

EDIT: ça y est; on a l'air d'avoir affaire à un client assez sérieux, mais qu'est-ce que ça veut dire exactement; et quel rapport avec les trois x86_64 de la commande "uname -a" qui est la seule que je connaisse ?
"uname -a" -> Linux frasweapp510 2.6.18-404.el5 #1 SMP Sat Mar 7 04:14:13 EST 2015 x86_64 x86_64 x86_64 GNU/Linux


$ grep "physical id" /proc/cpuinfo |sort -u |wc -l
2
$ grep -c "processor" /proc/cpuinfo
32
$ echo "$(grep -c "processor" /proc/cpuinfo) / $(grep "physical id" /proc/cpuinfo |sort -u |wc -l)" | bc
16

David

Dernière modification par dva2tlse (Le 23/07/2015, à 13:20)


xubuntu 22.04 dans un PC assemblé
PS: Dis toto, pourquoi l'univers existe-t'il ?
Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se contacter auparavant.

Hors ligne

#5 Le 23/07/2015, à 14:18

claudius01

Re : [RéSOLU] Trois ou Dix-Neuf ?

Ok, merci dva2tlse, ton système est un bi-pro avec 16 core chacun.
Quant aux mystérieux x86_64 x86_64 x86_64, cela ne veut pas dire qu'il y a 3 proc car en faisant comme toi j'ai également ces 3 x x86_64 sur un système avec 1 proc et 4 core (cf. post #2)

[root@CentOS-7 ~]# uname -a
Linux CentOS-7.0-A 3.10.0-123.el7.x86_64 #1 SMP Mon Jun 30 12:09:22 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

Edit: La signification de ces 3 x x86_64 est expliquée ici: What is the meaning of result of uname -a; à savoir:

  1. Linux machine hardware name: x86_64

  2. Linux machine processor type: x86_64

  3. Linux machine hardware platform: x86_64

Dernière modification par claudius01 (Le 23/07/2015, à 14:34)

Hors ligne

#6 Le 23/07/2015, à 14:49

dva2tlse

Re : [RéSOLU] Trois ou Dix-Neuf ?

Ok merci, donc je sais que la bécane à 32 cœurs.

Maintenant dans mon script j'ai une boucle sur les instances :

for I in $(seq 1 $NP) # I est l'indice des instances 
do
    cd /S/SCRATCH/DVAtmp/TMP$I
    echo MTUV: Demarrage du TUV dans TMP$I par \"\(../TUV $I $FICRES $FICINP\) \&\" dans \$PWD=$PWD.
    (../TUV $I $FICRES $FICINP) &
done

Ceci est une partie d'un script MTUV (Multi TUV) que je lance comme suit :

./MTUV 3 p2srfd016Ti_3 el016Ti.inp > tmp016Ti_3 2>&1

Et qui fait dans chacun des sous répertoires temporaires :

(../TUV $I $FICRES $FICINP) &

Et jusqu'à hier, j'avais les résultats de chacune des instances qui se succédaient avec quelques entrecroisements dans le fichier se sortie tmp016Ti_3; et maintenant, deux des trois instances n'écrivent plus jusqu'à leur fin.
Pourquoi ?
David, perdu ???

Dernière modification par dva2tlse (Le 24/07/2015, à 07:34)


xubuntu 22.04 dans un PC assemblé
PS: Dis toto, pourquoi l'univers existe-t'il ?
Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se contacter auparavant.

Hors ligne

#7 Le 31/07/2015, à 17:18

tiramiseb

Re : [RéSOLU] Trois ou Dix-Neuf ?

dva2tlse, tu as trouvé une réponse ?

J'avais mis ton message dans ma liste de choses à lire et réfléchir, mais si tu as résolu ton problème ça ne sert à rien que j'y réfléchisse...

Hors ligne

#8 Le 31/07/2015, à 17:39

dva2tlse

Re : [RéSOLU] Trois ou Dix-Neuf ?

Bonjour,
oui merci, j'ai une machine à 32 coeurs. Je n'ai pas encore tout utilisé, mais j'ai déjà tourné un calcul à 18, qui est supérieur à seize, donc le compte doit y être.
David


xubuntu 22.04 dans un PC assemblé
PS: Dis toto, pourquoi l'univers existe-t'il ?
Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se contacter auparavant.

Hors ligne

#9 Le 31/07/2015, à 17:44

tiramiseb

Re : [RéSOLU] Trois ou Dix-Neuf ?

Oui mais tu sembles dire que tes instances ne semblent pas être correctement distribuées sur les cœurs...

Hors ligne

#10 Le 31/07/2015, à 17:59

dva2tlse

Re : [RéSOLU] Trois ou Dix-Neuf ?

Oui en effet il se passe des choses bizarres. Alors si tu veux bien t'y intéresser, je vais essayer de décrire la situation, mais ça va prendre un peu de temps.
David


xubuntu 22.04 dans un PC assemblé
PS: Dis toto, pourquoi l'univers existe-t'il ?
Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se contacter auparavant.

Hors ligne

#11 Le 31/07/2015, à 18:42

tiramiseb

Re : [RéSOLU] Trois ou Dix-Neuf ?

Je suis tout ouïe

Hors ligne

#12 Le 31/07/2015, à 18:57

dva2tlse

Re : [RéSOLU] Trois ou Dix-Neuf ?

Bonsoir Tiramiseb,
J'ai un programme en fortran qui s'appelle TUV, que je développe à mon boulot, sur une machine red-hat à 32 cœurs, et qui fait une grosse opération gourmande en ressources en deux secondes environ.
Comme c'est un travail qui est une spécialité de ma boite, et il est important que ça se fasse vite, sur un mât-réacteur d'avion, qui nécessite qu'on le fasse onze mille fois environ.
Donc j'ai fait un script MTUV, comme Multi-TUV, qui partage le travail à faire sur NP cœurs pour aller plus vite.
Une première partie du script partage les données d'entrée entre NP répertoires temporaires, où tourne TUV sur chaque part de travail à faire, et cela se passe parfaitement bien.
Puis je voudrais qu'une boucle comme celle qui suit, me fasse tous les calculs :
Je lance

 ./MTUV 4 sortie.txt entrée.txt >>../MTUV.txt 2>&1

Le script MTUV est comme suit :

NP=$1
FICRES=$2
FICINP=$3
#
# Partage des données d'entrée en NP parts, qui vont chacune dans un des sous répertoires TMP$I.
#
for I in $(seq $NP)
do
    (echo
    cd /S/SCRATCH/DVAtmp/TMP$I
    echo MTUV: Ici, \$I=$I\; Demarrage du TUV par \(../TUV $I $FICRES $FICINP \>\> ../MTUV.txt \2\>\&\1\) dans \$PWD=$PWD.
    ../TUV $I $FICRES $FICINP >>../MTUV.txt 2>&1 # comment bien faire les redirections ?
    echo
    ps -fu david|grep TUV|grep -v grep # pour contrôler.
    echo) & # chaque valeur de $I est un subprocess
done
echo MTUV: Fin. more ./MTUV.txt

Chaque instance du programme tourne dans son propre subprocess, mais j'ai un problème avec les sorties :
Le programme est en cours de développement donc toutes les sorties intermédiaires m'intéressent pour vérifier que tout se passe bien. Il fût un temps, malheureusement révolu, où chaque instance écrivait ses sorties quelque part dans le /tmp, et au fur et à mesure que les différentes instances se terminaient, cette sortie partielle venait à la suite des précédentes. Et en fin de compte tout se retrouvait bien ordonné dans le fichier où j'avais redirigé la sortie du script principal.
  David

Dernière modification par dva2tlse (Le 31/07/2015, à 19:22)


xubuntu 22.04 dans un PC assemblé
PS: Dis toto, pourquoi l'univers existe-t'il ?
Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se contacter auparavant.

Hors ligne

#13 Le 03/08/2015, à 10:44

tiramiseb

Re : [RéSOLU] Trois ou Dix-Neuf ?

    ../TUV $I $FICRES $FICINP >>../MTUV.txt 2>&1 # comment bien faire les redirections ?

1/ pour les redirections, tu veux faire quoi exactement ? À la limite tu peux créer un fichier temporaire pour chaque processus, avec la commande tempfile, dans lequel tu rediriges les logs... et en fin de commande, tu copies le tout dans un fichier unique.

2/ là tu exécutes ta commande et tu attends qu'elle termine. Si ton programme en Fortran ne rend pas la main, alors tu ne lanceras pas une seconde instance avant que la première n'ait terminé son boulot. Dans ce cas, il faut ajouter un "&" à la fin (pour que ça tourne en tâche de fond).

Hors ligne

#14 Le 04/08/2015, à 16:42

dva2tlse

Re : [RéSOLU] Trois ou Dix-Neuf ?

Bonjour Tiramiseb,
voici plusieurs explications quant à ce que je veux faire pour les redirections :

-Tu me dis "là tu exécutes ta commande et tu attends qu'elle termine", mais je ne crois pas :
Voici la partie importante du post 12, qui montre cela :

for I in $(seq $NP)
do
    (echo
    cd /S/SCRATCH/DVAtmp/TMP$I
    echo MTUV: Ici, \$I=$I\; Demarrage du TUV par \(../TUV $I $FICRES $FICINP \>\> ../MTUV.txt \2\>\&\1\) dans \$PWD=$PWD.
    ../TUV $I $FICRES $FICINP >>../MTUV.txt 2>&1 # comment bien faire les redirections ?
    echo
    ps -fu david|grep TUV|grep -v grep # pour contrôler.
    echo) & # chaque valeur de $I est un subprocess
done

Il se trouve que ci-dessus, tout l'intérieur de la boucle est entre "(", ")", donc cela devrait faire une subshell, qui se déroule en tâche de fond grâce au "&" qui est après la parenthès fermante, ") &", juste avant le "done" qui termine la boucle.
Il se trouve que ceci fonctionne correctement chez moi, sur ma machine qui est un x86_32 de base à un seul coeur.

-Par contre à mon boulot, sur la Red_Hat à 32 coeurs, j'ai été obligé d'en passer par fichier temporaire pour chaque processus, qui se font bien chacun dans sa tâche de fond, mais je suis obligé d'attendre la fin du dernier pour concaténer tous les tempfile.
Et quand tout ne se passe pas bien, ce qui arrive souvent puisque je suis en phase de développement et que je ne sais procéder que par essais-erreurs, eh bien s'il y a une plantade un peu trop sévère quelque part, je me retrouve sans explication puisque ça ne finit pas proprement.

Donc ce que je voudrais à la base, est qu'en cas de gamelle dans l'un ou l'autre subprocess, je puisse retrouver dans les sorties tout ce que l'instance du programme à écrit jusque là, et même les autres qui ont pu continuer à écrire après.
David


xubuntu 22.04 dans un PC assemblé
PS: Dis toto, pourquoi l'univers existe-t'il ?
Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se contacter auparavant.

Hors ligne

#15 Le 04/08/2015, à 16:53

tiramiseb

Re : [RéSOLU] Trois ou Dix-Neuf ?

Ah oui désolé je n'avais pas remarqué ce "&"...

Il se trouve que ceci fonctionne correctement chez moi, sur ma machine qui est un x86_32 de base à un seul coeur.

En mettant NP à autre chose que 1 ?

je suis obligé d'attendre la fin du dernier pour concaténer tous les tempfile

Pourquoi donc ? À la fin de l'exécution de chacune des tâches, tu concatènes, ça devrait le faire, non ?

Hors ligne

#16 Le 04/08/2015, à 17:12

dva2tlse

Re : [RéSOLU] Trois ou Dix-Neuf ?

Oui, oui, en mettant NP à 4, ça marche proprement sur ma machine à un seul cœur; mais les TUV d'ici sont des prgm fictifs, qui reproduisent à peu près, aussi bien que j'ai pu, le déroulement des fotrans TUV du boulot, sauf qu'ils ne plantent jamais, ce qui n'est pas tout-à-fait/pas du tout représentatif de ce qui se passe à mon boulot.
  Bien sûr que je suis un gros nâze, "À la fin de l'exécution de chacune des tâches, tu concatènes", héhop.
Je vais faire ça des que je reprends le boulot, lundi 24, et tu auras probablement un petit mèl te signalant ce que j'aurai indiqué ici que ça aura donné là bas.
Bonne vacances à moi, avec l'esprit serein de ces avancées...
À une prochaine fois peut-être,
David

Dernière modification par dva2tlse (Le 05/08/2015, à 07:50)


xubuntu 22.04 dans un PC assemblé
PS: Dis toto, pourquoi l'univers existe-t'il ?
Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se contacter auparavant.

Hors ligne

#17 Le 24/08/2015, à 14:40

dva2tlse

Re : [RéSOLU] Trois ou Dix-Neuf ?

Bon, désolé on verra pour l'essai plus tard; d'autre urgences sont plus urgentes...


xubuntu 22.04 dans un PC assemblé
PS: Dis toto, pourquoi l'univers existe-t'il ?
Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se contacter auparavant.

Hors ligne