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

Algorithmes et structures de données Discussion :

Existe-t'il une norme multi-plateforme pour le multi-thread


Sujet :

Algorithmes et structures de données

  1. #1
    Membre éprouvé
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    Billets dans le blog
    1
    Par défaut Existe-t'il une norme multi-plateforme pour le multi-thread
    Bonjour,

    Je suis entrain de publier un algo de calcul parrallèle dans une revue scientifique.
    Je dois pour cela fournir le code de l'algo.
    Ca sera en C++

    par contre, pour le multithread, je ne connais que des méthodes plateforme-spécifiques (celle de visual studio vs windows, celle de GCC vs Linux, ...). Comme je programme rarement en multithread, je ne suis aps au courant ni de ce qui se fait habituellement, ni des éventuells normes qui existent, d'où ma question en titre du fil :

    Existe-t'il une norme multiplatteforme pour le multithread ?

    merci

  2. #2
    Membre expérimenté
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Points : 1 685
    Points
    1 685
    Par défaut
    Bonjour,

    la récente norme C++ permet d'utiliser des threads avec la STL. Pour ce langage, et uniquement pour celui-ci, je pense que l'on peut considérer qu'il s'agit du standard en la matière.

  3. #3
    Membre éprouvé
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Aleph69 Voir le message
    Bonjour,

    la récente norme C++ permet d'utiliser des threads avec la STL. Pour ce langage, et uniquement pour celui-ci, je pense que l'on peut considérer qu'il s'agit du standard en la matière.
    Tu veux parler du C++11 ?

  4. #4
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Bonjour,

    comment sont présentés les articles similaires dans cette revue ?

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par ol9245 Voir le message
    Je suis entrain de publier un algo de calcul parrallèle dans une revue scientifique.
    Je dois pour cela fournir le code de l'algo.
    C'est le code ou l'ago ??

    Si c'est l'algo, c'est indépendant : un thread doitêtre traité comme un CPU ou une machine..

    Si c'est le code, alors il suffit que tu indiques sur quelle platefome/langage.

    Sinon, il faudrait que tu encapsules ou traites tes fonctions d'appels multithreads en style "callbacks". Comme ça ton code est indépendant, et tu peux facilement dire "il suffirait de remplacer les appels aux threads par des appels aux cores ou à d'autres machines via MPI" par exemple.. car l'impact serait alors limité et parfaitement circonscris..

  6. #6
    Membre expérimenté
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Points : 1 685
    Points
    1 685
    Par défaut
    Citation Envoyé par ol9245 Voir le message
    Tu veux parler du C++11 ?
    Tout à fait.

  7. #7
    Membre éprouvé
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    Billets dans le blog
    1
    Par défaut
    merci pour vos réponses très pertinentes.

    @Aleph69, tu m'as fait découvrir le C++11. C'est la solution que je vais donc utiliser car en effet elle est standard et multiplate-forme. J'aurais aimé qu'elle soit aussi portable sur Matlab car c'est mon environnement de programmation préféré. Je ne crois pas que ce soit le cas pour l'instant mais ce n'est qu'une question de temps je suppose.

    Est-ce que tu as un bouquin en particulier à me conseiller sur C++11 (j'ai programmé des dizaines de milliers de ligne en C et C++ mais je me suis arrêté il y a 10 ans et je n'ai eu qu'une utilisation rudimentaire de la STL).

    @souviron, les scientifiques thématiciens comme moi (science du sol en l'occurence) conçoivent et publient pas mal d'algorithmes En géoscience, il y a une revue dédiée à ce type de publication : Computer & Geoscience. Par contre les auteurs de cette revue sont le plus souvent des amateurs en informatique. Nombre d'entre nous ne savent pas, ou n'ont pas le temps, de paralléliser leurs algos. J'ai la chance d'avoir une petite expérience, ponctuelle et ancienne, en programmation multithread. Je n'ai donc pas peur de m'y recoller si besoin est. Par contre avant de m'y mettre je suis venu aux nouvelles pour savoir ce qui se fait aujourd'hui en la matière.

    Je veux que les algos que je publient diffusent vite dans ma communauté scientifique. Pour cela, il faut qu'ils soient rapides, y-compris par rapport à des algos plus vieux qui ont été parallélisés récemment. C'est le cas de mon algo : je suis l'auteur de la précédente version qui reste la plus rapide 10 ans après sa publication et qui a été parallélisée l'an dernier (par un mec de math-applis que je ne connais pas). Le gros avantage du nouvel algo est qu'il est semi-linéaire (N.logN) au lieu d'être polynomial (N^1.3 en pratique, N^2 dans le pire cas). Les gigantesques jeux de données d'aujourd'hui, qui n'existaient pas il y a 10 ans, sont ma cible. Si je veux que mon nouvel algo soit utilisé, il faut qu'il soit effectivement plus rapide que la dernière implémentation de l'ancien. Il faut donc que je me colle au moins à la parallélisation minimale pour ne pas laisser 7 coeurs/8 au repos.

    finalement pour répondre au coeur de ta question, dans computer & geoscience, nombre d'algos ne sont décrits que en pseudo code. C'est ce que je ferai aussi. Par contre je donnerai un lien internet pour télécharger le code en C++11 (puisque mon choix est fait grâce à Aleph69).

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par ol9245 Voir le message
    finalement pour répondre au coeur de ta question, dans computer & geoscience, nombre d'algos ne sont décrits que en pseudo code. C'est ce que je ferai aussi. Par contre je donnerai un lien internet pour télécharger le code en C++11 (puisque mon choix est fait grâce à Aleph69).
    OK, il n'y a aucun problème dans ce cas... peu importe d'ailleurs que tu utilises ou non la dernière version +ou- standard.

    Il suffisait je pense d'indiquer précisément la version...

    Mais si tu as le loisir de le porter, c'est très bien


    (tu noteras que ta formulation originale était .. tendancieuse :

    Je suis entrain de publier un algo de calcul parrallèle dans une revue scientifique.
    Je dois pour cela fournir le code de l'algo

    )

  9. #9
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 304
    Points : 52 882
    Points
    52 882
    Par défaut
    Citation Envoyé par ol9245 Voir le message
    J'aurais aimé qu'elle soit aussi portable sur Matlab car c'est mon environnement de programmation préféré. Je ne crois pas que ce soit le cas pour l'instant mais ce n'est qu'une question de temps je suppose.
    En fait la limitation vient de la version de GCC prise en charge par la dernière version de MATLAB (GCC 4.4 pour la R2012b aujourd'hui).

    Mais rien ne t'interdit d'essayer avec une version 4.7 de GCC, au mieux tu auras un message d'avertissement avec MEX de ce genre :

    Warning: You are using gcc version "4.6.3-1ubuntu5)".  The version
             currently supported with MEX is "4.3.4".
             For a list of currently supported compilers see: 
             http://www.mathworks.com/support/com...rrent_release/
    au pire ça ne compilera pas du tout.

  10. #10
    Membre expérimenté
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Points : 1 685
    Points
    1 685
    Par défaut
    Bonsoir,

    Citation Envoyé par ol9245 Voir le message
    C'est la solution que je vais donc utiliser car en effet elle est standard et multiplate-forme. J'aurais aimé qu'elle soit aussi portable sur Matlab car c'est mon environnement de programmation préféré. Je ne crois pas que ce soit le cas pour l'instant mais ce n'est qu'une question de temps je suppose.
    Du point de vue de Mathworks, je pense que le standard matlab en programmation parallèle est plutôt la Parallel Computing Toolbox bien que ses fonctionnalités soient encore très limitées. Je ne sais d'ailleurs pas si elle va évoluer, ni dans quelle direction.

    Si tu souhaites passer par des fichiers MEX, la norme C++11 sera officiellement disponible pour matlab dès qu'un compilateur C++ respectant la nouvelle norme sera disponible pour matlab. Les compilateurs sont en train d'évoluer dans ce sens donc cela devrait arriver assez vite. La release 2013 devrait déjà permettre de faire pas mal de choses nouvelles. Un état des lieux de l'évolution des compilateurs est disponible ici. Tu peux voir que les opérations atomiques sont supportées depuis la version 2011 de Visual et la version 4.4 de GCC (et partiellement le concurrentiel). La version actuelle de Matlab supporte pour le moment Visual 2010 comme indiqué et GCC 4.4 comme indiqué . Si tu es sous Windows, tu peux également t'en sortir avec MinGW et gnumex comme expliqué ici. Attention à bien compiler MinGW toi-même pour bénéficier de la version 4.4 de GCC. Sinon, je pense qu'il y a toujours moyen de s'en sortir en bidouillant en utilisant différentes versions d'un même compilateur (l'une supportée par Matlab, l'autre supportant partiellement le C++11) et en passant par une bibliothèque dynamique pour la partie du code utilisant la dernière norme (sans convitions, à tester).

    Citation Envoyé par ol9245 Voir le message
    Est-ce que tu as un bouquin en particulier à me conseiller sur C++11 (j'ai programmé des dizaines de milliers de ligne en C et C++ mais je me suis arrêté il y a 10 ans et je n'ai eu qu'une utilisation rudimentaire de la STL).
    Idéalement, je te conseillerais la dernière version du livre de Stroustrup (créateur du C++, référence en la matière) mais elle ne sera disponible que fin mars 2013. Actuellement, tu peux te procurer le livre de Josuttis. Je dispose moi-même d'un livre du même auteur sur les templates plutôt bien écrit je trouve. Cela dit, dans ton cas particulier, je me demande si tu ne trouverais pas un plus grand intérêt au récent livre C++ Concurrency in Action qui est plus spécialisé dans la programmation parallèle avec la nouvelle norme. Je tiens à préciser que je ne l'ai pas encore lu mais j'en ai eu de très bons échos. Pour être le mieux conseillé possible, je t'invite vivement à poster ta question directement dans le forum C++ où tu trouveras des personnes connaissant mieux la littérature que moi sur le sujet.

    Bon courage pour la rédaction de ton article et l'implémentation de ton code!

  11. #11
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 304
    Points : 52 882
    Points
    52 882
    Par défaut
    Citation Envoyé par Aleph69 Voir le message
    Si tu es sous Windows, tu peux également t'en sortir avec MinGW et gnumex comme expliqué ici.
    Il y a plus simple et plus à jour => http://stackoverflow.com/questions/8...s-mex-compiler

  12. #12
    Membre expérimenté
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Points : 1 685
    Points
    1 685
    Par défaut
    Je ne connaissais pas la solution via makefile : très pertinent! Merci pour le lien!

  13. #13
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 304
    Points : 52 882
    Points
    52 882
    Par défaut
    J'utilise personnellement cette solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x86_64-w64-mingw32-c++ -m64 -shared -I"%MATLAB%/extern/include" -DMATLAB_MEX_FILE -o bla.mexw64 -Wl,--export-all-symbols *.cpp -L"%MATLAB%/bin/win64" -lmex -lmx -leng -lmat
    ou un simple batch du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @echo off
     
    set MATLABPATH=C:/MATLAB/R2009a/
    set CC=x86_64-w64-mingw32-gcc
    set b=64
     
    if exist %1.mexw64 del %1.mexw64
     
    %CC% -m%b% -fopenmp -shared -I"%MATLABPATH%extern/include" -DMATLAB_MEX_FILE -o %1.mexw%b% -Wl,--export-all-symbols %1.c -L"%MATLABPATH%bin/win%b%" -lmex -lmx -leng -lmat

  14. #14
    Membre éprouvé
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    Billets dans le blog
    1
    Par défaut
    Merci à tous pour vos contributions.

    Je vais m'attaquer à la parrallélisation de mon algo et je vais faire un nouveau fil pour cela.

Discussions similaires

  1. Existe-t-il une norme de programmation ?
    Par dsr57 dans le forum EDI/Outils
    Réponses: 6
    Dernier message: 15/03/2007, 10h15
  2. Quelle api de fenêtrage pour du multi-plateforme ?
    Par Mindiell dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 29/01/2007, 17h42
  3. Réponses: 4
    Dernier message: 16/01/2007, 15h27
  4. Réponses: 8
    Dernier message: 02/08/2006, 23h18
  5. Quel langage pour application multi-plateforme ?
    Par yukimura_s33 dans le forum Langages de programmation
    Réponses: 22
    Dernier message: 21/11/2005, 13h22

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