IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Trois ou Dix-Neuf ?


Sujet :

Shell et commandes GNU

  1. #1
    Membre habitué
    Homme Profil pro
    ingénieur calcul
    Inscrit en
    Décembre 2007
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 363
    Points : 180
    Points
    180
    Par défaut 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\u2019à 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 le forum d'ubuntu 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\u2019é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
    P.S. 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 causer avant.

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Bonjour

    Tu parles de processeurs, mais pas de coeurs. Qu'est-ce que tu comprends de tout ça?

    L'utilisation pure de son processeur tient plus de la croyance populaire plus que de la réalité. Si ton processeur supporte 3Ghz, il n'est quasiment jamais à cette fréquence là car ça chauffe et ça consomme. Donc on baisse la fréquence pour gagner en température et économie d'énergie. Qui est "on" ? Linux. Puisqu'on te dit que Linux gère les processeurs lui-même, quelle est ta vraie question ?

    Le script ne fonctionne plus pareil ? Qu'est-ce que tu as changé ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Membre habitué
    Homme Profil pro
    ingénieur calcul
    Inscrit en
    Décembre 2007
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 363
    Points : 180
    Points
    180
    Par défaut Bien sûr que le problème est que le script ne fonctionne plus pareil.
    Bien sûr que le problème est que le script ne fonctionne plus pareil, et si je savais ce qui a changé, je ferais la modification inverse et je n'aurais pas à venir ici. Mais je ne sais pas exactement ce qui a changé, donc j'essaye de comprendre ce qui se passe.
    J'ai fait pas mal d'essais depuis mon post' de ce matin, et il se passe ce qui suit :

    J'ai une boucle sur les instances :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for I in $(seq 1 $NP) # I est l'indice des elements.inp de 1 à 16 ou 32 ???
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./MTUV 3 p2srfd016Ti_3 el016Ti.inp > tmp016Ti_3 2>&1
    et ça fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (../TUV $I $FICRES $FICINP) &
    dans chacun des sous répertoires temporaires.

    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; et maintenant, deux des trois instances n'écrivent plus jusqu'à leur fin.
    David, perdu ???


    (Sur un forum d'ubuntu où je suis aussi, on m'a recommandé de passer les commandes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ 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
    Il y a sûrement un rapport avec ta question sur les coeurs etc... mais moi j'ai appris au temps du Z80-ZX81 et des PC-8086, donc les grosses bécanes balèzes actuelles, je ne comprends pas comment elles bossent.
    David
    P.S. 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 causer avant.

  4. #4
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Sauf que le canal d'erreur de TUV n'est pas récupéré. Le canal d'erreur de MTUV est bien renvoyé vers la sortie standard mais il n'y aura pas les problèmes des scripts principaux dedans ...
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  5. #5
    Membre habitué
    Homme Profil pro
    ingénieur calcul
    Inscrit en
    Décembre 2007
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 363
    Points : 180
    Points
    180
    Par défaut
    Oui, Ok pour les canaux d'erreurs; mais pour l'instant je n'ai même pas la sortie standard des subprocess TUV dans celle du scrpt principal MTUV. Comment faire ?

    Dans la boucle sur les instances, je voudrais que chaque instance du programme TUV me renvoie quelque chose !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for I in $(seq 1 $NP) # I est l'indice des elements.inp de 1 à 16 ou 32 ???
    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
    P.S. 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 causer avant.

  6. #6
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 286
    Points : 12 743
    Points
    12 743
    Par défaut
    Bonjour,

    Comment calculs tu la variable $NP dans ton script ?
    Cordialement.

  7. #7
    Membre habitué
    Homme Profil pro
    ingénieur calcul
    Inscrit en
    Décembre 2007
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 363
    Points : 180
    Points
    180
    Par défaut
    Bonjour,
    NP est le Nombre de Processeurs que l'utilisateur souhaite utiliser, et il est passé en premier argument au script MTUV. Celui ci repasse la valeur I, comprise entre 1 et $NP, en premier argument également à l'instance $I du programme TUV.

    Précision vendredi matin : NP est passé par la ligne de commande à MTUV.
    P.S. 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 causer avant.

Discussions similaires

  1. Réponses: 18
    Dernier message: 12/07/2013, 14h57
  2. convertir un nombre(19) en lettre (dix neuf)
    Par guigui5931 dans le forum Access
    Réponses: 1
    Dernier message: 10/07/2006, 14h09
  3. Réponses: 2
    Dernier message: 14/06/2004, 15h18
  4. trois champ a un :)
    Par yogz dans le forum Langage SQL
    Réponses: 4
    Dernier message: 14/06/2004, 13h32
  5. jointure sur TROIS tables
    Par caribou_belle dans le forum Langage SQL
    Réponses: 8
    Dernier message: 01/03/2004, 11h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo