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 :

lib matrice portable


Sujet :

C++

  1. #1
    Membre confirmé Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Par défaut lib matrice portable
    Bonjour,

    Les posts ont deja traité de librairie de calcul matricielle, specilament pour les matrices de grande taille.

    Dans mon cas mes matrices sont au max 3x3 et je ne leur demande pas autre chose que de contenir des doubles et de me sortir les valeurs et vecteurs propre. Et je compte garder la portabilité de mon dode Windows/Unix (ce qui semble exclure Atlas maheureusement a moins de fournir avec mon code un mode d'emploi détaillé pour son install sous windows).

    Comprenez moi bien, c'est calcul se portent sur un tres grand nombre de matrice et la moindre milliseconde gagnée est non négligeable...

    Merci

  2. #2
    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
    Et tu a regardé du côté de MTL, Blitz++, ... ?

  3. #3
    Membre confirmé Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Par défaut
    Oui, les noms reviennent régulièrement sur le forum, je voudrais en fait savoir laquelle est la plus performante dans mon cas. Je n'ai pas besoin d'une lib vraiment générique, je pense qu'au contraire une petite lib specialisé sera plus performante, non (vs par exemple la MTL)?

  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
    Pourquoi pas programmer toi même.
    -Ne fais pas de boucles
    -utilise des variables pour sauvegarder les accès mémoires
    -SSE SSE2 SSE3

  5. #5
    Membre confirmé Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Par défaut
    SSE je ne vois pas.

  6. #6
    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
    Utilisation des instructions parallèles du processeur.

  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
    SSE,SSE2,SSE3 sont les successeurs des instructions MMX.
    On ne peut pas parler d'optimisations si on n'utilise pas les instructions SIMD du processeur.

    Les instructions SSE1(Pentium 3) permettent entre autres de manipuler 4 floats à la fois, SSE2 (Pentium 4) de manipuler 2 doubles à la fois.

  8. #8
    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
    Et bientôt SSE4

  9. #9
    Membre confirmé Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Par défaut
    vous avez loupé le SSE3

  10. #10
    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
    Et bientôt SSE4
    J'ai été déçu par SSE3. Ca sert pas à grand chose comparativement à SSE/SSE2.
    Je crois que SSE4 n'apportera environ qu'une douzaine d'instructions nouvelles, mais je sais pas lesquelles.
    Je crois que SSE3 et SSE4 sont surtout commerciaux, pour se démarquer temporairement d'AMD. Et puis les programmes utilisant SSE3 ne sont pas légions...

  11. #11
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    Blitz++ : ancêtre de référence. boost.ublas challenger. Leur portabilité exige des compilos "récents" (i.e. pas ceux qui ont pratiquement 9 ans ...). Ils ont des types tinyArray qui correspondent à des matrices non redimensionnables, à la taille connue lors de la compilation.

    MTL, plus maintenue.

    ATLAS. Si elle focalise sur les SSE & cie, je ne la qualifierai pas de portable. Si elle ne fait qu'exploiter le pipeline d'une archi bien précise. Alors c'est jouable, je pense. Je crois qu'elle a une API C par contre. C'est dommage quand on voit que Blitz++ et boost.ublas savent offrir une expressivité quasi mathématique aux objets matriciels, et ce sans perte de perf.

    Autre piste peut-être. Il n'y a pas des routines cablées dans les procs graphiques pour gérer les matrices 3x3 et les 4x4 ?
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  12. #12
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Autre piste peut-être. Il n'y a pas des routines cablées dans les procs graphiques pour gérer les matrices 3x3 et les 4x4 ?
    Pour les valeurs / vecteurs propres, pas vraiment non

    On peut faire faire des choses marrantes aux GPUs actuels, mais globalement pour ce genre de question je pense que c'est une mauvaise piste.

  13. #13
    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
    ATLAS. Si elle focalise sur les SSE & cie, je ne la qualifierai pas de portable. Si elle ne fait qu'exploiter le pipeline d'une archi bien précise. Alors c'est jouable, je pense. Je crois qu'elle a une API C par contre. C'est dommage quand on voit que Blitz++ et boost.ublas savent offrir une expressivité quasi mathématique aux objets matriciels, et ce sans perte de perf.
    ATLAS se laisse compiler sous de nombreux systèmes (SSE, Altivec) et s'adapte lors de l'installation à ceux ci (mémoire cache...), donc elle est portable.
    Mais la librairie ATLAS est lente pour les très petites matrices (toute proportion gardée) à cause des nombreux tests et appels de fonction qu'elle fait avant d'attaquer la multiplication proprement dite. Maintenant c'est pas sûr que Blitz et Co soient plus rapides pour les très petites tailles.
    Certes je déteste l'interface BLAS moi aussi, mais je crois que pour les fans de Boost que vous êtes, je crois que UBLAS sait interfacer ATLAS.

    De toute facon le plus rapide qu'on puisse faire consiste à programmer une version spécialisée pour chaque taille de matrice. C'est pas la mer à boire pour de si petites matrices.
    -pas de boucles, pas de tests
    -rétension des valeurs dans les registres
    -SIMD

Discussions similaires

  1. Quelle lib de matrice C++ ?
    Par codnob dans le forum API graphiques
    Réponses: 9
    Dernier message: 30/12/2013, 13h53
  2. Lib de jeux 2d portable en java
    Par max_skel dans le forum Débuter
    Réponses: 2
    Dernier message: 19/11/2011, 19h05
  3. Réponses: 11
    Dernier message: 20/09/2010, 11h47
  4. Choix d'un EDI pour la 3D (Open GL, Portable)
    Par Riko dans le forum OpenGL
    Réponses: 6
    Dernier message: 01/08/2002, 12h25
  5. Comment définir le type matrice ?
    Par charly dans le forum Langage
    Réponses: 7
    Dernier message: 15/06/2002, 21h01

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