Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Membre habitué Avatar de rogue-spectre
    Homme Profil pro
    Inscrit en
    juillet 2011
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : juillet 2011
    Messages : 102
    Points : 107
    Points
    107

    Par défaut performance copie tableaux en parallèle

    Bonjour à tous

    Je dois améliorer un code parallèle, écrit en fortran 77/90 (compilé en O3 avec mpif90 de gfortran et de ifort). Après quelques recherches je tombe sur ce qui semble être une solution du problème, à savoir remplacer

    par une des deux lignes

    Code :
    1
    2
    3
    q=w
    q(1:taille, 1:5)=w(1:taille, 1:5)
    car la première génère un code plus lent en parallèle. Avez vous déjà rencontré ce problème. Est-ce un bug, ou juste un point auquel il faut faire attention ?

    Bonne journée à tous
    Libérez vos documents http://fr.libreoffice.org/ et vos doigts en tapant en BÉPO http://bepo.fr/wiki/Accueil:, rangez les cartes perforées dans une armoire et GOTO work

  2. #2
    Membre habitué
    Inscrit en
    mai 2010
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : mai 2010
    Messages : 122
    Points : 132
    Points
    132

    Par défaut

    Salut,

    La performance est-elle la même sur différents ordinateurs?

    Je pense sinon que le gain vient de :
    Lorsque tu demandes de copier l'ensemble du tableau, sans spécifier sa taille, le CPU doit alors demander à la mémoire quelle est la taille du tableau. En d'autre terme, je pense que l'instruction marche comme suit :
    1. CPU : Quelle est la taille du tableau?
    2. Mémoire : Elle est de taille
    3. CPU : copie le tableau w(taille,1:5) dans q

    Donc en somme, tu sautes deux étapes en stockant directement la taille du tableau (ce qui, particulièrement dans un code MPI a beaucoup de processus peut s'avérer être un gain assez substantiel)

    Enfin, je pense que c'est quelque chose comme ça.

    @ plush,

    Marlan

  3. #3
    Membre habitué Avatar de rogue-spectre
    Homme Profil pro
    Inscrit en
    juillet 2011
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : juillet 2011
    Messages : 102
    Points : 107
    Points
    107

    Par défaut

    personnellement j'ai seulement testé sur un i7-2600, en activant ou pas l'hyperthreading, mais le code à déjà été lancé sur d'autres machines par d'autres personnes et il a déjà été constaté des performances plus que médiocres en parallèle. J'accepte bien l'idée le fait que de demander la taille d'un tableau puisse prendre un peu de temps… mais bon, je ne pense pas que ça n'explique tout.
    Libérez vos documents http://fr.libreoffice.org/ et vos doigts en tapant en BÉPO http://bepo.fr/wiki/Accueil:, rangez les cartes perforées dans une armoire et GOTO work

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    septembre 2004
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : septembre 2004
    Messages : 110
    Points : 118
    Points
    118

    Par défaut

    Tu observes la même chose avec gfortran et ifort?

    Pour le "en parallèle", c'est MPI ou tu utilises du multithreading (OpenMP ou -auto)?

  5. #5
    Rédacteur/Modérateur

    Avatar de Matthieu Brucher
    Profil pro Matthieu Brucher
    Développeur HPC
    Inscrit en
    juillet 2005
    Messages
    9 803
    Détails du profil
    Informations personnelles :
    Nom : Matthieu Brucher
    Âge : 32
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : juillet 2005
    Messages : 9 803
    Points : 21 634
    Points
    21 634

    Par défaut

    Normalement ce bout de code doit saturer la bande passante mémoire. Ajouter des threads sur un même socket ne va que créer de la contention à la mémoire et des cache-miss (ça dépendra du compilateur pour ce dernier point).
    Donc si tu copies déjà à vitesse max, tu ne gagneras rien à paralléliser ce bout de code. Vérifie en faisant un profil de la bande passante mémoire à cet endroit.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •