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 :

Class Vector et calcul


Sujet :

SL & STL C++

  1. #1
    Membre éprouvé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Points : 1 256
    Points
    1 256
    Par défaut Class Vector et calcul
    Bonjour,

    j'implémente un algorithme de calcul et je voulais savoir si la class Vector du STL optimise le temps de calcul ou que je doit implémenter ma propre classe template Vector (plus allégée que celle du la STL) ?

    Merci de m'éclairer,

    ++
    AlloSchool, votre école sur internet.

  2. #2
    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
    Points : 4 625
    Points
    4 625
    Par défaut
    Il n'y a pas de classe Vector dans la STL.
    Il y a vector, mais ça n'a rien à voir avec le calcul.
    Boost ftw

  3. #3
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    pour la performance des calculs, il est possible, mais très difficile de faire mieux que la lib <algorithm> de la STL (cf. ma signature) qui utilise les conteneurs de cette même STL (dont la classe vecteur fait partie).
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  4. #4
    Membre éprouvé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Points : 1 256
    Points
    1 256
    Par défaut
    Merci pour vos réponse,

    Je vais creuser cela, et je vous tiens au courant.
    ++
    AlloSchool, votre école sur internet.

  5. #5
    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 : 49
    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
    Points : 16 213
    Points
    16 213
    Par défaut
    Pour des calculs numériques, la classe std::valarray était initialement prévue pour ce genre de choses (en particulier par un aliasing réduit), mais par manque d'attention, et est assez peu populaire actuellement, et il n'est pas certain que l'implémentation livrée avec ton compilateur soit optimale.

    std::vector est une classe générique, qui a de bonnes performances globales, mais qui n'est pas spécialisée pour du calcul numérique.

    Il existe aussi de nombreuses bibliothèques dédiées au calcul numérique (MTL, Blitz++,...).

    Il faudrait en savoir plus sur ce que tu souhaites faire pour pouvoir mieux te guider.
    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.

  6. #6
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    A noter que les compilateurs ne vont pas vraiment faire d'optimisation avec des std::vector...

    Par exemple:
    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    std::vector<float> vec1;
    std::vector<float> vec2;
    std::vector<float> vec3;
     
    std::vector<float> result;
    for (int i = 0; (i < length); ++i) 
       result.push_back(vec1[i] * vec2[i] + vec3[i]);
    ne sera pas beaucoup optimisé...

    alors que:
    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    float[] vec1;
    float[] vec2;
    float[] vec3;
     
    float[] result;
    for (int i = 0; (i < length); ++i) 
       result[i] = vec1[i] * vec2[i] + vec3[i];
    Va utiliser les instructions SSE....
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  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
    Points : 460
    Points
    460
    Par défaut
    Citation Envoyé par nicroman Voir le message
    [/code]
    ne sera pas beaucoup optimisé...

    alors que:
    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    float[] vec1;
    float[] vec2;
    float[] vec3;
     
    float[] result;
    for (int i = 0; (i < length); ++i) 
       result[i] = vec1[i] * vec2[i] + vec3[i];
    Va utiliser les instructions SSE....
    J'ai pas essayé ce code sur mes compilos favoris, mais je doute qu'ils utilisent des instructions SSE. Tu peux nous montrer le code assembleur généré par ton compilo, stp. (Donne moi également le petit programme de test en entier stp, ainsi que les options de compilation)

  8. #8
    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
    Points : 4 625
    Points
    4 625
    Par défaut
    Il va surtout pas compiler, ce code.
    Et c'est normal que ce soit différent, push_back n'est pas la même chose que machin[i] =
    Boost ftw

  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
    Points : 460
    Points
    460
    Par défaut
    Citation Envoyé par loufoque Voir le message
    Il va surtout pas compiler, ce code.
    Et c'est normal que ce soit différent, push_back n'est pas la même chose que machin[i] =
    Oui, effectivement, j'avais passé sous silence les déclarations erronées.
    Et il compare un push_back avec un tableau[i], j'avais pas fait de commentaire non plus.

    Ce qui m'intéresse plus, c'est l'affirmation "Va utiliser les instructions SSE....".
    Je voudrais des explications.

  10. #10
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860

Discussions similaires

  1. problème class vector
    Par Pe04 dans le forum SL & STL
    Réponses: 2
    Dernier message: 27/02/2006, 10h45
  2. "class" vector à indice variable et fonction membr
    Par icetechnik dans le forum C++
    Réponses: 14
    Dernier message: 25/11/2005, 23h46
  3. utilisation classe vector et supression de doublons
    Par vandevere dans le forum SL & STL
    Réponses: 1
    Dernier message: 30/06/2005, 11h17
  4. [Perf]Htable vs class Vector
    Par nicoo dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 14/11/2004, 10h11
  5. [Vector] classe Vector et exception
    Par Nanoua dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 23/04/2004, 12h37

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