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

Multithreading Discussion :

[Thread] TBB vs Qt Concurrent


Sujet :

Multithreading

  1. #1
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Par défaut [Thread] TBB vs Qt Concurrent
    Bonjour,

    Faut-il utiliser TBB ou Qt Concurrent ?
    sachant que j'utilise deja Qt pour l'interface graphique...

    deja sont-ils compatible dans le sens que l'un ne fait pas crasher l'autre ?
    sinon avec TBB peut-on surveiller la progression et si oui comment ? avec Qt ce sont les futures ... mais Qt Concurrent est-il vraiment bien du point de vue performance comparé à TBB?

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Ils fournissent pas vraiment la même chose

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Par défaut
    ils fournissent tous les deux le moyen de paralleliser...

  4. #4
    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 epsilon68 Voir le message
    Qt Concurrent est-il vraiment bien du point de vue performance comparé à TBB?
    A mon avis il n'y as pas de raison que Qt concurrent soit plus lent que tbb ou OpenMP..
    tbb sera peut être globalement un peu plus rapide sur les proc intel.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Par défaut
    tu as déjà testé l'une ou l'autre lib?

  6. #6
    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 epsilon68 Voir le message
    tu as déjà testé l'une ou l'autre lib?
    J'avais regardé un peu sans faire trop de test.
    Ce n'est qu'un avis bien sur.
    Faire deux trois test ne devrait pas prendre trop de temps.
    Aprés faut savoir quoi tester

  7. #7
    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
    Dans la version de Qt 4.4 (sortie ce matin) il y as des exemple utilisant Qt concurent.
    Tu devrais pouvoir les refaire avec tbb pour comparer

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Par défaut
    oki je vais le faire mais je posais justement cette question

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Par défaut
    j'ai la forte impression en regardant Qt Concurrent que cela ne fonctionne que sur les conteneurs de Qt ? c'est ca ? si oui tres tres mauvais :-/

  10. #10
    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 epsilon68 Voir le message
    j'ai la forte impression en regardant Qt Concurrent que cela ne fonctionne que sur les conteneurs de Qt ? c'est ca ? si oui tres tres mauvais :-/
    Pourquoi?
    On peut utiliser des iterator :
    http://qt.developpez.com/doc/latest/...#blockingMap-2
    http://qt.developpez.com/doc/latest/...kingFiltered-2
    http://qt.developpez.com/doc/latest/...tml#filtered-2
    http://qt.developpez.com/doc/latest/...map.html#map-2
    ...

  11. #11
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    C'est pas parce que la fonction prend un type nommé Iterator que ça veut dire que c'est compatible avec le concept d'itérateur standard.
    Déjà il faudrait que ce soit des templates, pas des fonctions. (mais bon ça, c'est peut-être un problème avec leur doc)

  12. #12
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Par défaut
    moi je n'en suis pas du tout sur que ca marche avec les iterateurs standards, je n'arrive plus a retrouver ou j'avais lu "sur les conteneurs Qt".

    ensuite si ca marche, ce n'est pas du tout sur qu'il soit optimal dans ce cas, par example QT_FOREACH marche tres bien pour les conteneurs Qt mais faire une copie pour les conteneurs standards.

    Ils utilisent beaucoup le fait qu'ils utilisent partout le COW.

    voila a tester donc.

    a+

  13. #13
    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 loufoque Voir le message
    Déjà il faudrait que ce soit des templates, pas des fonctions. (mais bon ça, c'est peut-être un problème avec leur doc)
    ce sont des template

    Citation Envoyé par epsilon68 Voir le message
    moi je n'en suis pas du tout sur que ca marche avec les iterateurs standards, je n'arrive plus a retrouver ou j'avais lu "sur les conteneurs Qt".
    ca marche
    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
    #include <QtGui>
    #include <vector>
    #include <cmath>
     
    void scale(double & d)
    {
        qDebug() << "sqrt "<<d<<"dans le thread : "<<QThread::currentThread();
        d= sqrt(d);
    }
    int main(int argc, char *argv[])
    {
        Q_UNUSED(argc);
        Q_UNUSED(argv);
     
        const int imageCount = 20;
     
     
        std::vector<double> myVect;
        for (int i = 0; i < imageCount; ++i)
            myVect.push_back(i);
        QFutureWatcher<void> futureWatcher;
        futureWatcher.setFuture(QtConcurrent::map(myVect.begin(),myVect.end(), scale));
        futureWatcher.waitForFinished();
     
        QtConcurrent::blockingMap (myVect, scale);
     
     
        return 0;
    }
    Citation Envoyé par epsilon68 Voir le message
    ensuite si ca marche, ce n'est pas du tout sur qu'il soit optimal dans ce cas, par example QT_FOREACH marche tres bien pour les conteneurs Qt mais faire une copie pour les conteneurs standards.
    Tout dépend ce que tu fait. Mais tu aura le même problème avec tbb.
    Tu as OpenMP aussi (plus proche du C). C'est ce qu'utilise les algo stl parallèle de gcc 4.? si je ne me trompe pas

  14. #14
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Par défaut
    un truc interessant, regarde si ta collection est copiée?
    parce qu'avec QT_FOREACH c'est le cas, pas avec BOOST_FOREACH

  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 epsilon68 Voir le message
    un truc interessant, regarde si ta collection est copiée?
    parce qu'avec QT_FOREACH c'est le cas, pas avec BOOST_FOREACH
    C'est a dire?
    si lors de l'appel a map il copie le vector? non il ne me semble pas et pourquoi il le ferait?

    Pour QT_FOREACH je suis étonné

  16. #16
    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
    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
    struct A
    {
        A(const double & d =0.):m_d(d) {qDebug() << "create "<<d;};
        A(const A & a):m_d(a.m_d) {qDebug() << "copie "<<m_d;};
    double m_d;
    };
     
    int main(int argc, char *argv[])
    {
        Q_UNUSED(argc);
        Q_UNUSED(argv);
     
        const int imageCount = 1000;
     
        std::vector<A> myVect;
        for (int i = 0; i < imageCount; ++i)
            myVect.push_back(i);
     
        foreach (const A &str, myVect)
            qDebug() << str.m_d;
        return 0;
    }
    Si tu met la variable en const ref tu n'as plus de copie

  17. #17
    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
    TU est sur que BOOST_FOREACH ne fait pas la même chose??

  18. #18
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Par défaut
    j'avais ouvert un post ca fait assez longtemps,
    http://www.developpez.net/forums/sho...d.php?t=345926

    oui je suis sur que BOOST_FOREACH le faisait correctement.
    maintenant peut-etre ca a changé dans Qt depuis ...

  19. #19
    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
    q_foreach semble ne donné qu'un accés non éditable. D'où la copie quand tu n'utilise pas un const ref

    Tu as aussi l'algo std::for_each

  20. #20
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Par défaut
    mais BOOST_FOREACH marche vraiment bien.

Discussions similaires

  1. [Thread] Scrutage répertoire, accès concurrent
    Par erox44 dans le forum Concurrence et multi-thread
    Réponses: 2
    Dernier message: 24/09/2013, 09h20
  2. [threads] Problème d'accès concurrent à une liste
    Par Traroth2 dans le forum Général Java
    Réponses: 5
    Dernier message: 26/11/2009, 17h43
  3. [Thread] TBB vs Qt Concurrent
    Par epsilon68 dans le forum C++
    Réponses: 16
    Dernier message: 07/05/2008, 16h23
  4. Réponses: 11
    Dernier message: 02/08/2007, 15h07
  5. Probleme de concurrence avec les THREADS
    Par L4BiN dans le forum Concurrence et multi-thread
    Réponses: 2
    Dernier message: 31/07/2006, 16h33

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