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 26/10/2015, à 14:14

dva2tlse

[RéSOLU] segfault en fortran openmp

Bonjour, à mon boulot j'ai une machine REDHAT à 32 proc's, que je voudrais utiliser pleinement pour faire du calcul en parallèle et donc rapide.
J'utilise gfortan et OpenMP pour cela, mais j'ai une segfault incompréhensible.
Est-ce que quelqu'un pourrait m'indiquer quelle option de gdb permet de connaître le nom de la variable sur laquelle une segfault a fait planter le programme.
Je ne connais que "bt" qui me donne la ligne sur laquelle s'est arrêté le programme, mais il se trouve que c'est la ligne principale de parallélisation du programme, et que cette ligne mentionne toutes les variables, en indiquant si elles sont PRIVATE à chacun des threads parrallèles, ou au contraire si elles sont SHARED (partagées) entre tous les threads.
Je sais que valgrind pourrait servir à ça aussi, mais je ne l'ai carrément jamais utilisé.
Merci,
Davi

Dernière modification par dva2tlse (Le 29/10/2015, à 10:26)


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 26/10/2015, à 19:43

grim7reaper

Re : [RéSOLU] segfault en fortran openmp

Salut,

dva2tlse a écrit :

Je ne connais que "bt" qui me donne la ligne sur laquelle s'est arrêté le programme, mais il se trouve que c'est la ligne principale de parallélisation du programme, et que cette ligne mentionne toutes les variables, en indiquant si elles sont PRIVATE à chacun des threads parrallèles, ou au contraire si elles sont SHARED (partagées) entre tous les threads.

Et il n’y a pas moyen de reformater/réecrire le code pour avoir une seule variable par ligne ?

Hors ligne

#3 Le 26/10/2015, à 21:13

dva2tlse

Re : [RéSOLU] segfault en fortran openmp

Bonsoir grim7reaper,
c'est ce que j'ai un peu essayé de faire, mais le format est :

C$OMP PARRALEL DO
C$OMP+DEFAULT(NONE)
C$OMP+PRIVATE(VAR1,
C$OMP+VAR2,
C$OMP+VAR3)
C$OMP+SHARED(VAR4,
C$OMP+VAR5, 
C$OMP+VAR6)

et l'erreur ne se produit que sur la dernière ligne de la clause, quelles que soient les diverses variables citées précédemment et quel que soit leur ordre.
Il faudra que j'essaye (demain) avec :

C$OMP PARRALEL DO
C$OMP+DEFAULT(NONE)
C$OMP+PRIVATE(VAR1)
C$OMP+PRIVATE(VAR2)
C$OMP+PRIVATE(VAR3)
C$OMP+SHARED(VAR4)
C$OMP+SHARED(VAR5) 
C$OMP+SHARED(VAR6)

Mais je ne sais pas si ça passe.
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 27/10/2015, à 07:59

dva2tlse

Re : [RéSOLU] segfault en fortran openmp

Bonjour Grim7reaper,
je viens d'essayer d'utiliser le deuxième format ci dessus, où chaque variable est déclarée comme PRIVATE ou SHARED sur une ligne qui lui est propre, mais en fait des lignes sont toutes des continuations d'une même clause, et c'est celle-là dans son ensemble qui cause une l'erreur.
Donc il me faut bien parvenir d'une manière ou d'une autre à savoir quelle est la variable appelée dont l'adresse cause la segfault.
Soit en utilisant une fonctionnalité adéquate de gdb, soit avec un autre outil. il y a quelques temps, un problème similaire se terminait avec l'indication de l'adresse qui posait problème, mais pas de nom qui m'aiderait bien pourtant. Ce thread !
J'en viens à terminer ce message comme à l'époque :

Comment puis-je savoir quel est le nom de la variable qu'il n'arrive pas à atteindre ?

Merci de m'aider autant que possible,
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

#5 Le 27/10/2015, à 10:57

derderder

Re : [RéSOLU] segfault en fortran openmp

Pour les segfaults, un outil comme valgrind me semble plus approprié que gdb et donnera un resultat plus précis.

Hors ligne

#6 Le 27/10/2015, à 16:27

dva2tlse

Re : [RéSOLU] segfault en fortran openmp

Bonjour,
bin, plus approprié peut-être, mais je ne l'ai jamais utilisé et je n'arrive pas à trouver d'exemple que je pourrais modifier petit à petit, pourrais tu m'en montrer un ?
Merci,
David

EDIT: Et est-ce que ça marche sur du fortran parallélisé avec OpenMP ? Parce que je viens de survoler la doc', et ça ne parle que de C séquentiel.

Dernière modification par dva2tlse (Le 27/10/2015, à 16:48)


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

#7 Le 27/10/2015, à 20:04

derderder

Re : [RéSOLU] segfault en fortran openmp

Il n'y  as pas besoin de doc, juste de faire valgrind ./progname arg1 arg2.
Il fonctionne avec fortran et affiche le pid du processus ou l'erreur survient.

Hors ligne

#8 Le 27/10/2015, à 21:05

dva2tlse

Re : [RéSOLU] segfault en fortran openmp

Bonsoir,
bon, j'essaye demain, mais si ça ne marche pas du premier coup, tu vas m'entendre ;-) et je vais te faire durer ce fil jusqu'à ce que ça marche impec'. (kilékon)
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

#9 Le 28/10/2015, à 14:25

dva2tlse

Re : [RéSOLU] segfault en fortran openmp

Bonjour,
bon, bin le valgrind il manque de pêche...

$ valgrind ./S 1 p2srfd04BAR el04BAR.inp
valgrind: mmap(0x61e000, 1296646144) failed in UME with error 22 (Invalid argument).
valgrind: this can be caused by executables with very large text, data or bss segments.

Y a-t'il une possibilité de lui faire avaler de force un programme industriel, pas un kruk de gamins...
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

#10 Le 28/10/2015, à 16:06

dva2tlse

Re : [RéSOLU] segfault en fortran openmp

Il y a une petite différence entre les fins du programme exécuté sur ou ou deux threads.

2 threads :

    p2srfd:01 DIR=0, IDpch=    0, K=*, Z=1
    p2srfd:01 Spch(DIR=1, IDpch=1, K=1, Z=1)=Cannot access memory at address 0x2aaaa6efe808[New Thread 0x2aaaab76c940 (LWP 18198)]
    Program received signal SIGSEGV, Segmentation fault.                     --------------
    [Switching to Thread 0x2aaaab76c940 (LWP 18198)]
    0x0000000000405db6 in MAIN__.omp_fn.0 (.omp_data_i=
    ) at /S/DATA/DVA/F90/BN/S.f:498
    498     C$OMP+SCHEDULE(GUIDED)
    (gdb) Cannot access memory at address 0x2aaaa6efe808#0  0x0000000000405db6 in MAIN__.omp_fn.0 (.omp_data_i=
    ) at /S/DATA/DVA/F90/BN/S.f:498       --------------
    #1  0x000000366ec0dec5 in ?? () from /usr/lib64/libgomp.so.1
    #2  0x000000366f00683d in start_thread () from /lib64/libpthread.so.0
    #3  0x000000366e8d4fdd in clone () from /lib64/libc.so.6
    (gdb) A debugging session is active.

1 thread :

p2srfd:01 Spch(DIR=1, IDpch=1, K=1, Z=1)=Cannot access memory at address 0x7ffffb78f6f8
Program received signal SIGSEGV, Segmentation fault.                     --------------
0x0000000000405db6 in MAIN__.omp_fn.0 (.omp_data_i=
) at /S/DATA/DVA/F90/BN/S.f:498
498     C$OMP+SCHEDULE(GUIDED) 
(gdb) (gdb) (gdb) (gdb) Cannot access memory at address 0x7ffffb78f6f8#0  0x0000000000405db6 in MAIN__.omp_fn.0 (.omp_data_i=
) at /S/DATA/DVA/F90/BN/S.f:498                         --------------
#1  0x000000000040442d in MAIN__ () at /S/DATA/DVA/F90/BN/S.f:9
#2  0x0000000000419f6e in main ()
(gdb) A debugging session is active.

Mais dans les deux cas c'est la dernière clause de la directive C$OMP PARALLEL DO qui fait planter le bouzin.
Elle est elle-même appelée soit par le main (1 thread) soit apparemment par le thread nouvellement crée. (2 threads)
Pour m'aider, comment pourrais je connaître les noms des variables auxquelles il tente d'accéder aux adresses soulignées ?
Merci,
David

Dernière modification par dva2tlse (Le 29/10/2015, à 09:26)


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

#11 Le 29/10/2015, à 10:25

dva2tlse

Re : [RéSOLU] segfault en fortran openmp

Oh, do not worry any more,it is just a usual segfault with a mess within the indices of an array; and it has nothing to do with OpenMP.
Regards,
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