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

Langage C++ Discussion :

MPTL: MultiProcessing Template Library


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 125
    Par défaut MPTL: MultiProcessing Template Library
    Salut,

    pas de question pour une fois, juste pour filer un lien d'une lib qui me semble sympas

    http://spc.unige.ch/mptl

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    J'ai regardé 5 minutes le code (car il se fait tard), et ça me paraît effectivement intéressant.

    Ca me fait penser sur le principe de la programmation générique à la librairie d'Intel: Threading Buiding Blocks (TBB). J'ai eu la version test beta, gratuite pendant plusieurs mois.
    Cette dernière est beaucoup plus aboutie (même si j'aime pas complètement la syntaxe adoptée un peu lourde à mon goût), mais elle est payante...

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    Finalement je révise sérieusement à la baisse ma première appréciation hâtive.
    J'ai essayé vite fait la bibliothèque avec le programme livré en exemple de tri, et voici mes observations:

    -Ca ne compile pas avec la STL de Visual ni avec STLport (conflits de surcharges de fonctions). Ca compile uniquement avec GCC et la STL par défaut.

    -L'algorithme de tri est à vue de nez 10000 fois plus lent (si si, dix mille!) que l'algo livré avec la STL. Je vois pas l'intérêt dans ces conditions à multithreader un projet.

    Edit: une faute d'orthographe!

  4. #4
    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
    Comparé à Boost.Thread, ca donne quoi?

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    Aucune idée. C'est aux fans de Boost à faire l'expérience s'ils le désirent.
    Y'a un algorithme de tri multithreadé dans boost? Il sait diviser les algos de la STL en threads?

  6. #6
    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
    Non, mais j'voulais dire faire une opération dans un thread pour chacun, par exemple, ce que ça donne niveau perfs.

  7. #7
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    Je sais pas non plus.
    De toute façon ça serait pas comparable.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 125
    Par défaut
    en dehors du tri je trouve la lib plutot sympas
    pour effectuer des traitements identiques sur les N objets


    Pour ce qui est du tri c'est pas terrible
    leur algo est pas adapte au multithread
    j'ai réécris une version pour 2 threads


    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
     
     
    #include <vector>
     
    #include <mptl.h>
    #include <mptl_algo.h>
    #include <mptl_qsort.h>
    #include <iterator>
    #include <iostream>
     
     
    #include <time.h>
    using namespace std;
     
     
    namespace mptl
    {
     
    template <typename Iterator>
    class MPTLqsort
    {
    private:
        Iterator first, last; // Intervalle
     
    public:
        // D´efinition des caract´eristiques
        typedef Iterator iterator1;
        typedef TwoIterators nIterators;
     
        // Constructeur de la classe MPTLqsort
        MPTLqsort(Iterator first_, Iterator last_): first(first_), last(last_) { }
        // Retourne les it´erateurs (pour rendre accessible
        // `a la librairie l’intervalle `a distribuer aux threads)
        Iterator getFirst1() { return first; }
        Iterator getLast1() { return last; }
        // Permet d’appliquer l’algorithme uniquement sur le sous-intervalle
        // [first , last ). Remarquons qu’il s’agit toujours du mˆeme
        // algorithme.
        void applyAlgorithm(Iterator first_, Iterator last_){ std::sort(first_,last_);}
     
    };
     
     
    template <typename Iterator>
    MPTLqsort<Iterator> qsort(Iterator first, Iterator last)
    {
        return MPTLqsort<Iterator>(first, last);
    }
     
    }
     
     
     
    int main (int argc, char * const argv[])
    {
        mptl::setNumThreads(2);
        std::vector<int> ::iterator it;
        int i=0;
        time_t deb,fin;
     
     
       std::vector<int> v1(100000000);
       std::vector<int> v2(100000000);
    	for(it=v1.begin();it!=v1.end();++it)
    	*it=i--;
     
     
     
        int pos=v1.size()/2;
     
        time(&deb);
    	//sort mptl par defaut
    	//mptl::sort(v1.begin(), v1.end());
     
    	// new sort
    	/*mptl::execute(mptl::qsort(v1.begin(),v1.end()));
        merge(v1.begin(),v1.begin()+pos,
              v1.begin()+pos,v1.end(),
              v2.begin());*/
     
        // sort STL
        //sort(v1.begin(), v1.end());
        time(&fin);
     
        cout<< "temps:"<<(fin-deb)<<endl;
    }

  9. #9
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    oui oui, y'a un coté sympa qui m'intéresse aussi
    Dommage que ça marche pas sous Visual ou STLport. Je n'ai pas vraiment cherché à comprendre ce qui collait pas.
    Dommage que l'algorithme de tri qui soit si lent.
    J'ai pas testé le reste.

    Sans avoir trop réfléchi au problème, j'aurais préféré une interface plus générale, un peu comme la Intel TBB mais sans sa lourdeur.

    C'est le genre de chose qu'aurait dû implémenter Boost, et qui m'aurait convaincu de l'adopter. Car j'ai l'impression que le multithread de Boost se cantonne à faire des wrappers de <pthread> et d'autres librairies, mais il va peut-être "réinventer la roue"...

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 125
    Par défaut
    le pb c'est qu il n y a pas de notion de mutex ou de conteneurs protégés
    j'ai de tres bon resultats sur mon AMD 64 X2

    niveau perfs ( Vista,Cygwin,gcc)
    STL: 45s
    MPTL: 155s
    avec mon tri: 38s (~23s pour le trie des 2 ensembles, ~15s pour le merge des 2 resultats

    c'est avant tout un pb d'algo y a certainement des tris adaptés au multithreads
    style baquets enfin si quelqun en connait un performant

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 16/06/2014, 17h08
  2. Existe-il une library Template?
    Par vperes dans le forum ASP.NET
    Réponses: 7
    Dernier message: 03/02/2007, 09h11
  3. Velocity Template/Tag library : comparaison ?
    Par joseph_p dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 09/11/2005, 13h47
  4. [XSLT] template
    Par demo dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 09/09/2002, 11h31

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