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 :

openmp probleme compilation simple parallelisation


Sujet :

Threads & Processus C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 245
    Points : 110
    Points
    110
    Par défaut openmp probleme compilation simple parallelisation
    Bonjour,

    j'essaye de me mettre a openmp pour accelerer mon programme et j'ai l'impression que j'ai mal configure quelque chose sur code::blocks.

    j'essaye pour le moment une parrallelisation "toute bete".
    j' ai cette grosse boucle dans mon programme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for(count=0;count<dim;count++)
    {
        if(denom[count]>0)
        {
            f3d[count]=f3d[count]+wth*ftemp[count]/denom[count];
        }
    } // end for count
    et j'ai voulu faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #pragma omp parallel for num_threads(6)
    for(count=0;count<dim;count++)
    {
        if(denom[count]>0)
        {
            int rang = OMP_GET_THREAD_NUM();
            cout << "rang: " << rang;
            f3d[count]=f3d[count]+wth*ftemp[count]/denom[count];
        }
    } // end for count
    pour faire un test tout bete.

    a la compilation ca me dit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    g++ -Wall -fexceptions -g -march=corei7-avx -O3 -fopenmp -Iinclude -c /path/test_class.cpp -o obj/Debug/src/test_class.o
    /path/test_class.cpp: In member function ‘void Images::SART_reconstruction(int, std::string)’:
    /path/test_class.cpp:1037:39: error: ‘OMP_GET_THREAD_NUM’ was not declared in this scope
    je trouve ca bizarre deja vu que omp_get_thread_num existe sur les cours openmp que j'ai lu.

    et si j'enleve le omp_get_thread_num (et cout << rang du coup) j'ai cette erreure a la compilation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    g++ -Wall -fexceptions -g -march=corei7-avx -O3 -fopenmp -Iinclude -c /path/test_class.cpp -o obj/Debug/src/test_class.o
    /path/test_class.cpp: In member function ‘void Images::SART_reconstruction(int, std::string)’:
    /path/test_class.cpp:574:5: warning: variable ‘m’ set but not used [-Wunused-but-set-variable]
    g++  -o bin/Debug/SART obj/Debug/main.o obj/Debug/src/test_class.o   
    obj/Debug/src/test_class.o: In function `Images::SART_reconstruction(int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >) [clone ._omp_fn.0]':
    /path/test_class.cpp:1032: undefined reference to `omp_get_num_threads'
    /path/test_class.cpp:1032: undefined reference to `omp_get_thread_num'
    obj/Debug/src/test_class.o: In function `Images::SART_reconstruction(int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)':
    /path/test_class.cpp:1031: undefined reference to `GOMP_parallel_start'
    /path/test_class.cpp:1031: undefined reference to `GOMP_parallel_end'
    ca me donne l'impression que openmp est mal configure sur mon pc.
    pourtant a priori il est pas defaut sur le compilateur avec ubuntu 12.04.
    et dans code::blocks, dans settings->compiler -> other options, j'ai ajoute -fopenmp comme j'avais vu sur le net.

    est-ce que quelques a une idee ?

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 65
    Points : 58
    Points
    58
    Par défaut
    un #include<omp.h> manquant ?

  3. #3
    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

    Ça compile bien mais l'édition des liens ne peut pas se faire.
    Il faut aussi rajouter -fopenmp à l'éditeur des liens (linker).

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 245
    Points : 110
    Points
    110
    Par défaut
    bonjour,

    merci
    (désolé pour le retard pour la réponse je suis en déplacement professionel).
    c'était le link qui manquait effectivement.

    par contre je comprend pas ...
    j'ai les cpu qui tournent à fond mais j'ai exactement le meme temps de calcul....

    faut que je configure un autre truc ?

  5. #5
    Membre habitué Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 493
    Points : 152
    Points
    152
    Par défaut code bloc C- OPenMP et quid
    Bonjour ,
    je suis sous windobe 8.
    COdeblock est installer avec la version embarque de Minwg
    et de plus celui-ci est installer dans un répertoire de window.

    j'ai pris le code propose sur openmp.org

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <omp.h>
    #include <stdio.h>
     int main()
     {
         #pragma omp parallel
         printf("Hello from thread %d, nthreads %d\n", omp_get_thread_num(), omp_get_num_threads());
     }
    dans setting j'ai mis pour le compilateur (other option) --> -fopenmp

    dans link setting Link libraries je pointe sue le lien de c:\MinGW\bin (qui contient la dll libopenmp-1.dll).


    voici ce qu j'obtiens -->
    ||=== Build: Debug in gExo001 (compiler: GNU GCC Compiler) ===|
    ld.exe||cannot find c:\MinGW\bin: Permission denied|
    ||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|


    jsi j'enleve le lien sur la bib

    ||=== Build: Debug in gExo001 (compiler: GNU GCC Compiler) ===|
    obj\Debug\main.o||In function `main'
    C:\dee\ProjetProgrammeur\gExo001\main.c|4|undefined reference to `GOMP_parallel_start'|
    C:\dee\ProjetProgrammeur\ProjetProgrammeur\gExo001\main.c|5|undefined reference to `GOMP_parallel_end'|
    C:\dee\ProjetProgrammeur\ProjetProgrammeur\gExo001\main.c|6|undefined reference to `omp_get_num_threads'|
    C:\dee\ProjetProgrammeur\ProjetProgrammeur\gExo001\main.c|6|undefined reference to `omp_get_thread_num'|
    ||=== Build failed: 4 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|




    ld.exe||cannot find c:\MinGW\bin: Permission denied|

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 069
    Points : 12 113
    Points
    12 113
    Par défaut
    "x:\MinGW\bin" ou "c:\MinGW\bin" ???

  7. #7
    Membre habitué Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 493
    Points : 152
    Points
    152
    Par défaut comme quoi
    Citation Envoyé par bacelar Voir le message
    "x:\MinGW\bin" ou "c:\MinGW\bin" ???
    Aff c'est bien c dans tous les cas je vois que je n'ai pas modifié tout ce qui est ecrit

  8. #8
    Membre habitué Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 493
    Points : 152
    Points
    152
    Par défaut J'ai trouve ce qu'ili faut faire
    Phase N°1 :mingw-w64

    http://sourceforge.net/projects/ming...e=typ_redirect

    Phase N°2 :
    http://www.codeblocks.org/downloads/26
    http://sourceforge.net/projects/code...p.exe/download

    Phase N°3 :
    installation de mingw

    Avec MinGW Installer : j'ajoute la bibliothèque dans le "path " de windows

    Installation de codeblocks-13.12-setup.exe

    Modification du paramétrage du menu setting / Compiler / compiler setting
    other option : -fopenmp
    link librairies : C:\MinGW\bin\libgomp-1.dll

    tookchain executables mettre : C:\MinGW
    auto-detect


    O glups mingw-w64 s 'installe sur une autre machine dans C:\Program Files (x86)\mingw-w64\i686-4.9.2-posix-dwarf-rt_v3-rev1\mingw32\bin
    et donc tous est en rapport


    l'exemple de code

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    #include <stdio.h>
    #include <omp.h>                // include OpenMP
    #define NUM_DATA_TOT 1024
     
    int main(int argc, char *argv[]) {
        double data[NUM_DATA_TOT];
        int i ;
        int numero_du_threads=0;
        int nombre_de_threads=0;
     
     
        /* initialisation de l'array data */
     
     
        for (i = 0; i < NUM_DATA_TOT; ++i)
            data[i] = 3.14*i;
     
        double somme = 0;
     
        /* procedure d'addition multi-thread */
     /*  boucle for parallèle */
        #pragma omp parallel for reduction(+:somme)
        for (i = 0; i < NUM_DATA_TOT; ++i){
            somme += data[i];
            nombre_de_threads = omp_get_num_threads();
            numero_du_threads = omp_get_thread_num() ;
           printf(" Le thread N° %d  traite la calcul  sur un ensemble de %d thread\n" , numero_du_threads , nombre_de_threads );
     
    /*
        omp_get_num_threads() : renvoie le nombre de threads qui exécutent une section parallèle
        omp_get_thread_num() : renvoie un entier qui correspond au numéro du thread (en partant de 0)
    */
            printf("somme des tous les elements = %f\n", somme);
        }
     
        return 0;
    }
    compilation et voila ca marche

Discussions similaires

  1. [Compilation] probleme de compilation simple
    Par GoldenEyes dans le forum Débuter
    Réponses: 4
    Dernier message: 12/05/2008, 11h53
  2. [JAR]Probleme compilation avec jdom
    Par ronaldgis dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 04/08/2004, 11h31
  3. probleme compilation classe avec Borland c++ compiler 5.5
    Par softblue dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 17/06/2004, 15h16
  4. [Debian] problème compilation jbuilder 9...
    Par Ancien_Do.Urden dans le forum JBuilder
    Réponses: 5
    Dernier message: 20/03/2004, 15h02
  5. [langage] Problème tout simple
    Par marouanitos dans le forum Langage
    Réponses: 5
    Dernier message: 24/09/2003, 11h25

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