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 :

cpu trop élevé avec des doubles vecteurs


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 16
    Points : 3
    Points
    3
    Par défaut cpu trop élevé avec des doubles vecteurs
    Bonjour

    j'utilise un double tableau de vecteurs dans un espace partagé #pragma data_seg ("SHARED") défini comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::vector < std::vector <double> > Tableau1
    std::vector < std::vector <double> > Tableau2
    or l'utilisation de ces deux tableaux (simple multiplication avec une variable) consomme environ 5% de mon AMD 3500+ ! En utilisant des tableaux classiques, j'arrive environ à 1% du CPU (avec tous les autres calculs)

    Il y a donc 4% de perte, ce qui représente quand même 200mhz pour un simple accès tableau.

    J'aimerais savoir d'où vient le problème ? des doubles vecteurs ? d'une mauvaise configuration des options de compilation ? est-ce normal pour des vectors ou bien dois-je revoir tout mon code avec des tableaux.

    merci par avance.

  2. #2
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut Re: cpu trop élevé avec des doubles vecteurs
    Citation Envoyé par kuzloka
    J'aimerais savoir d'où vient le problème ? des doubles vecteurs ? d'une mauvaise configuration des options de compilation ? est-ce normal pour des vectors ou bien dois-je revoir tout mon code avec des tableaux.
    Peut-être aussi de la manière dont tu utilises les vector ou de la manière dont tu as fait les mesures. Sans plus d'informations, c'est difficile de dire quoi que ce soit de raisonnable.

    Comme souvent, la bonne chose à faire c'est de donner le code minimum montrant ton problème. C'est un peu de travail pour toi mais les chances ne sont pas négligeables que tu trouves tout seul ce qui ne va pas en le faisant.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 16
    Points : 3
    Points
    3
    Par défaut Re: cpu trop élevé avec des doubles vecteurs
    Citation Envoyé par Jean-Marc.Bourguet
    Comme souvent, la bonne chose à faire c'est de donner le code minimum montrant ton problème.
    les seules lignes qui me prennent toutes les ressources c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    x = x * Tableau1[numsortie][sampleframes];
    y = y * Tableau2[numsortie][sampleframes];
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Tableau1[numsortie][sampleframes]= thr1;
    Tableau2[numsortie][sampleframes]= thr2;
    des accès basiques aux tableaux, quoi.

    si je les met en commentaire, 4% de gain;

    pour ce qui est du code minimum, il n'y aurait pas grand chose de plus que ces quelques lignes; j'ai mis en commentaire temporairement toutes les autres lignes de codes qui utilisaient ces tableaux et le résultat est le même

    Pour ce qui est des mesures CPU, elles me semblent assez fiables parce qu'à 99% d'utilisation, tout freeze

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 109
    Points : 121
    Points
    121
    Par défaut
    Je ne sais pas si c'est une bonne idée de considérer le % d'utilisation d'un CPU.
    Une boucle infinie vide peut te prendre 99% ...

    Regarde peut être niveau temps d'exécution et mémoire utilisée, c'est plus fiable à mon avis.

  5. #5
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut Re: cpu trop élevé avec des doubles vecteurs
    Citation Envoyé par kuzloka
    Les seules lignes qui me prennent toutes les ressources c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    x = x * Tableau1[numsortie][sampleframes];
    y = y * Tableau2[numsortie][sampleframes];
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Tableau1[numsortie][sampleframes]= thr1;
    Tableau2[numsortie][sampleframes]= thr2;
    Il me semble très étrange que ces lignes consomment 5 x plus de CPU que l'équivalent en utilisant des tableau "C" (ce que tu as l'air d'affirmer dans ton premier message).

    Pour ce qui est des mesures CPU, elles me semblent assez fiables parce qu'à 99% d'utilisation, tout freeze
    Je n'ai jamais utilisé un pourcentage d'utilisation CPU comme mesure quand je me suis occupé de performance.

    Je continue à penser que le problème est que soit tu ne mesures pas des choses équivalentes, soit le problème réside dans la manière de faire des mesures.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Août 2003
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 247
    Points : 276
    Points
    276
    Par défaut
    Mouais... Le pourcentage de CPU, c'est pas le top pour mesurer.

    Sur x86, l'inctruction RDSTC (Read from Time Stamp Counter) est intéressante.


    Poue ce qui est de l'utilisation de vectors de vectors pour représenter une matrice, c'est un peu une abération. On utilise les vectors imbriqués pour représenter les chunk arrays (chaque tableaux tableaux du tableau n'ont pas nécessairement la même taille). Je pense que les la perte de performance que tu mesure viens de l'allocation des vector.
    Il y a dans la STL des outils spécifique pour représenter les matrices.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2002
    Messages : 162
    Points : 88
    Points
    88
    Par défaut
    La STL fait un peu de travail supplémentaire dans l'utilisation de ses conteneurs, ce qui fait perdre un petit peu de performances quand l'application est compilée avec les options par défaut (genre une absence d'optimisation).

    Par exemple, sans optimisations, le code suivant est plus lent qu'avec les tableaux à la C. Par contre, avec les optimisations, ça devient équivalent.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    std::vector<int> v(1000);
    ...
     
    for (int i=0; i!=v.size(); ++i)
      x *= v[i];

  8. #8
    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 : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Il y a dans la STL des outils spécifique pour représenter les matrices.
    Genre ?

    La STL fait un peu de travail supplémentaire dans l'utilisation de ses conteneurs
    Oui, mais pas dans l'opérateur [] des vectors.

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Août 2003
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 247
    Points : 276
    Points
    276
    Par défaut
    Citation Envoyé par Loulou24
    Il y a dans la STL des outils spécifique pour représenter les matrices.
    Genre ?
    Genre les val_arrays avec les slices et ses copains. Désolé pour la pauvreté de l'information mais mes souvenirs sont vieux et mes références loin d'ici...

Discussions similaires

  1. JScrollbar avec des double
    Par Luffy_San dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 29/12/2008, 16h39
  2. Insert dans des champs INT avec des doubles quotes
    Par bannik dans le forum Requêtes
    Réponses: 3
    Dernier message: 22/04/2008, 17h44
  3. modulo avec des doubles
    Par kharg dans le forum Débuter
    Réponses: 4
    Dernier message: 23/02/2008, 19h04
  4. Modulo avec des doubles
    Par cerede2000 dans le forum C++
    Réponses: 3
    Dernier message: 04/06/2007, 23h13
  5. [JDBC]Probleme avec des doubles cotes
    Par serialkilled dans le forum JDBC
    Réponses: 4
    Dernier message: 13/05/2006, 23h12

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