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

Threads & Processus C++ Discussion :

Parallélisation OpenMP en C


Sujet :

Threads & Processus C++

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Parallélisation OpenMP en C
    Bonjour à tous,

    J'ai une routine en C à paralléliser en utilisant OpenMP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void spmv(int n, int *rowptr, int *colind, double *val, double alpha, double *x, double beta, double *y){
     
      int i, j;
     
      for(i=0; i<n; i++){
        y[i] = beta*y[i];
        for(j=rowptr[i]; j<rowptr[i+1]; j++){
          y[i] += alpha*val[j]*x[colind[j]];
        }
      }
     
      return;
    }
    J'ai déjà essayé de placer dans la seconde boucle un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #pragma omp parallel for reduction(+:y[i])
    mais le langage n'accepte pas le type de y[i].
    Au final, il n'y a pas d'interdépendances entre les y[i] dans la boucle principale, serait-il possible d'utiliser une parallélisation classique sur celle ci ?

    Merci d'avance

  2. #2
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Bonjour

    Il suffit d'utiliser une variable intermédiaire s et d'écrire s dans y[i] à la fin de la boucle.

    Tu peux, en effet, paralléliser la boucle externe.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    J'avais utilisé cette solution, seulement il me semble que le temps de calcul avait beaucoup augmenté.
    Il n'y a pas moyen de paralléliser sans modifier le code, juste en ajoutant du code OpenMP ?

  4. #4
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Ça peut dépendre du nombre de données à traiter; du nombre d'accès mémoire par rapport au nombre de calcul.

    Il faudrait que tu nous donnes un exemple qui tourne et les temps que tu obtiens.

    Citation Envoyé par pité60 Voir le message
    Il n'y a pas moyen de paralléliser sans modifier le code, juste en ajoutant du code OpenMP ?
    ?
    En parallélisant la boucle externe.
    Pour la boucle interne, passer par une variable intermédiaire n'est pas une grosse modification.

Discussions similaires

  1. Débutant en parallélisation : MPI ou OpenMP ?
    Par betaplus dans le forum Programmation parallèle, calcul scientifique et de haute performance (HPC)
    Réponses: 2
    Dernier message: 08/05/2015, 19h50
  2. Performances OpenMP : parallélisation boucles
    Par ant12oine dans le forum Fortran
    Réponses: 11
    Dernier message: 03/12/2010, 13h09
  3. parallélisation openmp boucles imbriquées
    Par black.scratch dans le forum Threads & Processus
    Réponses: 5
    Dernier message: 13/07/2009, 12h52
  4. OpenMP sous Visual 2005
    Par teddy fredaigues dans le forum MFC
    Réponses: 6
    Dernier message: 19/01/2006, 14h43

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