IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Fortran Discussion :

Boucle Do parallele OpenMP


Sujet :

Fortran

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 39
    Points : 29
    Points
    29
    Par défaut Boucle Do parallele OpenMP
    Bonjour,

    J'ai un programme qui fonctionne bien avec un seul processeur.
    Cependant, son temps d'execution est asse long alors j'aimerais utiliser les 2 processeurs de mon IBM. J'ai mis des instructions !$OMP DO / !$OMP END DO, cela fonctionne, les 2 cores tournent a 100% mais j'ai un probleme.
    Voici un code pour illustrer mes propos :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Program test
    integer i, compte
    real f,a(1024)
     
    compte=0
    !$OMP PARALLELE
    !$OMP DO
    do i=1, 1024
         a(compte+1)=f(i)
         compte=compte+1
    enddo
    !$OMP END DO
    !$OMP END PARALLELE
     
    end program
     
    Function f(nb)
    integer nb
    real f
     
    f=(nb)**(1/2)
    return
    end function
    Mon probleme est que pour certaines valeurs, dans le tableau a() ne sont pas remplis (a la limite entre les taches gerées par chacun des procs?) et pourtant la valeur final de compt est bien 1024.

    Pouriez vous m'aider a resoudre ce probleme, avez vous des idées?

    Merci

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 79
    Points : 89
    Points
    89
    Par défaut open MP
    Bonjour,

    une question : que ce passe-t-il si au lieu d'utiliser compte pour indicer ton tableau tu utilises i ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 39
    Points : 29
    Points
    29
    Par défaut
    Bonjour,

    Il ne se passe rien, le problème reste le meme.
    Dans mon tableau final, là où j'ai un problème, une valeur (environ) de -6E28 apparait, la meme valeur qui est dans chacune des lignes du tableau avant que je ne l'utilise.
    Cette valeur de provient pas de la fonction qui retournerait cette valeur car j'ai mis un "if" pour afficher un "Erreur" à l'ecran si la fonction dans la boucle do renvoit une valeur négative.
    Le problème vient d'un mauvais partage du travail entre les 2 cores.

    Merci de t'être intéressé à mon problème.

    Quel pourrait etre la cause de ces erreurs?

    Merci

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 79
    Points : 89
    Points
    89
    Par défaut
    Bonsoir,

    j'ai repris ton ecm (très bonne idée ;-)),

    en modifiant, un peu ton code, j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Program test
    integer i
    real f,a(1024)
    
    !$OMP PARALLEL
    !$OMP DO
    do i=1, 1024
         a(i)=f(i)
    enddo
    !$OMP END DO
    !$OMP END PARALLEL
    do i=1, 1024
       write(*,*)i," ",a(i)
    enddo
    
    end program
    
    Function f(nb)
    integer nb
    real f
    
    f=(nb)**(1.0/2.0)
    return
    end function
    Que je compile comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ifort -static -openmp Test.f90 -o test
    et que je test comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ./test | gawk '{print $1 "==" $2*$2}'
    Bon du coup, il semble que pour l'ECM ça devrait marché (a priori si mon OS arrive bien à utiliser les deux cores)
    => Si cet ECM ne marche pas chez toi regarde du coté de la compilation
    => Sinon , tes problèmes venait peut-être d'autre choses (parties en rouge dans mon ecm)

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 39
    Points : 29
    Points
    29
    Par défaut
    Salut
    Merci pour ta reponse. Et desole pour le retard.

    En fait mon bout de code etait la pour illustrer mais ce n'est pas le code que je cherche a paralleliser.
    Dans mon 'vrai' code (que je ne met pas parce qu'il est indigeste) je cherchais a paralleliser plusieur DO imbriques les uns dans les autres...
    C'est ce que OMP a du mal a gerer (dans mon cas, peut etre existe-il une solution).
    Donc je me suis debrouille pour reduire les 4 DO en un seul et ca semble fonctionner.
    Merci pour ton aide.

    (Tu compiles sous Linux? quels sont les avantages?)

Discussions similaires

  1. Paralleliser 5 boucles imbriquées avec OpenMP
    Par grut211 dans le forum Fortran
    Réponses: 4
    Dernier message: 26/02/2015, 14h51
  2. 2 fonctions en parallele openmp
    Par miloon dans le forum Threads & Processus
    Réponses: 1
    Dernier message: 12/06/2012, 15h02
  3. Boucles dépendantes et OpenMP
    Par nanath02 dans le forum Threads & Processus
    Réponses: 3
    Dernier message: 26/03/2010, 14h49
  4. parallélisation openmp boucles imbriquées
    Par black.scratch dans le forum Threads & Processus
    Réponses: 5
    Dernier message: 13/07/2009, 12h52
  5. Plusieurs boucles en parallele avec Timers
    Par micniv dans le forum Access
    Réponses: 4
    Dernier message: 06/12/2006, 16h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo