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

C++ Discussion :

Benchmarks multi-thread et SSE3


Sujet :

C++

  1. #1
    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 Benchmarks multi-thread et SSE3
    Bonjour

    Ca serait sympa si certains d'entre vous pouvaient exécuter ces benchmarks sur les machines multi-cores ou multi-processeurs sous Windows, afin de vérifier si les optimisations marchent bien.
    Chaque Bench ne prend que quelques minutes d'exécution. Evitez tout programme parasite dont l'exécution en parallèle fausserait les mesures de temps d'exécution (antivirus...).
    Il suffit de me poster le fichier texte résultant, qui contient les tableaux de mega-flops.

    C'est l'occasion de comparer les perfs de divers processeurs. Je vous afficherai les courbes comparatives...

    Voici 2 benchmarks pour la FFT:
    -mono-processus:
    http://www.ient.rwth-aachen.de/team/...FT_64_SSE3.zip
    -multi-processus:
    http://www.ient.rwth-aachen.de/team/...64_SSE3_MT.zip

    Je vous ferai faire également des benchs de multiplications matricielles.
    Merci par avance.

  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
    On m'a fait remarqué par message privé, qu'il était impossible de demander à des inconnus de lancer des exécutables.

    Le problème, c'est qu'il est assez délicat de compiler les benchmarks:
    - les exécutables à télécharger sont compilés avec le compilateur d'Intel, plus performant que VC ou GCC. Il faudrait donc télécharger sur mon site la bibliothèque compilée, faire un projet...
    - J'utilise des librairies en guise de référence, FFTW pour la transformée de Fourier, ATLAS pour l'algèbre linéaire. Il faut donc également installer correctement ces bibliothèques.

    J'ai donc jugé qu'il était beaucoup plus raisonnable de livrer des exécutables sur un plateau.
    Mais je comprends la remarque, et vous assure que ces exécutables sont sans virus aucun. En guise de ma bonne foi, j'avais déjà ouvert 2 discussions similaires y'a qqs mois ( http://www.developpez.net/forums/sho...ight=benchmark et http://www.developpez.net/forums/sho...ight=benchmark )

    Pour ceux qui voudrait tenter de compiler les benchs eux même, je les assisterai:
    -voici un lien où télécharger ma bibliothèque avec des libs pré-compilées pour Windows:
    http://www.ient.rwth-aachen.de/team/...al/genial.html
    -Et ci-joint le code du bench pour la FFT
    Fichiers attachés Fichiers attachés

  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
    Salut Charlemagne :-)

    voici les resultats, mais je ne les trouve pas coherents...
    peut-etre que je me trompe

    ma config est:
    Intel Core 2 Duo CPU
    T7700 2.40GHz
    2 GB RAM

    a+

    [EDIT] je vais faire les benchmarks sur le dual processeurs tres prochainement

  4. #4
    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
    Je confirme qu'on peut faire confiance a Charlemagne :-)

  5. #5
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Salut!
    J'espère donner une modeste contribution!

    Ma config:
    Core 2 Duo E6750 : 2.66 Mhz
    2 Go RAM
    Fichiers attachés Fichiers attachés

  6. #6
    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
    Merci à vous deux.
    Epsilon68, pas la peine de lancer les benchs sur ton 2xXeon, ça n'apportera pas grand chose. Si quelqu'un avait l'un de ces récents processeurs avec 4 coeurs, ça serait cool...

    Vos courbes sont très similaires (vos processeurs Core 2 Duo aussi...).
    remarques sur les résultats:
    -Dans l'ensemble mon implémentation de la FFT a perdu pas mal de terrain comparé à FFTW sur des benchs exécutés sur des Pentium4.
    -Quelques courbes auraient du être identiques entre les 2 fichiers (à la précision des mesures près), ce qui n'est pas le cas. incompréhensible...

    Si vous voulez bien voici 2 nouveaux benchmarks, avec une autre série de dimensions pour les grandes matrices, qui permettront de mieux voir la différence entre mono- et multi-processus. (Le multi-threading ne s'enclenche que pour les matrices plus grandes que 64x64)
    Ca sera probablement les derniers benchs FFT:
    -Mono-processus:
    http://www.ient.rwth-aachen.de/team/...FT_64_SSE3.zip
    -Multi-processus:
    http://www.ient.rwth-aachen.de/team/...64_SSE3_MT.zip

    Je vais vous afficher les courbes.
    Après ça, si vous le voulez bien, j'aurai des benchs pour la multiplication matricielle.

  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
    Ces 4 graphes comparent les perfs de mon implémentation avec FFTW sur le processeur de Poukill (un peu plus rapide que celui d'Epsilon68).

    Seule mon implémentation utilise le multi-threading mais uniquement pour les matrices à partir de 64x128. De toute façon, FFTW ne sait visiblement pas tirer vraiment profit du multi-threading d'après les benchs d'Intel. (http://www.intel.com/cd/software/pro...eng/266852.htm)

    4 Graphes:
    - 1D/2D
    - valeurs complexes/réelles.

    Sur chaque graphe, 6 courbes:
    - genial / fftw (estimate flag) / fftw(measure flag)
    - précision floats/doubles





  8. #8
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Et voilà !

    Hope it helps !
    Fichiers attachés Fichiers attachés

  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
    Merci, j'ai mis à jour les 2 derniers graphes.
    Ils correspondent aux mêmes séries de mesure que les benchs d'Intel sur http://www.intel.com/cd/software/pro...eng/266852.htm .
    Je les soupçonne d'avoir choisi des tailles de matrices qui les arrangent (et qui m'arrangent aussi) par rapport à FFTW...
    Certes mes graphes ne font pas de multi-threading pour FFTW, mais FFTW ne sait pas le gérer efficacement.

  10. #10
    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
    Ca vaut le coup que je re-execute les benchmarks?

  11. #11
    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
    Citation Envoyé par epsilon68 Voir le message
    Ca vaut le coup que je re-execute les benchmarks?
    Non ce n'est plus la peine pour la FFT.

    Par contre, vous pouvez tous y aller pour ces 2 benchs de produits matriciels.
    - Mono-processus:
    http://www.ient.rwth-aachen.de/team/...SSE3_48_15.zip
    -Multi-processus:
    http://www.ient.rwth-aachen.de/team/...3_MT_48_15.zip

    Merci

  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
    arrrgggg !!!

    je venais de le faire sur le dual intel Xeon CPU 3.4 GHz 2GB RAM
    (donc je les poste tant qu'a faire...)

    EDIT: soit je comprends rien, soit tu ne prends pas en compte le deuxieme processeur...

  13. #13
    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 executé les benchs des produits matriciels mais c'est pareil, le deuxieme processeur semble etre ignoré ...

  14. #14
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    OK.
    Voilà les benchs matriciels sur mon core 2 duo.

    A bientôt !
    Fichiers attachés Fichiers attachés

  15. #15
    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
    et les benchs matriciels sur mon core 2 duo

  16. #16
    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 : 50
    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
    Voici moi aussi des résultats, sur un Core 2 Quad 2.4Ghz

    Benchmarks.zip

    Petite précision : Pendant les tests, les processeurs étaient au mieux utilisés à 75%.
    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.

  17. #17
    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
    Merci à tous.
    Super! un Core 2 Quad!!!

    Y'a de bonnes et une mauvaise surprise.

    1) La mauvaise:
    Avec 4 processus sur le Core2Quad, ma FFT est plus lente qu'avec 2 processus sur le Core2Duo... Incompréhensible...
    Visiblement le phénomène est un peu similaire sur ce bench d'Intel (celui en 2D avec les processeurs Xeon http://www.intel.com/cd/software/pro...eng/266858.htm ). Mais Intel sait mieux gérer le phénomène à partir de grosse tailles).

    Je ne comprends pas. Vous savez que la FFT d'une matrice consiste à calculer les FFTs de chaque lignes puis de chaque colonnes.
    Mon algo se contente de dispatcher les lignes entre différents threads, puis les colonnes.
    Si vous avez des idées ou hypothèses pour expliquer le phénomène, je suis preneur...

    Loïc, si tu es d'accord, je te proposerai certainement quelques autres benchs rapides dans les jours à venir, pour tenter de l'isoler et de l'expliquer.

    Citation Envoyé par JolyLoic
    Petite précision : Pendant les tests, les processeurs étaient au mieux utilisés à 75%.
    Dans le gestionnaire de tâches? ou bien le taux réel d'utilisation du processeur (que peuvent donner certains programmes spécialisés)?
    -Si c'est le gestionnaire de tâche, je ne comprends pas. Il devrait mettre 100%, non?
    -Si c'est le taux réel d'utilisation, je ne me rappelle plus des ordres de grandeurs que j'obtenais y'a quelques temps (il faudrait éventuellement que je re-mesure) mais 75% me paraît très très correct.

    2) Les bonnes surprises
    Le multi-threading fonctionne pas trop mal sur mon algo de multiplication matricielle, que ce soit sur un core2Duo que sur le Quad.
    Les allures des courbes sont très similaire d'un processeur à l'autre (à part leur amplitude).
    Il y a quelques couacs:
    - baisse de perfs pour des matrices de taille 256, que je ne m'explique pas encore.
    - perf moins bonne sur le Quad que sur le Duo pour les matrices de taille 100: probablement une question de réglage. Ce n'est pas évident de faire du tunning sans avoir le processeur sous la main, mais je vais voir quand même ce que je paux faire.

    Le processeur de Poukill est environ 15% plus rapide que celui d'Epsilon68.
    En mono processus, les amplitudes des courbes du Core2Duo d'Epsilon68, sont quasi identiques avec celles du Core2Quad de Loïc. Je vous propose donc de superposer leurs courbes dans des graphes. (Poukill saura qu'il est environ 15% plus rapide en mono et bi-processus)

    Maintenant, il serait intéressant de comparer avec la bibliothèque ATLAS.
    Le problème c'est qu'il faut que vous la compiliez vous même, sur vos ordis respectifs, car ATLAS s'optimise en fonction du processeur présent (ATLAS=Automatically Tunned...)

    Ca serait sympa que l'un ou l'autre parmi vous tente l'expérience (en particullier sur le Quad )
    Je passerai alors les sources de mon bench et je vous aiderai pour la compilation.
    ATLAS (http://math-atlas.sourceforge.net/) ne se laisse compiler qu'avec GCC. Sous Windows il faut donc installer Cygwin (http://www.cygwin.com/), mais l'OS m'importe peu.

    Avec des matrices de floats:

    Avec des matrices de doubles:

  18. #18
    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 : 50
    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 Charlemagne Voir le message
    Si vous avez des idées ou hypothèses pour expliquer le phénomène, je suis preneur...
    Aucune idée, est comme j'ai la machine depuis 3j, et que j'ai plus fait de développement mathématique depuis un bout de temps, ça risque pas de venir...

    Citation Envoyé par Charlemagne Voir le message
    Loïc, si tu es d'accord, je te proposerai certainement quelques autres benchs rapides dans les jours à venir, pour tenter de l'isoler et de l'expliquer.
    Pas de pb, tant que ça reste simple à lancer...

    Citation Envoyé par Charlemagne Voir le message
    Dans le gestionnaire de tâches? ou bien le taux réel d'utilisation du processeur (que peuvent donner certains programmes spécialisés)?
    -Si c'est le gestionnaire de tâche, je ne comprends pas. Il devrait mettre 100%, non?
    Gestionnaire de tâches ou process explorer. Sous Vista.

    Citation Envoyé par Charlemagne Voir le message
    Maintenant, il serait intéressant de comparer avec la bibliothèque ATLAS.
    Le problème c'est qu'il faut que vous la compiliez vous même, sur vos ordis respectifs, car ATLAS s'optimise en fonction du processeur présent (ATLAS=Automatically Tunned...)

    Ca serait sympa que l'un ou l'autre parmi vous tente l'expérience (en particullier sur le Quad )
    Ah là là, on lui donne ça... et il le prend...

    Citation Envoyé par Charlemagne Voir le message
    Je passerai alors les sources de mon bench et je vous aiderai pour la compilation.
    ATLAS (http://math-atlas.sourceforge.net/) ne se laisse compiler qu'avec GCC. Sous Windows il faut donc installer Cygwin (http://www.cygwin.com/), mais l'OS m'importe peu.
    Ca marche aussi avec MinGw ? Il m'avait semblé plus simple à maîtriser que cygwin...
    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.

  19. #19
    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
    Citation Envoyé par JolyLoic
    Ca marche aussi avec MinGw ? Il m'avait semblé plus simple à maîtriser que cygwin...
    Merci mille fois!
    Je ne connais pas bien MinGW. Ca doit être possible d'une manière ou d'une autre avec MinGW.
    Je crois que le gros avantage de Cygwin, c'est son Shell et tous les programmes annexes (make,...) . A prori c'est 100x plus pratique avec Cygwin. C'est sous cygwin que j'avais compilé ATLAS 3.6 sans aucun problème.

  20. #20
    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 suis en train d'installer la dernière version d'ATLAS (3.8.1) avec Cygwin: c'est simplissime. La version 3.8 est visiblement sortie depuis peu.
    (J'avais y'a plusieurs mois tenté d'installer une version 3.7.X, et ça ne marchait pas du tout. Ce n'est sans doute pas un hasard si les version 3.7.X ne sont plus proposées au téléchargement...)

    Il faut bien suivre les instructions du fichier d'installation.
    Voici en bref, les commandes du shell:
    > cd ATLAS
    > mkdir mon_architecture
    > cd mon_architecture
    > ../configure --nof77
    > make
    > s'armer de patience... aller regarder la télé...

    Je n'ai eu aucun problème. J'imagine qu'il faut quand même bien faire attention à installer certains modules. Pas la peine de faire une installation complète. L'installation par défaut avec les modules suivants devrait suffire
    -GCC (ça coule de source...)
    -make
    -libtool (?)
    -automake (?)

    ATLAS reconnait normalement automatiquement la configuration de l'ordi.
    J'espère qu'il reconnait les récents processeurs du genre Core2Quad

Discussions similaires

  1. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00
  2. Réponses: 2
    Dernier message: 15/05/2004, 18h33
  3. Réponses: 16
    Dernier message: 30/01/2004, 11h05
  4. [VB6][active x] faire du multi-thread avec vb
    Par pecheur dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 20/05/2003, 12h01
  5. [Kylix] exception qtinft.dll et multi-threading
    Par leclaudio25 dans le forum EDI
    Réponses: 3
    Dernier message: 27/03/2003, 18h09

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