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 :

Performances std::array C++ 2011 vs C array


Sujet :

Langage C++

  1. #1
    Membre éclairé
    Homme Profil pro
    Doctorant en Astrophysique
    Inscrit en
    Mars 2009
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Astrophysique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2009
    Messages : 312
    Par défaut Performances std::array C++ 2011 vs C array
    Bonjour à tous.

    En mai/juin dernier j'avais remporté le concours de programmation Intel grâce entre autres au fait que j'avais remplacé tous les std::vector de mon code par des C array. On entend souvent dire que la différence de perf est légère, mais je ne sais pas comment cela est possible j'avais facilement un facteur 3 de perfs entre les 2.

    Même au niveau des tailles dynamiques, il y avait toujours une différence de perfs énormes entre un int *v = new int[100] vs un std::vector (que ça soit compilé sous intel ou sous g++).

    Je ne sais pas trop d'où viens cet overhead énorme, mais le fait est que je n'utilisais maintenant plus que des C array pour les fonctions qui sont au coeur de mes calculs (celles qui sont appellées des millions de fois).

    Je me demandais si vous pensiez que les std::array de C++ 2011 remédiaient à ce problème.

    Merci beaucoup

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Tu devrais essayer également les nouveaux conteneurs de Boost.

  3. #3
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 294
    Par défaut
    Comment avais-tu alloué tes vecteurs ?
    - push_back ?
    - resize+affectation
    - reserve+push_back

    NB: ces trois solutions présentent un surcout par rapport au simple new[].
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Tu utilises ton new T[n] avec n connue à la compilation ou au runtime ? Dans le second cas oublie std::array, ce n'est pas une alternative, dans le premier ca revient au même qu'un T tab[N] (T et N connues à la compilation) à quelques indirection près (et encore, si méthode d'accès inliné par le compilateur, il doit pas en rester beaucoup).

  5. #5
    Membre Expert
    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 : 45
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par défaut
    Compiler en Release aide aussi :o

  6. #6
    Membre éclairé
    Homme Profil pro
    Doctorant en Astrophysique
    Inscrit en
    Mars 2009
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Astrophysique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2009
    Messages : 312
    Par défaut
    C'était bien entendu compilé en release -O3 avec gcc et les compilos intel.

    Je suis quasi-certain qu'en plus de l'allocation, il y avait un problème au niveau du temps d'accès, et c'est ça qui me laissait vraiment perplexe . Je suis en train d'écrire un petit benchmark pour tester tout ça.

  7. #7
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 294
    Par défaut
    Ta SL était en mode checkée ? (avec asserts anti-dépassements)
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

Discussions similaires

  1. Utilisation de std::chrono (C++ 2011)
    Par GillesM57330 dans le forum Qt
    Réponses: 2
    Dernier message: 03/03/2015, 10h39
  2. [MySQL] array php modifié par mysql array php
    Par fahdo dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 20/07/2014, 11h46
  3. Explication:array[0..0] of VS array of
    Par Eric Boisvert dans le forum Delphi
    Réponses: 3
    Dernier message: 10/07/2006, 16h10
  4. Array, Boucle : Multiplication de l'Array
    Par moijhd dans le forum Flash
    Réponses: 4
    Dernier message: 15/06/2006, 13h21
  5. Performance des vertex array
    Par Mathieu.J dans le forum OpenGL
    Réponses: 13
    Dernier message: 25/06/2004, 10h47

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