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 :

Le C++ est-il adapt� pour le multithreading et la programation parall�le ?


Sujet :

Threads & Processus C++

  1. #1
    Alp
    Alp est d�connect�
    Expert confirm�

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par d�faut Le C++ est-il adapt� pour le multithreading et la programation parall�le ?
    Bonsoir,

    Selon vous, C++ fait-il partie des langages les plus adapt�s pour le multithreading et la programmation parall�le, sujet au coeur de la recherche et des �volutions aujourd'hui ? Quels sont les meilleurs outils pour en tirer au mieux parti ?

    N'h�sitez pas � argumenter, bien au contraire

    PS : voici quelques discussions qui se rapportent au d�veloppement parall�le en C++
    http://www.developpez.net/forums/d74...rallel-studio/
    http://www.developpez.net/forums/d74...-parallelisme/

  2. #2
    Membre �prouv�
    �tudiant
    Inscrit en
    Octobre 2007
    Messages
    189
    D�tails du profil
    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 189
    Par d�faut
    J'ai jamais pouss� tr�s loin mes utilisations des fils, mais je suis tomb� sur ceci. Tout porte � croire que le C++ est effectivement adapt� � cette utilisation si le comit� d�cide d'ajouter ces outils � la STL.

    Apr�s, il faudra voir le r�sultat.

  3. #3
    R�dacteur

    Avatar de Matthieu Brucher
    Profil pro
    D�veloppeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France, Pyr�n�es Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par d�faut
    Beaucoup de frameworks existent pour le C++ permettant la programmation parall�le. Ils sont tous plus ou moins efficaces :
    - OpenMP
    - MPI
    - TBB
    - wxWidgets
    - Qt
    - ...

    Bref, tr�s efficace. Et avec les fonctions lambda, �a va encore aller en s'am�liorant.

  4. #4
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    D�j�, j'aimerais distinguer 3 types de multithreading :
    - Pour les performances (exploiter un mat�riel multi-c�urs)
    - Pour la r�activit� (une IHM qui reste r�active quand le calcul s'�x�cute, un programme g�rant en temps r�el des �v�nements ext�rieurs)
    - Pour l'isolation (un serveur web isolant les diff�rentes r�ponses � diff�rentes requ�tes)

    Je pense que la question �tait particuli�rement orient�e vers le parall�lisme pour la performance, qui est en effet d'actualit� de nos jours.

    Pour la question, aujourd'hui, je dirais non car :
    - Le comportement multithread du C++ est platform dependant
    - Il n'y a rien de standard pour g�rer les threads, les locks...
    - Il n'y a rien qui permette de remonter une exception depuis un thread vers le thread l'ayant lanc�
    - La notion de fonction pure qui permettrait d'aider une parall�lisation automatique n'existe pas
    - La syntaxe pour d�signer une action est lourde (pas de lambda-expression)
    - C'est un langage imp�ratif, qui plus est o� la possibilit� d'aliasing est omnipr�sente, rendant la parall�lisation difficile.

    L'avantage, c'est qu'� part le dernier point, tous sont adress�s par C++0x

    Et comme d'un autre c�t�, le C++ est un langage qui est orient� performances, il me semble naturel que que faire de la performance gr�ce au parall�lisme se base d�j� sur le fait de faire de la performance tout court.

    Autre point positif, le C++ est un langage o� tout est fait pour permettre de b�tir des niveaux d'abstraction �lev�s � partir de couches bas niveau, sans que cette abstraction ait un co�t trop important. Threads et lock sont des primitives bas niveau. Des biblioth�ques comme TBB sont d'un niveau un peu plus �lev�. Tout un niveau o� le parall�lisme devient non plus explicite mais implicite reste � construire.
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

  5. #5
    R�dacteur

    Avatar de Matthieu Brucher
    Profil pro
    D�veloppeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France, Pyr�n�es Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par d�faut
    Citation Envoy� par JolyLoic Voir le message
    Et comme d'un autre c�t�, le C++ est un langage qui est orient� performances, il me semble naturel que que faire de la performance gr�ce au parall�lisme se base d�j� sur le fait de faire de la performance tout court.
    Certains diront qu'il manque � ce niveau la possibilit� de supprimer l'aliasing de pointeurs

  6. #6
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    D�tails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par d�faut
    Citation Envoy� par JolyLoic Voir le message
    - La notion de fonction pure qui permettrait d'aider une parall�lisation automatique n'existe pas.
    [...]
    - C'est un langage imp�ratif...

    L'avantage, c'est qu'� part le dernier point, tous sont adress�s par C++0x
    Des fonctions pures ?
    Je ne me souviens pas avoir vu passer de proposition pour �a et la recherche du mot "pure" dans le draft de mars ne donne rien (sauf des r�f�rences aux fonctions virtuelles pures)
    Est-ce une exclu pour developpez ?
    Aurais-tu quelques d�tails ?

  7. #7
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    Citation Envoy� par Arzar Voir le message
    Des fonctions pures ?
    Je ne me souviens pas avoir vu passer de proposition pour �a et la recherche du mot "pure" dans le draft de mars ne donne rien (sauf des r�f�rences aux fonctions virtuelles pures)
    En fait, j'ai �t� un peu trop enthousiaste...
    L'id�e n'est pas forc�ment d'avoir une gestion par le standard de fonctions pures, mais de permettre � des compilateurs de g�rer la notion de fonction pure. Mais cette id�e fait d�bat.

    En gros, il y a une proposition sur les attributs, et parmi les exemples d'attributs, l'un des plus cit�s est un attribut pure pour les fonctions. Mais les attributs seraient en grande partie non standards, juste des points d'expansion pour les compilateurs. http://www.open-std.org/jtc1/sc22/wg...2008/n2553.pdf
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

  8. #8
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    D�tails du profil
    Informations personnelles :
    �ge : 35
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par d�faut
    Sinon, en quoi les lambdas vont dans le sens de la programmation parall�le? (dans ma t�te le m�canisme mis en oeuvre part le compilo revient � cr�er un foncteur)

  9. #9
    R�dacteur

    Avatar de Matthieu Brucher
    Profil pro
    D�veloppeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France, Pyr�n�es Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par d�faut
    On a souvent besoin de ce genre de fonctions/foncteurs/... pour le parall�lisme. Ca permet donc de r�duire le nombre de lignes � �crire. Ou de ne pas les appeler en-dehors d'un framework.

  10. #10
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    On y gagne en nombre de lignes � �crire, mais aussi en localit� du code, et en besoin de trouver un nom.

    Si j'ai une fonction :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void f()
    {
      vector<double> v;
      // ... 
      for(auto it = v.begin() ; it != v.end() ; ++it)
      {
        *it = 2*g(*it);
      }
      // ...
    }
    Et que je d�sire remplacer le for par un parallel_for, avec un simple foncteur, je dois �crire :

    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
     
    struct ApplyGAndDoubleResult // nom pas forcément bien choisi, de plus, on ne sait pas trop où cette classe va servir
    {
      double operator()(double d)
      {
        return 2*g(d);
      }
    }; // Pas mal de lignes de code
     
    void f()
    {
      vector<double> v;
      // ... 
      // On est obligé d'aller regarder ailleur pour voir ce qui se passe dans la boucle
      parallel_for(v.begin(), v.end(), ApplyGAndDoubleResult ());
      // ...
    }
    Avec des lambdas, on se retrouve bien plus proche du code initial :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void f()
    {
      vector<double> v;
      // ... 
      parallel_for(v.begin(), v.end(), [](double d)
      {
          return 2*g(d);
      });
      // ...
    }
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

  11. #11
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    D�tails du profil
    Informations personnelles :
    �ge : 35
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par d�faut
    Ahhh d'accord, je pensais que les lambdas permettrait des optimisations derri�re pour du MT. Mais en fait non c'est par rapport � la compr�hension du code. C'est le sens que j'avais pas compris.

  12. #12
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    Citation Envoy� par JolyLoic Voir le message
    - Il n'y a rien qui permette de remonter une exception depuis un thread vers le thread l'ayant lanc�
    Je ne comprends pas le fonctionnement / usage. Chaque thread ayant sa propre pile, et les exceptions remontant cette pile, comment �a marche / s'utilise ?

  13. #13
    Expert confirm�

    Inscrit en
    Novembre 2005
    Messages
    5 145
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par d�faut
    Citation Envoy� par Aurelien.Regat-Barrel Voir le message
    Je ne comprends pas le fonctionnement / usage. Chaque thread ayant sa propre pile, et les exceptions remontant cette pile, comment �a marche / s'utilise ?
    Un exemple d'utilisation bas� sur la notion de "future" o� on lance un calcul en parall�le en gardant un objet qui repr�sente le r�sultat, quand on essaie d'avoir la valeur du r�sultat, on bloque en attendant le r�sultat du calcul. Si le calcul �choue � cause d'une exception, il est sens� de jeter � nouveau cette exception quand on cherche � obtenir la valeur. Il est d'autres cas o� on peut vouloir copier une exception d'une thread � l'autre.

  14. #14
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    Merci pour l'explication.

  15. #15
    yan
    yan est d�connect�
    R�dacteur
    Avatar de yan
    Homme Profil pro
    Ing�nieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : Ing�nieur expert
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par d�faut
    Citation Envoy� par Aurelien.Regat-Barrel Voir le message
    Merci pour l'explication.
    Pour info, les QtConcurrent l'impl�mente
    http://doc.qtsoftware.com/4.6-snapsh...exception.html

  16. #16
    Expert confirm�

    Inscrit en
    Novembre 2005
    Messages
    5 145
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par d�faut
    Citation Envoy� par yan Voir le message
    A condition de la classe d'exception h�rite d'une classe de Qt.

  17. #17
    Membre tr�s actif
    Profil pro
    professeur des universit�s � la retraite
    Inscrit en
    Ao�t 2008
    Messages
    364
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : professeur des universit�s � la retraite

    Informations forums :
    Inscription : Ao�t 2008
    Messages : 364
    Par d�faut
    La question initiale m�riterait d'�tre reprise � la lumi�re des apports du C++11, non ? (m�me si les fonctionnalit�s concernant les threads sont encore celles qui sont le moins impl�ment�es dans les grands compilateurs, mais, ma foi, �a ne saurait tarder maintenant...).

    A noter un livre excellent sur le sujet :

    C++, Concurrency in Action, par Antony Williams

Discussions similaires

  1. Le langage Java est-il adapt� pour les jeux vid�o ?
    Par Invit� dans le forum D�veloppement 2D, 3D et Jeux
    R�ponses: 637
    Dernier message: 05/02/2021, 22h38
  2. R�ponses: 39
    Dernier message: 13/07/2018, 04h48
  3. R�ponses: 1
    Dernier message: 27/04/2009, 10h28
  4. R�ponses: 44
    Dernier message: 21/01/2009, 10h34
  5. [Joomla!] un CMS est-il adapt� pour mon site?
    Par welcominh dans le forum EDI, CMS, Outils, Scripts et API
    R�ponses: 2
    Dernier message: 11/04/2008, 22h33

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