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++

  1. #21
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    vous pouvez toujours utiliser la méthode coué (je ne sais pas comment cela s'écrit), cela ne change rien à l'affaire, ni à l'indirection additionnelle, ni au résultât des mesures précédentes
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  2. #22
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    Citation Envoyé par bruno_pages Voir le message
    vous pouvez toujours utiliser la méthode coué (je ne sais pas comment cela s'écrit), cela ne change rien à l'affaire, ni à l'indirection additionnelle, ni au résultât des mesures précédentes
    Avec ton code de la page précédente j'obtiens avec vs2010 : 8.346s pour le tableau dynamique et 8.346s pour le std::vector (ça fluctue un peu dans les deux cas à plus ou moins 10ms). C'est bizarre, comment peut-on obtenir le même temps alors qu'il y a pourtant une "'indirection supplémentaire au minimum deux fois plus chère." !?
    for (n = size; n; n -= 1)
    0119109D mov eax,540BE400h
    011910A2 mov ecx,2
    f(v1, 0, 0);
    011910A7 xor ebx,ebx
    011910A9 add eax,0FFFFFFFFh
    011910AC adc ecx,0FFFFFFFFh
    011910AF mov edx,eax
    011910B1 or edx,ecx
    011910B3 jne main+67h (11910A7h)

    for (n = size; n; n -= 1)
    011910B5 mov edx,dword ptr [esp+14h]
    011910B9 mov dword ptr [esi],ebx
    011910BB mov eax,540BE400h
    011910C0 mov ecx,2
    f(v2, 0, 0);
    011910C5 xor ebx,ebx
    011910C7 add eax,0FFFFFFFFh
    011910CA adc ecx,0FFFFFFFFh
    011910CD mov esi,eax
    011910CF or esi,ecx
    011910D1 jne main+85h (11910C5h)

  3. #23
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    l'indirection supplémentaire est là : 011910B9 mov dword ptr [esi],ebx

    belle optimisation dans le code générée car elle est faite une fois pour les deux accès dans le vecteur (via recherche de code commun et détection de registres inchangés)

    maintenant le programme ne fait pas que des accès, je n'ai jamais dis que l'utilisation d'un vector doublais le temps total d'exécution, seulement la partie liée au vector lui même, et si il n'y a une seule lecture traversant le vector à la recherche du 'vrai' vecteur interne c'est parce le code faisait 'suffisamment rien' pour laisser les registres disponibles.

    [edit]on remarque aussi que les deux fonctions on été inliné[/edit]
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  4. #24
    Membre chevronné
    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 : 43
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    Citation Envoyé par bruno_pages Voir le message
    l'indirection supplémentaire est là : 011910B9 mov dword ptr [esi],ebx
    Alors sans vouloir être méchant, entre toi, Stepanov et mes propres mesures, j'ai vite fait le choix, et mauvaise nouvelle, c'est pas toi qui gagne.

    Et ca fait pas mal de temps que lire l'assembleur lineairement n'apporte rien au vu des multiples pipeline internes.

  5. #25
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    Citation Envoyé par Joel F Voir le message
    Et ca fait pas mal de temps que lire l'assembleur lineairement n'apporte rien au vu des multiples pipeline internes.
    l'exécution dans un proc est effectivement quelque chose de compliqué avec du parallélisme, sans compter ce qui peux se passer dans les caches, je me souviens avoir été ébahi par les prodiges des 68xxx il y a pas mal de temps déjà.

    a noté que j'ai dis une bêtise dans ma réponse précédente, si l'écriture est (heureusement) bien effectué les lectures liées au return sont passées à la trappe, les fonctions ayant été inliné le compilateur à pu voir que le résultât n'était pas utilisé
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  6. #26
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Je crois que vous pouvez quand même tomber d'accord sur le fait que le temps d'accès à un vecteur est supérieur ou égal à celui d'un tableau, mais jamais inférieur .

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

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