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 21/11/2013, à 09:02

dva2tlse

[résolu] plantage assez surprenant

Bonjour le forum,
j'ai une nouvelle question à propos d'un développement que j'ai â faire et pour lequel j'ai déjâ trouvé ici de l'aide qui m'a permis d'avancer.
Il s'agit d'un gros programme en fortran (gros pour moi en tous cas) qui devra tourner assez vite, enfin pour lequel la vitesse d'exécution sera critique.
Donc j'ai appris à paralléliser mon code avec openmp (l'une des machines sur lesquelles je bosse a quarante proc's), mais parfois il plante bizarrement.
D'après ce que j'ai réussi â comprendre, ça se passe dans une série de boucles imbriquées dont la condition de sortie ne se présente plus, ce qui fait qu'il tourne indéfiniment. MAIS... [tantantan, roulement de tambour pour sublimer le suspens...] donc,... MAIS ça n'est pas systématique.
Ce qui veut dire que des fois tout se passe bien, ça va jusqu'au bout et les résultats sont bons, et parfois ça se met â patiner dans le sous programme â la sortie délicate et je suis obligé de tuer le programme.
Ce que je soupçonne est un peu hallucinant, c'est que, du fait que le programme tourne sur plusieurs proc's (c'est la première application de ce type, parallèle, que je développe) j'imagine que selon la charge de la machine (un serveur de calcul Red Hat sous linux) donc j'imagine que selon cette charge, due â de l'interactif et â d'autres applications de calcul de structures, eh bien le cadencement entre les différents threads se passe différemment d'une fois sur l'autre et parfois ça se met à patiner dans un de mes threads.
Il se trouve que je crois pouvoir m'apercevoir assez vite de ce que donnera un run en cours, puisque certaines des valeurs que je demande temporairement d'afficher pour tenter de comprendre ce qui se passe, s'affichent en "********" comme toute variable du fortran dont la valeur ne "passe" pas dans le format d'affichage spécifié.
Mais tantantan, deuxième roulement de tambour, des fois toutes les valeurs intermédiaires sont bien affichées, et ça patine quand même, et des fois ça ne s'affiche que partiellement et certains threads finissent bien. (ceux qui ont bien affiché probablement)
Merci de m'aider encore sur ce point, qu'est ce qui peut faire planter de cette façon quasi aléatoire ?

Dernière modification par dva2tlse (Le 22/11/2013, à 08:06)


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 21/11/2013, à 10:50

telliam

Re : [résolu] plantage assez surprenant

salut,
pas simple a répondre comme ça. mais as tu essayé de rattacher un debugger sur ton programme qd il tourne en boucle? ou alors modifie le pour avoir une sorte de watchdog qui détecte qd tu rentre dans ce cas la.
Sinon qq pistes :
les entrées sorties sont couteuses en temps et modifient souvent l'ordre d'execution, as tu essayé de rajouter ou d'enlever certaines traces?
as tu trouvé le jeu de valeurs qui fait que ton programme plante?


"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard

Hors ligne

#3 Le 21/11/2013, à 15:41

dva2tlse

Re : [résolu] plantage assez surprenant

Bonjour,
et merci bien d'avoir ajouté aux miens l'activité de quelques (milliards de) neurones pour m'aider.
Le seul debugger que je puisse utiliser, c'est gdb, et je ne le connais pas assez à part "bt" pour me dire où ça plante quand ça plante franchement; là je ne peux pas vraiment m'en servir comme ça, et je ne peux pas bien mettre de "watchdog" dans le code non plus, parce que c'est quelqu'un d'autre qui à fait les boucles imbriquées qui patinent, et je n'en connais pas assez la logique pour m'en sortir dans un temps raisonnable. Tout ce qu'on sait, c'est que ça marche en séquentiel ou sur un seul thread, mais il faudrait s'y replonger sérieusement pour tout comprendre.
Sinon pour les I/O, j'avais justement crée un fil de discussion à ce sujet parce-que je soupçonnais des "malversations" de leur part. (http://forum.ubuntu-fr.org/viewtopic.php?id=1386611)
  Merci,
PS une fois rentré chez moi :
J'ai un nouveau problème ultra-original; c'est que après quelques modifications dans mon code pour ajouter une fonctionnalité importante, le programme plante en séquentiel (puisque mon chef m'a suggéré de laisser le multi-thread pour plus tard, afin de pouvoir ajouter cette fonctionnalité).
Une "simple" memory fault, où je m'attendais à ce que gdb me donne le N° de ligne incriminée, et que je m'aperçoive qu'en effet, une variable indexée utilisée a cette ligne n'existe pas, ou toute erreur habituelle; eh bien non, quand le programme tourne dans gdb, il marche parfaitement ! (YOUPI il va falloir débugger gdb !)

Dernière modification par dva2tlse (Le 21/11/2013, à 18:27)


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 22/11/2013, à 08:02

dva2tlse

Re : [résolu] plantage assez surprenant

Ok j'ai trouvé, c'est bien une segfault "ordinaire", juste un sous programme auquel j'ai passé un tableau en argument, mais pas l'index de l'élément de ce tableau que j'ai besoin d'utiliser; donc au premier essai d'utiliser cette valeur du tableau, indexée par un index non initialisé, eh bien il se retrouve dans le choux.
Maintenant pourquoi gdb marche alors que le programme plante, eh bien on verra ça dans une autre vie si je fais encore du code !


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 22/11/2013, à 12:32

telliam

Re : [résolu] plantage assez surprenant

qd tu utilises gdb, la mémoire du process debuggée est un peu modifiée par le debugger, il suffit que cette zone mémoire correspond avec celle utilisée par la valeur non-initialisée pour que ça "tombe en marche" :-)
ça arrive rarement mais qd c'est le cas c'est tres perturbant smile


"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard

Hors ligne