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

Langage C++ Discussion :

tableaux / vector, performance


Sujet :

Langage C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 27
    Points : 18
    Points
    18
    Par défaut tableaux / vector, performance
    Bonjour,

    pour tester réellement l'écart de performance entre les tableaux basiques et les vectors, j'ai fait deux testes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    #include <iostream>
    #include <time.h>
     
    using namespace std;
     
    int main(){
    	double elapsedTime;
    	clock_t stopTime;
    	clock_t startTime = clock();
     
    	int tab[100][100];
     
    	while(elapsedTime < 20000){
     
    		for (unsigned int i = 0; i < 100; i++){
    			for (unsigned int j = 0; j < 100; j++){
    				tab[i][j]++;
    			}
    		}
     
    		stopTime = clock();
    		elapsedTime = (stopTime - startTime) / (CLOCKS_PER_SEC / (double) 1000.0);
    	}
    	cout << "fin, max = " << tab[1][1] << endl;
     
    	return 0;
    }


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    #include <vector>
    #include <iostream>
    #include <time.h>
     
    using namespace std;
     
    int main(){
    	double elapsedTime;
    	clock_t stopTime;
    	clock_t startTime = clock();
     
    	vector<vector< int > > tab;
     
    	tab.resize(100,vector<int>(100,0));
     
    	while(elapsedTime < 20000){
     
    		for (unsigned int i = 0; i < 100; i++){
    			for (unsigned int j = 0; j < 100; j++){
    				tab[i][j]++;
    			}
    		}
     
    		stopTime = clock();
    		elapsedTime = (stopTime - startTime) / (CLOCKS_PER_SEC / (double) 1000.0);
    	}
    	cout << "fin, max = " << tab[1][1] << endl;
     
    	return 0;
    }

    pour un temps donné, je compte le nombre de fois que j'accède à chaque cellule et à la fin, j'obtiens que le programme a accédé plus de fois au cellules du tableaux qu'au vector ...

    je me suis trompé ou alors les tableaux sont plus rapide pour ce genre de besoin ?

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Cela ne me choque pas plus que cela que le tableau C soir plus rapide qu'un vector. Un vector fait plus de choses sous le capot qu'un bête tableau

    Ceci dit, quelle mode de compilation, Debug ou Release, parce qu'il peut y avoir des différences notables de performances.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    Cela ne me choque pas plus que cela que le tableau C soir plus rapide qu'un vector. Un vector fait plus de choses sous le capot qu'un bête tableau

    Ceci dit, quelle mode de compilation, Debug ou Release, parce qu'il peut y avoir des différences notables de performances.
    j'ai juste compilé avec g++

    Si je les tableaux comportent des objects plus compliqué la tendance devrait s'inverser pensez vous ?

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Je ne pense pas, à objet contenu identique, je pense que les performances ne changeront pas. le tableau est et resetra plus rapide que le vector mais encore une fois, ils ne sont pas réellement comparables car il ne font pas le même boulot (même si extérieurement ils se ressemblent)

    Ceci dit, un vector risque de te faire gagner énormément de temps rien qu'avec les bugs qu'il élimine par rapport au tableau.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    il faut voir comment cela est fait a l'intérieur, si je me souviens bien

    pour ton tableau tout l'allocation des cellules est contiguë, alors que pour ton vector contenant des vector c'est plus complexe je ne sais pas comment cela est géré. toujours est il que les calculs pour se ballader dedans seront plus compliqués.
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  6. #6
    Expert éminent Avatar de kain_tn
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 564
    Points : 7 287
    Points
    7 287
    Par défaut
    Il faut garder en tête que ton tableau est statique tandis que ton vector est dynamique. Le premier avantage à utiliser ton vector plutôt qu'un tableau dynamique est que tu n'as pas à gérer toi même l'allocation de mémoire.
    Copier c'est copier; voler c'est vendre un CD une vingtaine d'euros!


    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <stdio.h>
     
    int main(int argc, char **argv) {
     
        printf("So long, and thanks for the fish, Dennis...\n");
        return 0;
    }

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Je n'ai pas fait le test de performance, mais comme dit plus haut l'intérêt premier est de te soulager de la gestion de l'allocation. Ensuite si il y a une vraie différence et que c'est cette différence qui pénalise ton algo (ce qui reste à prouver), tu peux toujours récupérer le tableau du vecteur par T*p= &vect[0].

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Salut,
    Je n'ai pas fait le test de performance, mais comme dit plus haut l'intérêt premier est de te soulager de la gestion de l'allocation. Ensuite si il y a une vraie différence et que c'est cette différence qui pénalise ton algo (ce qui reste à prouver), tu peux toujours récupérer le tableau du vecteur par T*p= &vect[0].
    ok 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
    Points : 4 625
    Points
    4 625
    Par défaut
    Ça ne sert absolument à rien de manipuler un pointeur plutôt qu'un itérateur, les deux sont tous aussi rapides.

    Voir http://www.xs4all.nl/~weegen/eelis/vector-speed.cpp

    À part ça, ton benchmark compare des choses qui n'ont rien à voir. Un tableau de tableau ça n'a pas du tout la même structure mémoire qu'un vecteur de vecteur.
    De plus, tu mesures l'allocation dans ton benchmark, ce qui est sûrement le plus coûteux.
    Boost ftw

Discussions similaires

  1. Réponses: 9
    Dernier message: 01/10/2010, 17h50
  2. [Tableaux] test performance nom de variable
    Par maximenet dans le forum Langage
    Réponses: 5
    Dernier message: 28/07/2006, 14h30
  3. Réponses: 8
    Dernier message: 05/07/2006, 13h35
  4. std vector vs tableaux
    Par mathher dans le forum SL & STL
    Réponses: 17
    Dernier message: 22/04/2006, 13h49
  5. Tableaux et autres std::vector
    Par DeusXL dans le forum SL & STL
    Réponses: 1
    Dernier message: 04/11/2005, 13h58

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