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

MATLAB Discussion :

programmation OpenMP et MPI


Sujet :

MATLAB

  1. #1
    Nouveau Candidat au Club
    programmation OpenMP et MPI
    Bonjour,
    s'il vous plait je voudrai savoir comment insérer des instructions openmp et mpi dans un programme matlab dans l'optique de faire la programmation parallèle ?

  2. #2
    Rédacteur/Modérateur

    En utilisant des fichiers MEX.
    Mes compétences :
    • conception mécanique 3D (Autodesk Fusion 360)
    • développement informatique (MATLAB, Python, C, VBA)
    • impression 3D (Ultimaker)
    • programmation de microcontrôleur (Microchip PIC et Arduino)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Nouveau Candidat au Club
    programmation openmp et mpi sur matlab
    Bonjour, je pense que je n'ai pas été peut être clair sur la description de mon problème. Etant donné un code matlab,je veux insérer des instructions open mp d'une part et d'autre part mpi tous ceci dans deux fichiers différents

  4. #4
    Nouveau Candidat au Club
    programmation openmp et mpi sur matlab
    bonjour , en fait voici le bout de code
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function      % Programme principal
    disp('Application graphique "modale" (à piloter depuis fenetre graphique)')
    global dlg
    dlg = figure('name','Modelix', 'menubar','none', 'numbertitle','off');
    screen_size = get(0,'screensize') ;               
    screen_center = screen_size(3:4)/2 ;            
     dialog_size = [700 510] ;                         
     dialog_pos = screen_center - dialog_size/2 ;     
     set(dlg, 'position',[dialog_pos dialog_size]);
    uiwait(dlg);
    end

  5. #5
    Rédacteur/Modérateur

    Pourrais-tu nous expliquer le contexte de ton projet et ce que tu cherches à faire précisément parce que ce n'est pas clair du tout.

    Quel rapport entre OpenMP/MPI, écrire dans un fichier et le code qui génère une interface graphique ?
    Mes compétences :
    • conception mécanique 3D (Autodesk Fusion 360)
    • développement informatique (MATLAB, Python, C, VBA)
    • impression 3D (Ultimaker)
    • programmation de microcontrôleur (Microchip PIC et Arduino)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  6. #6
    Nouveau Candidat au Club
    programmation openmp et mpi sur matlab
    Bonjour,
    En fait ce n'est pas un projet en tant que telle , c'est dans le cadre de mes travaux de recherches que je sollicite paralléliser un code sur matlab en utilisant openmp d'une part et mpi d'autre part.

  7. #7
    Nouveau Candidat au Club
    programmation openmp et mpi sur matlab
    bonjour ,
    s'il faut utiliser les fonctions MEX comment faire pour intégrer ces fonctions dans mon code matlab? d'une part et d'autre part comment insérer des instructions openmp et mpi directement dans un mon code source directement dans la fonction ci-dessus

  8. #8
    Rédacteur/Modérateur

    Voila comment je procédais il y a quelques années. Je pense que ces explications sont toujours valides aujourd'hui.

    J'écrivais d'abord un fichier MEX en C. Par exemple le fichier test_openmp_helloworld.c :
    Code C :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
    #include <omp.h>
    #include <mex.h>
     
    void mexFunction(int nlhs, mxArray *plhs[],
            int nrhs, const mxArray *prhs[])
     
    {
     
    int nthreads, tid;
     
    /* Fork a team of threads with each thread having a private tid variable */
    #pragma omp parallel private(tid)
      {
     
      /* Obtain and print thread id */
      tid = omp_get_thread_num();
      mexPrintf("Hello World from thread = %d\n", tid);
     
      /* Only master thread does this */
      if (tid == 0) 
        {
        nthreads = omp_get_num_threads();
        mexPrintf("Number of threads = %d\n", nthreads);
        }
     
      }  /* All threads join master thread and terminate */
     
    }

    Ensuite j'utilisais le Gcc fourni avec TDM-GCC sous Windows (vérifier que la bibliothèque OpenMP a bien été sélectionnée à l'installation).

    J'avais écrit un petit fichier BAT nommé mexgcc.bat pour simplifier la compilation :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @echo off
     
    set GCCPATH=C:/TDM64/bin/
    set CC=x86_64-w64-mingw32-gcc
     
    set MATLABPATH=C:/MATLAB/R2015b/
    set arch=64
     
    if exist %1.mexw%arch% del %1.mexw%arch%
     
    %GCCPATH%%CC% -m%arch% -fopenmp -shared -I"%MATLABPATH%extern/include" -DMATLAB_MEX_FILE -o %1.mexw%arch% -Wl,--export-all-symbols %1.c -L"%MATLABPATH%bin/win%arch%" -lmex -lmx -leng -lmat


    Je compilais le MEX directement depuis le Command Window de MATLAB :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    !mexgcc.bat test_mex_openmp


    J'obtenais un fichier nommé test_openmp_helloworld.mexw64 que je pouvais directement appeler depuis un code MATLAB :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >> test_openmp_helloworld
    Hello World from thread = 0
    Number of threads = 4
    Hello World from thread = 1
    Hello World from thread = 2
    Hello World from thread = 3


    Il existe peut être des outils plus pratiques maintenant…

    Edit

    Je viens de trouver une ancienne discussion avec des explications similaires de ma part : Problème avec le linker de MinGW (TDM-GCC-64) et OpenMP sur Windows
    Comme quoi…
    Mes compétences :
    • conception mécanique 3D (Autodesk Fusion 360)
    • développement informatique (MATLAB, Python, C, VBA)
    • impression 3D (Ultimaker)
    • programmation de microcontrôleur (Microchip PIC et Arduino)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  9. #9
    Nouveau Candidat au Club
    programmation openmp et mpi sur matlab
    Bonjour,
    pour être plus clair, j'ai un code matlab ,j'ai voulais générer directement un fichier MEX en utilisant MATLAB Coder j'ai des difficultés sur le fait certaines fonctions et variables que j'utilisais dans mon code source n'arrivaient pas être générées dans mon fichier Mex. Parti du principe selon lequel pour insérer des instructions C(openmp et mpi ) en matlab il faudrait au préalable le transformer en fichiers MEX.

###raw>template_hook.ano_emploi###