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 confirm�
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    245
    D�tails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 245
    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 confirm�
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    65
    D�tails du profil
    Informations personnelles :
    Localisation : France

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

  3. #3
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    �tudiant
    Inscrit en
    F�vrier 2012
    Messages
    788
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 35
    Localisation : France

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

    Informations forums :
    Inscription : F�vrier 2012
    Messages : 788
    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 confirm�
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    245
    D�tails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 245
    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 �clair� Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    F�vrier 2008
    Messages
    495
    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 : 495
    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 confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 504
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

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

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 504
    Par d�faut
    "x:\MinGW\bin" ou "c:\MinGW\bin" ???

  7. #7
    Membre �clair� Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    F�vrier 2008
    Messages
    495
    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 : 495
    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 �clair� Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    F�vrier 2008
    Messages
    495
    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 : 495
    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