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

SL & STL C++ Discussion :

[STL] valarray et SIMD


Sujet :

SL & STL C++

  1. #1
    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 [STL] valarray et SIMD
    Bonjour, sur cette article
    http://www.pixelglow.com/macstl/valarray/
    il explique que valarray peut utiliser les instruction SIMD des processeur.
    N'ayant pas trouvé grand chose dessus, je me demande si la STL de VC++ fait de même ainsi que celle de GCC??

    merci

  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
    Très franchement, j'en doute fort.
    Si tu veux en avoir le coeur net, tu compiles un petit programme de test en mode release, et tu regardes le code généré...

    Et puis visiblement, le lien que tu donnes est une implémentation des valarrays spécialement conçue pour les instruction SIMD.
    De toute façon les valarrays (ni la STL de façon générale) ne sont pas pratiques pour les calculs numériques, il vaut mieux utiliser une librairie spécialement conçue pour ça.

  3. #3
    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 Charlemagne
    Très franchement, j'en doute fort.
    Si tu veux en avoir le coeur net, tu compiles un petit programme de test en mode release, et tu regardes le code généré...

    Et puis visiblement, le lien que tu donnes est une implémentation des valarrays spécialement conçue pour les instruction SIMD.
    De toute façon les valarrays (ni la STL de façon générale) ne sont pas pratiques pour les calculs numériques, il vaut mieux utiliser une librairie spécialement conçue pour ça.
    ok merci.
    Juste pour info, tu aurais des nom de quelques'une de ces lib?

  4. #4
    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
    Les librairies utilisant les instructions SIMD ne sont pas légions. Je connais celles-ci:
    -ATLAS: algèbre linéaire (Blas, Lapack)
    -FFTW: transformées de Fourier
    -la mienne: http://www.ient.rwth-aachen.de/team/...al/genial.html

  5. #5
    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
    merci.

  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 Charlemagne
    Très franchement, j'en doute fort.
    Si tu veux en avoir le coeur net, tu compiles un petit programme de test en mode release, et tu regardes le code généré...
    J'ai regardé un peu plus valarray qui as l'air trés pratique mais qui n'est pas totalement bien defini...
    Je vais me faire un petit prog pour voir, par contre je ne vois pas comment savoir si il fait du SIMD aprés avoir généré le code ??


    Sinon, d'autre personne aurai un avis sur les valarray?

    merci

  7. #7
    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
    Ben tu regardes le code généré et tu verras bien...

  8. #8
    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
    Ben tu regardes le code généré et tu verras bien...
    je regarde le code assembleur? ben je vois pas trop comment en assembleur je peut voir si il fait du SIMD...
    Merci

  9. #9
    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
    Ben tu vois bien si ça utilise des instructions MMX, SSE ou SSE2...

  10. #10
    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 Charlemagne
    Les librairies utilisant les instructions SIMD ne sont pas légions. Je connais celles-ci:
    -ATLAS: algèbre linéaire (Blas, Lapack)
    -FFTW: transformées de Fourier
    -la mienne: http://www.ient.rwth-aachen.de/team/...al/genial.html
    Dans le même genre, toujours basées sur BLAS et LAPACK :
    - MKL (Intel)
    - ACML (AMD)

  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 Miles
    - MKL (Intel)
    Je connaissais, mais c'est payant je crois bien. C'est pour cette raison que je ne l'ai pas mentionnée. Prétend sur son site (benchs à l'appui) être plus rapide que FFTW et ATLAS, principalement sur des systèmes multi-processeurs derniers cris.
    Citation Envoyé par Miles
    - ACML (AMD)
    Je l'ai déjà croisé par hasard (je me rappelais vraiment plus du tout du nom). Payante?

    J'imagine que pour ces 2 bibliothèques les sources ne sont malheureusement pas open source, et qu'elle ne tournent que sur des processeurs compatibles x86.

  12. #12
    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
    Pour repondre a ma queqtion. Ben non valarray de vc2005 ne fait pas de SIMD. De plus, elle n'as pas l'air de faire ce que je pensais..
    remplacer par le compilot par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for (int i=0;i<nb_element:++i)
      Vres[i]=V1[i]*V2[i]+V3[i];
    merci pour les lib.

  13. #13
    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
    Enfin c'est déjà pas mal, il te fait de la fusion de boucles...
    Après une boucle comme ça, ça se vectorise automatiquement sans problème a priori.

  14. #14
    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
    Enfin c'est déjà pas mal, il te fait de la fusion de boucles...
    Après une boucle comme ça, ça se vectorise automatiquement sans problème a priori.
    je pensais qu'il faisait ça. mais vu le code il ne le fait pas. Il utilise des temp pour les operation

  15. #15
    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
    Il est vraissemblable qu'il faille changer les options de compilations pour lui indiquer qu'il a le droit d'ajouter des instructions SIMD (vive la compatibilité i386...)

  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
    Citation Envoyé par Miles
    Il est vraissemblable qu'il faille changer les options de compilations pour lui indiquer qu'il a le droit d'ajouter des instructions SIMD (vive la compatibilité i386...)
    j'ai essayé en modifiant les option de visual. mais cela n'as rien changé

  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
    Citation Envoyé par Miles
    Il est vraissemblable qu'il faille changer les options de compilations pour lui indiquer qu'il a le droit d'ajouter des instructions SIMD (vive la compatibilité i386...)
    Ca suffira malheureusement pas. Les compilos ne sont pas "magiques". Au mieux il va intégrer ça ou là une instruction SIMD. Y'a plusieurs raisons à ça, en particulier ils ne peuvent pas juger de l'alignement mémoire, et dans le doute ils s'abstiennent de vectorialiser. De plus la vectorisation automatique ne fonctionne qu'avec des motifs imposés dans le code.
    Le plus pratique et le plus contrôlable, c'est encore d'utiliser les fonctions intrasics d'Intel.

    Je ne connais pas d'implémentation de la STL qui utilise les instructions SIMD, ceci dit c'est pas vraiment les containers et les algo de la STL qui pourraient vraiment tirer parti des SIMD. Il faut prendre la STL pour ce qu'elle est: un ensemble d'algo génériques. Libre à nous de les utiliser sur des containers utilisant les SIMD.

    Et j'aime à peu près tout dans la STL (je commence certes à la trouver vieille et incomplète), à l'exception notable des valarrays qui sont en dessous de tout pour le calcul numérique. Je comprends pas pourquoi des gens ont perdu leur temps à en faire une implémentation SIMD...

    PS:
    j'ai essayé en modifiant les option de visual. mais cela n'as rien changé
    M'étonne pas

  18. #18
    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
    Parfois le compilo peut tout de même optimiser (en revanche, je ne sais pas ce que ça vaut). Par exemple ICC9.1 et 10 vectorisent certains algos de la STL (version GNU).

  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
    Citation Envoyé par Charlemagne
    . Il faut prendre la STL pour ce qu'elle est: un ensemble d'algo génériques. Libre à nous de les utiliser sur des containers utilisant les SIMD.
    Toute facon y aurai que le vector qui pourrai utiliser les SIMD.


    Citation Envoyé par Charlemagne
    Et j'aime à peu près tout dans la STL (je commence certes à la trouver vieille et incomplète), à l'exception notable des valarrays qui sont en dessous de tout pour le calcul numérique. Je comprends pas pourquoi des gens ont perdu leur temps à en faire une implémentation SIMD...
    Je trouve le concept super intéressant, pour ecrire un code lisible. Mais aprés recherche, c'est un truc que personne ne veut prendre la responsabilité de le définir. Et je pense que c'est la raison de sa faible efficacité. Aprés je pense que ça doit être un peu plus rapide qu'un vector (faut que je teste). Cela donne au moins une solution simple pour faire quelque calcul.

    Par contre, je me demande si il n'existe pas des implémentations pseudo-STL qui utiliserai OpenMP ( ou autre)

  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
    Citation Envoyé par Mongaulois
    Par contre, je me demande si il n'existe pas des implémentations pseudo-STL qui utiliserai OpenMP ( ou autre)
    Ma mienne...

    OpenMP n'a rien à voir avec les instructions SIMD "vectorielles", mais ça fait du calcul multi-thread "parallèle" (je fais la distinction calculs vectoriels/parallèles, je ne sais pas si c'est la vrai dénomination).
    Pour remplacer avantageusement OpenMP (qui ressemble à du mauvais C, comme dirait JP Coffe, c'est de la ...) par des algorithmes dans le style de la STL, y'a ma bibliothèque ou Intel TBB (dont la version 2 est devenue open source y'a qqs jours à peine)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. problème de références _ptr dans une map STL
    Par Mr_Tyu dans le forum CORBA
    Réponses: 1
    Dernier message: 10/08/2004, 10h39
  2. STL::vector crash a l"execution
    Par sebA dans le forum MFC
    Réponses: 2
    Dernier message: 16/06/2004, 16h36
  3. Probleme de Compilation de la STL
    Par stoluup dans le forum MFC
    Réponses: 3
    Dernier message: 05/05/2004, 17h25
  4. STL : std::set problème avec insert ...
    Par Big K. dans le forum MFC
    Réponses: 13
    Dernier message: 08/11/2003, 01h02
  5. [Kylix] [BCB] pb avec la STL
    Par pykoon dans le forum EDI
    Réponses: 1
    Dernier message: 29/12/2002, 12h56

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