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 09/03/2016, à 08:44

dva2tlse

blocage fortran OpenMP

Chers lecteurs du forum,
j'ai déjà posé ici plusieurs 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 en calcul de structures.

[question]
J'essaye de profiter des plusieurs processeurs que possèdent plusieurs machines en utilisant l'environnement OpenMP. (Open Multi-Processing)
C'est une extension de compilation de gfortran que j'utilise, et qui devrait permettre de passer les calculs sur plusieurs processeurs à la fois, donc plus vite en fin de compte.
Seulement, alors que le programme se comporte bien sur un seul processeur (donc il est à peu près propre), lorsque je lui demande d'effectuer des calculs sur 2, 4, ou 6 processeurs, il se bloque sans explication; sauf de rares fois avec deux processeurs, mais ce n'est pas reproductible, donc je ne peux même pas essayer de deviner ce qui le bloque et où.
Le temps CPU du/des process continue d'augmenter, mais plus aucune sortie ne se fait alors que j'ai truffé le programme de sorties d'informations diverses, pour tenter de comprendre ce qu'il se passait et où on en était. Il se passe la même chose lorsque je redirige la sortie vers un fichier; celui-ci ne se remplit plus alors que le temps CPU continue d'augmenter, dans une partie du programme où les sorties devraient être nombreuses.
Comment faire pour y comprendre quelque chose ?
Pourquoi le temps CPU consommé augmente t'il encore alors que rien ne se passe, et comment savoir quelles sont les opérations en cours ?
Merci,
David

[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 27752 lignes par 251 colonnes, dans le sous-programme le plus gourmand en ressources-machine. (Ce que je voudrais partager, à la base)
    Puis chaque colonne est traitée pour donner finalement un simple nombre en sortie, qui est donc une fonction de l'entité sélectionnée. (et des contenus fixes des divers fichiers)
    Ça finit par faire un sacré 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 assez balèze à seize processeurs)

[piste possible]
J'ai lu quelque part à propos du debugger gdb, qu'on pouvait l'utiliser sur un programme déjà en cours d'exécution; savez vous si ça pourrait m'aider et comment faire ?
Merci encore,
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

#2 Le 09/03/2016, à 11:01

claudius01

Re : blocage fortran OpenMP

Bonjour,

dva2tlse a écrit :

J'essaye de profiter des plusieurs processeurs que possèdent plusieurs machines en utilisant l'environnement OpenMP. (Open Multi-Processing)
C'est une extension de compilation de gfortran que j'utilise, et qui devrait permettre de passer les calculs sur plusieurs processeurs à la fois, donc plus vite en fin de compte.
Seulement, alors que le programme se comporte bien sur un seul processeur (donc il est à peu près propre), lorsque je lui demande d'effectuer des calculs sur 2, 4, ou 6 processeurs, il se bloque sans explication; sauf de rares fois avec deux processeurs, mais ce n'est pas reproductible, donc je ne peux même pas essayer de deviner ce qui le bloque et où.
Le temps CPU du/des process continue d'augmenter, mais plus aucune sortie ne se fait...

Dans la configuration "Multi-processeurs", je soupçonne et je crains l'apparition de phénomènes de deadlock qui plus est en attente active expliquant vraisemblablement la consommation CPU accrue alors que le système semble "dormir".

Maintenant, y apporter une solution radicale n'est pas simple car cela peut aller de la conception (identification des sections critiques) jusqu'aux erreurs de codage en passant par des bugs du compilateur gfortran et/ou de OpenMP peut-être incorrectement utilisé(s) dans certaines parties du programme...

S'agissant d'une piste possible d'investigation, l'instrumentation "raisonnable" et sans "trop" impacter le programme reste à mes yeux et par expérience la plus efficace ;-)

Edit: Voir à ce sujet une étude très technique parmi tant d'autres: Confirmation of Deadlock Potentials Detected by Runtime Analysis

Dernière modification par claudius01 (Le 09/03/2016, à 11:59)

Hors ligne

#3 Le 09/03/2016, à 11:25

dva2tlse

Re : blocage fortran OpenMP

Bonjour claudius,
oui, l'"instrumentation", c'est ce que j'ai essayé de faire, et il y en a beaucoup sans que ça ralentisse sensiblement la machine parce qu'elle est vraiment bien balèze, mais le verrou dont tu soupçonnes l'existence m'empêche d'en voir les sorties qui pourraient m'intéresser.
Donc je vais lire vers les liens que tu me proposes.
Merci,
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

#4 Le 09/03/2016, à 15:29

claudius01

Re : blocage fortran OpenMP

Salut David, content de te retrouver sur ce forum au sujet de ton "grand" projet ;-)

Avant tout, peut-être qu'il faudrait beaucoup travailler sur l'instrumentation du code avec des outils existants car, de mémoire, il me semble que tu utilises les I/O basiques d'écriture à la console et/ou dans un fichier...

J'ai plein d'idées et de pistes sur ce sujet car c'est la première chose que je mets en œuvre pour "toujours" avancer (lentement parfois mais sûrement ;-) dans le cadre de mon activité professionnelle et de mes projets personnels ... C'est devenu d'ailleurs une obsession dans le bon sens du terme.


Amicalement, A+
--
Claudius

Hors ligne

#5 Le 10/03/2016, à 15:52

dva2tlse

Re : blocage fortran OpenMP

Bonjour Claudius, un petit mot rapide parce que je quitte bientôt le boulot, mais j'ai fait temporairement une version simplifiée de mon code, avec juste les déclarations et les appels, et elle plante aussi à la fin de la longue instruction principale de openmp.
C'est un simple DO PARALLEL, mais avec de nombreuses clauses SHARED et PRIVATE, et je ne sais pas par quel bout l’attraper pour retomber sur quelque chose qui marche.
Je continuerai demain...
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

#6 Le 11/03/2016, à 13:24

dva2tlse

Re : blocage fortran OpenMP

Bonjour Claudius,
j'ai essayé de bosser sur la déclaration de région parallèle; j'ai fait temporairement une version simplifiée de mon code, avec juste les déclarations et les appels de sous-programmes, et aucun travail dedans, et elle plante aussi; à la fin de la longue instruction principale de OpenMP. (et cela me fait donc pressentir que je ne suis pas trop loin du compte, surtout que l'erreur est très similaire avec des symptomes très similaires également)
Cette construction est un simple DO PARALLEL, mais avec de nombreuses clauses de statut SHARED et PRIVATE, et je ne sais pas par quel bout l'attraper pour retomber sur quelque chose qui marche afin de pouvoir en revenir à mon programme complet.

Si ça peut te donner des idées à me communiquer ensuite...
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