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
Partager