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 :

Matrice, template, optimisation.


Sujet :

C++

  1. #1
    Membre �clair�

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    356
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 356
    Par d�faut Matrice, template, optimisation.
    Bonjour � tous, j'essaie de cr�er une classe Matrice la plus rapide possible.

    Je vous demande donc quelques conseils.

    Quelques informations :

    -Les �l�ments de ma matrice sont contigus en m�moire (j'ai un T* et non un T**).
    -Le nombre de ligne et de colonnes est connus � la compilation (ce sont des templates)

    Quelques questions :

    En utilisant les templates, et en particulier std::is_pod, j'ai pens� qu'on pourrait optimiser les copies.

    -Comment optimiser la cr�ation de la matrice ou tous les �l�ments sont � une valeur donn�e et les �l�ments des pod ? (memset marche que pour des taille d'un octet).
    -utiliser memcpy pour les copies si T est un POD.
    -Existe-il pour les matrices de mani�re non intuitive d'effectuer des op�rations pour les acc�l�rer (multiplication de matrice, mise � une puissance d'une matrice, ...). Par exemple, lors d'une mise � une puissance, puisque la taille est connue � la compilation, d�compos� les facteurs de chaque op�ration � la compilation ?
    -Autres astuces ?

    Merci.

    SVP, ne dites pas qu'il faut faire quelque chose qui marche avant d'optimiser.

  2. #2
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 45
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par d�faut
    Citation Envoy� par NoIdea Voir le message
    -Les �l�ments de ma matrice sont contigus en m�moire (j'ai un T* et non un T**).
    Tu peux avoir un T** et un stockage continue, cf Pointeur de Iliffe.

    Citation Envoy� par NoIdea Voir le message
    En utilisant les templates, et en particulier std::is_pod, j'ai pens� qu'on pourrait optimiser les copies.
    std::copy fait deja ca tout seul.

    Citation Envoy� par NoIdea Voir le message
    -Existe-il pour les matrices de mani�re non intuitive d'effectuer des op�rations pour les acc�l�rer (multiplication de matrice, mise � une puissance d'une matrice, ...). Par exemple, lors d'une mise � une puissance, puisque la taille est connue � la compilation, d�compos� les facteurs de chaque op�ration � la compilation ?
    Plein, des theses entieres sont faites dessus tout les ans. Je te donne 6 mois avant d'arreter de vouloir faire mieux que BLAS/LAPACK.

    Citation Envoy� par NoIdea Voir le message
    -Autres astuces ?
    Ne reinvente pas la roue :o

  3. #3
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    D�tails du profil
    Informations personnelles :
    �ge : 35
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par d�faut
    Citation Envoy� par NoIdea Voir le message
    Bonjour � tous, j'essaie de cr�er une classe Matrice la plus rapide possible.

    Je vous demande donc quelques conseils.
    Ne le fais pas.

  4. #4
    Invit�
    Invit�(e)
    Par d�faut
    Bonjour,

    La fa�on d'optimiser (et de stocker, d'ailleurs) va beaucoup d�pendre du type de donn�es que tu auras dans tes matrices, et du type de traitements que tu entends leur infliger.

    Quelques questions qu'il faut te poser, sur la nature des donn�es :

    1- quelle est la taille de tes matrices? si elles sont � peu pr�s carr�es, et de petite dimension, les m�thodes compliqu�es d'optimisation sont g�n�ralement peu utiles.
    2- tes matrices sont elles pleines ou creuses ?(les creuses ca ne se stocke pas pareil, et donc ca ne se traite pas pareil) Ont elle des caract�ristiques particuli�res (genre beaucoup de matrices carr�es, ou sym�triques, ou des coefficients born�s, ou...)
    3- tes matrices sont elles de "vraies" matrices, avec une forte �quivalence entre lignes et colonnes, ou sont elles des tableaux de donn�es (par exemple avec des questions en colonnes et des individus en ligne...)? Dans le second cas, ce qui compte c'est g�n�ralement davantage de stocker les donn�es dans le "bon ordre" que d'utiliser des algorithmes g�n�riques.
    4- tes donn�es sont elles exactes, ou de nature statistique? Dans le second cas, comme tu peux remplacer une matrice par une autre matrice "voisine", tu vas utiliser toutes sortes d'algorithmes particuliers.

    Sur les traitements, si tu fais de l'alg�bre "de base" (additions, produits, ...) sur un grand nombre de matrices, les principal facteur d'optimisation sont d'�viter les copies interm�diaires, et le stockage si tu as des matrices creuses. Si tu fais des stats, et que tu inverses ou que tu diagonalises, alors les consid�rations de stabilit� du calcul prendront toujours le pas sur la vitesse (traiter vite mais faux n'est pas une bonne id�e).

    Pour une bonne introduction g�n�rale, et des exemples dans des domaines vari�s, essaye Numerical Recipes in C++, il y a beaucoup de choses (pas juste sur les matrices), �a ne demande pas un niveau de maths trop �lev�, c'est tr�s bien �crit, et il y a des exemples. Cherche la 3eme �dition (le bouquin noir) plut�t que la seconde (le rouge), il y a pas mal de choses en plus.

    Francois

  5. #5
    Membre Expert
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Par d�faut
    Bonjour,

    Citation Envoy� par NoIdea Voir le message
    Comment optimiser la cr�ation de la matrice ou tous les �l�ments sont � une valeur donn�e et les �l�ments des pod ?
    Ne stocker la valeur qu'une seule fois dans un scalaire.

    Citation Envoy� par NoIdea Voir le message
    Existe-il pour les matrices de mani�re non intuitive d'effectuer des op�rations pour les acc�l�rer (multiplication de matrice, mise � une puissance d'une matrice, ...).
    Regarde l'algorithme de Strassen. Attention � trouver un bon compromis entre stabilit� et rapidit� � chaque fois.

    Plus g�n�ralement, pour aller vite il y a le parall�lisme... voir le gpgpu puisque c'est � la mode... voir de la parall�lisation hybride puisque c'est un sujet de recherche actuel. Un autre moyen consiste � t'acheter un supercalculateur...

  6. #6
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 45
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par d�faut
    Citation Envoy� par Aleph69 Voir le message
    Regarde l'algorithme de Strassen. Attention � trouver un bon compromis entre stabilit� et rapidit� � chaque fois.
    Strassen est impracticable en geenral car tres complexes a coder. Il n'as d'interet que pour des matrices denses de tres grande tailles.

    Citation Envoy� par Aleph69 Voir le message
    Plus g�n�ralement, pour aller vite il y a le parall�lisme... voir le gpgpu puisque c'est � la mode... voir de la parall�lisation hybride puisque c'est un sujet de recherche actuel. Un autre moyen consiste � t'acheter un supercalculateur...
    Cooli sur les GPUs. Deja SIMD+openMP et on en reparle.

  7. #7
    Membre Expert
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Par d�faut
    Bonjour Joel,

    concernant les tr�s petites matrices, j'�tais tomb� l�-dessus si �a t'int�resse :
    http://www.csd.uwo.ca/~eschost/publi...s/DrIsSc09.pdf

    Sinon, pour Strassen-Winograd , le probl�me c'est la stabilit� num�rique. C'est surtout pour cela qu'on ne l'utilise presque jamais. Dans le cas contraire, la complexit� de l'impl�mentation n'arr�terait personne � mon avis.

  8. #8
    Invit�
    Invit�(e)
    Par d�faut
    Citation Envoy� par Aleph69 Voir le message
    Bonjour Joel,
    Sinon, pour Strassen-Winograd , le probl�me c'est la stabilit� num�rique. C'est surtout pour cela qu'on ne l'utilise presque jamais. Dans le cas contraire, la complexit� de l'impl�mentation n'arr�terait personne � mon avis.
    Pas seulement. La complexit� de l'algorithme se traduit g�n�ralement par une augmentation du coefficient du terme dominant, ou des termes juste en dessous. Sur de grosses matrices, l'am�lioration est r�elle, sur de petites, il faut faire le calcul.

    C'est d'ailleurs pour cela qu'on a un probl�me de stabilit�. L'algorithme de Strassen est exact, il n'y a donc en th�orie pas que probl�me de stabilit�, si on utilise des mantisses suffisantes, ou des m�thodes adapt�es, mais celles ci se traduisent pas une augmentation des coefficients dominants, qui repoussent les conditions d'utilisation de la m�thode.

    Ensuite, sur de petites matrices, des optimisations "machine" entrent en ligne de compte, qui font qu'un algorithme plus efficace sur le papier ne l'est pas toujours en pratique.

    Francois
    Derni�re modification par Invit� ; 17/02/2011 � 12h06.

  9. #9
    Membre Expert
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Par d�faut
    Bonjour Fran�ois,

    Citation Envoy� par fcharton Voir le message
    Pas seulement. La complexit� de l'algorithme se traduit g�n�ralement par une augmentation du coefficient du terme dominant, ou des termes juste en dessous. Sur de grosses matrices, l'am�lioration est r�elle, sur de petites, il faut faire le calcul.
    Il y a un malentendu sur le terme de complexit�. Je n'�voquais pas la complexit� algorithmique mais la "complexit� d'impl�mentation" c'est-�-dire la difficult� � programmer l'algorithme. Je reconnais volontiers que ma phrase �tait ambigue et que j'aurais d� utiliser un vocabulaire plus clair. En particulier, je ne remets pas du tout en cause ce qu'a dit Joel sur les petites/moyennes matrices.

    Citation Envoy� par fcharton Voir le message
    C'est d'ailleurs pour cela qu'on a un probl�me de stabilit�. L'algorithme de Strassen est exact, il n'y a donc en th�orie pas que probl�me de stabilit�, si on utilise des mantisses suffisantes, ou des m�thodes adapt�es, mais celles ci se traduisent pas une augmentation des coefficients dominants, qui repoussent les conditions d'utilisation de la m�thode.
    L'algorithme de Strassen n'est pas backward stable (th�orie).

  10. #10
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 45
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par d�faut
    surtout deja avant de strassen, je pense que faire bu blocking et du loop unrolling proprement en SIMD suffit largement pour les matrices de tailles raissonable.

Discussions similaires

  1. R�ponses: 8
    Dernier message: 29/12/2007, 18h25
  2. R�ponses: 1
    Dernier message: 24/05/2007, 14h46
  3. template matrice g�n�rique
    Par troussepoil dans le forum Langage
    R�ponses: 7
    Dernier message: 12/03/2007, 11h45
  4. [Matrice]Optimisation de la multiplication
    Par progfou dans le forum Algorithmes et structures de donn�es
    R�ponses: 3
    Dernier message: 27/06/2006, 18h11
  5. Créer un type matrice avec des templates
    Par souading3000 dans le forum C++
    R�ponses: 2
    Dernier message: 15/06/2006, 11h24

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