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 :

Probleme temps de calcul sur un vector


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 91
    Par défaut Probleme temps de calcul sur un vector
    Bonjour à tous, j'ai un petit soucis concernant la gestion d'un tableau.

    Dans le code de base de ma fonction, j'utilise un tableau de float :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int     nbPix           =   width*height;
    float   * A  = new float [nbPix];
    float   * B  = new float [nbPix];
    int   * C  = new int [nbPix];
    for (int i=0; i<nbPix; ++i)
          A[i]  = 10000000;
          B[i]  = 10000000;
          C[i]  = 453;
    et si j'utilise les vector ça me donne tout simplement ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    vector<float> A(nbPix,10000000);
    vector<float> B(nbPix,10000000);
    vector<int> C(nbPix, 453);
    le temps de calcul est plus long pour la solution vector, est-ce normal ?
    y a t-il une solution plus rapide ?

  2. #2
    Membre expérimenté Avatar de Nogane
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 241
    Par défaut
    Bonjour,
    Si votre premier code compile, c'est que vous êtes sous un vieux Visual. Il ne devrait pas car 'i' n'existe plus lors des deux dernières lignes.
    Vous avez oubliez les accolades après le for (on est pas en python ), et du cou les deux dernière ligne ne passe pas dans la boucle. Donc c'est normale que ca n'aille pas a la même vitesse.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 91
    Par défaut
    oui en fait je n'ai pas recopié les acolades dans la citation mais elles sont bien présentes dans le code (dslé de l'oubli).

  4. #4
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par défaut
    olivier21c, est-ce que tu es bien en mode release ?

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Aussi, le premier code ne contient pas de delete alors que le second si.

    A part cela et ce qui à été dit dans les messages précédents, les deux codes devraient avoir à peu près les même performances.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 91
    Par défaut
    non j'étais ne mode debug,
    si je passe en mode release, l'utilisation des vector est toujours plus lente mais l'écart est proportionnellement baissé par rapport au temps d'exécution final :

    différence de 100ms sur l'exécution en mode debug (440ms pour la fonction totale)
    différence de 10ms sur l'exécution en mode release (90ms pour la fonction totale)
    il est encore plus intéressant d'utiliser float* ici.
    par contre si j'initialise comme suit :

    memset(A, 10000000.0f, nbPix);
    memcpy(B, A, nbPix * sizeof(float));
    memset(C, _453, nbPix);
    je gagne encore près de 10ms (mais mon 10000000.0f passe en int).

    sinon pour ma culture, quelle la différence en mode debug et mode release ? qd utiliser l'un ou l'autre?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 91
    Par défaut
    le delete est présent à la fin de la fonction pour l'utilisation de float* (et int* bien sur).

    je pensait qu'utiliser des vector améliorerait la rapidité de mon exécution, mais la je ne vois comment améliorer.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 23/02/2012, 12h25
  2. Réponses: 5
    Dernier message: 06/06/2011, 01h04
  3. Calcul temps de Marche sur front montant
    Par ARAGORN93 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/02/2008, 23h01
  4. Réponses: 15
    Dernier message: 20/09/2005, 09h54
  5. [Math]probleme de precision de calcul sur les float
    Par calvin dans le forum Langage
    Réponses: 6
    Dernier message: 26/05/2005, 07h53

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