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
Partager