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 :

Optimisation -> inline et constructeurs


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 26
    Par d�faut Optimisation -> inline et constructeurs
    Bonjour, je suis en train de coder une petite librairie math�matique, et j'ai quelques problemes �tranges...

    J'ai commenc� � coder une classe matrice3x3, entierement �crite dans le .h (beurk ), avec des mots cl�s inline notamment sur les surcharges d'op�rateurs (meme si je suppose que les fonctions d�clar�es en plein .h sont pass�es automatiquement inline par le compilo, surtout ke je demande rapidit� au d�triment de la taille de l'ec�cutable)

    Bref tout va bien, sur une boucle j'effectue 5 milliards de produits matriciels en 5 secondes Ca me parait tres tres rapide, j'espere ne pas etre tromp� par une optimisation quelconque sachant ke je multiplie toujours les deux meme matrices...

    Le probleme vient quand j'�crit un .cpp et que j'y place les constructeurs de la classe... Les performances sont en chute libre! Par un facteur surement de plus de 10.

    Est-ce que cela vient du fait k'il n'ya plus de inline possible lorsque je place du code dans le .cpp?
    Comment retrouver les performances du d�but en pouvant �crire le code proprement dans un .cpp?


    Merci a vous...



    edit : 5 secondes en fait

  2. #2
    Expert confirm�

    Avatar de fearyourself
    Homme Profil pro
    Ing�nieur Informaticien Senior
    Inscrit en
    D�cembre 2005
    Messages
    5 121
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activit� : Ing�nieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 5 121
    Par d�faut
    Bref tout va bien, sur une boucle j'effectue 5 milliards de produits matriciels en 5 secondes Ca me parait tres tres rapide, j'espere ne pas etre tromp� par une optimisation quelconque sachant ke je multiplie toujours les deux meme matrices...
    Lance 1 milliards de produits et regarde si cela prend une seconde...

    Jc

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 26
    Par d�faut
    Oui oui c'est le cas Je voulais surtout dire que je ne sais pas si ya pas des bidouilles pour �viter de recalculer ce qui vient de l'�tre par exemple (m�canisme de cache). M'enfin bon si c'est rapide a ce point tant mieux je suis content de pouvoir faire bruler le fortran lol

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

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    Je voulais surtout dire que je ne sais pas si ya pas des bidouilles pour �viter de recalculer ce qui vient de l'�tre par exemple (m�canisme de cache)
    Effectivement moi si j'�tais toi je ferais attention � ce genre de choses.

    Sinon pour les fonctions inline, m�me combat que pour les templates : si le compilo ne peut acc�der � la d�finition de la fonction inline (ie. si elle est clo�tr�e dans un .cpp), il ne pourra jamais l'inliner...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 26
    Par d�faut
    Ok, donc la r�ponse c'est : je dois faire des .h de goret si je veux que ca fonce?

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

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    Citation Envoy� par oldfox
    Ok, donc la r�ponse c'est : je dois faire des .h de goret si je veux que ca fonce?
    Tu peux tout de m�me s�parer les fichiers (mais pas de .cpp), m�me si pour le compilo �a reviendra au m�me. Ce sera un peu plus propre.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 26
    Par d�faut
    Deux .h dont l'un inclu l'autre?

    Ca va �tre beau tout ca


    Merci

  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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    Citation Envoy� par oldfox
    Deux .h dont l'un inclu l'autre?
    Plut�t un .h et un .inl (ou n'importe quoi d'autre). Ca fera toujours un peu plus classe, et �a explicitera un peu plus le r�le du fichier.

  9. #9
    Membre chevronn� Avatar de xxiemeciel
    Inscrit en
    Juin 2005
    Messages
    371
    D�tails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 371
    Par d�faut
    Salut,

    Une petite precision sur ton test de 5 milliards d'iterations. J'ai fait beacoup de tests de performances de se genre a mon travail et je me suis rendu compte que le compilateur ignorait tout simplement la boucle si le resultat calcul� a l'interieur n'est pas utilis� et ne modifie rien

    par exemple dans le cas suivant :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void maFonctionTest()
    {
         double sum = 1.0;
         for(int i=0; i < 1 000 000 000; i++)
        {
              sum+=1.0;
         }
    }
    l'execution sera tres rapide puisque la valeur de sum n'est pas utilis� et l'interieur de la boucle ne change rien a ton environnement donc le compilateur l'ignore.

    Par contre le cas suivant va etre tres different :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void maFonctionTest()
    {
         double sum = 1.0;
         for(int i=0; i < 1 000 000 000; i++)
        {
              sum+=1.0;
         }
        std::cout << sum << "\n";
    }
    puisque le resultat de la boucle est utilis�.

    Maintenant moi j'utilise le compilo de visual studio (le payant) qui optimise beaucoup donc c'est peut etre pas le cas pour d'autre compilateur.

    XXiemeciel

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 26
    Par d�faut
    Je suis aussi sur visual. Faudra que j'essaye avec des nombres al�atoires peut etre dans les matrices... Mais le fait que le temps augmente lin�airement me fait pense que c'est bon, que c'est juste le c++ qui avale les matrices tres tres vite

    La il n'ya pas d'utilisation du r�sultat mais je mettais le cout<< avant et ca avait des perf similaires.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    QueryPerformanceCounter(&tic);
    	for (long long int i = 0; i<5000000000; ++i){
    		m3=m1*m2;
    	}
    	QueryPerformanceCounter(&tac);
    	double time = 1000.0 * (tac.QuadPart - tic.QuadPart) / Frequency.QuadPart;
    	cout << i << " multiplications matricielles 3x3 ";
    	cout << " temps ecoule : " << time << "ms " << endl<<endl<<endl;


    J'ai dailleurs perdu pres de deux secondes de traitement depuis que j'ai rajout� d'autres classes dans le programme Vous voyez de quoi ca peut venir? C'est in�vitable? Mon exe ne passe pourtant que de 92ko a 100ko entre la version qui met 5s et la version qui met 7 ....

  11. #11
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    Visual C++ poss�de (� partir de la version 7.1 je crois), une option "whole program optimisation". Je t'invite � regarder de ce c�t�.

    http://msdn2.microsoft.com/en-us/library/0zza0de8.aspx
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

  12. #12
    R�dacteur

    Avatar de Matthieu Brucher
    Profil pro
    D�veloppeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France, Pyr�n�es Atlantiques (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par d�faut
    Citation Envoy� par JolyLoic
    Visual C++ poss�de (� partir de la version 7.1 je crois), une option "whole program optimisation". Je t'invite � regarder de ce c�t�.

    http://msdn2.microsoft.com/en-us/library/0zza0de8.aspx
    Je croyais que c'�tait .NET 2005 en version non express ??

    Sinon, ta fonction est optimis�e � fond, le compilo ne fait sans doute qu'une seule fois l'op�ration. Il est IMPOSSIBLE de fare autant de multiplications en si peu de temps.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 26
    Par d�faut
    J'utilise deja toutes les options d'optimisation disponibles. La "global optimization" ne change rien a la perte de perf quand j'ajoute deux autres classes malheureusement.

    Pour le temps, je vais essayer de changer la methode de chronometrage pour etre sur. Car c'est vrai que 5 milliards de produits matriciels, ca fait un sacr� paquet de multiplications

    edit: Bon j'avais bien une optimisation qui trainait comme je le craignais Mais 100 millions de produits matriciels en 5 secondes ca reste honorable
    C'est pour de la modelisation physique donc plus je peux en faire a la seconde mieux je me porte...

    De plus le probleme de baisse de perf avec plus de classe semble avoir disparu Ca devait venir de cette optimisation...

    Bon ba imp�cable plus qu'a rendre les .h lisibles et a continuer de bosser

  14. #14
    Membre chevronn� Avatar de xxiemeciel
    Inscrit en
    Juin 2005
    Messages
    371
    D�tails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 371
    Par d�faut
    Salut,

    Les processeurs AMD et Pentium 4 posseedent aussi une optimisation a la compilation SSE et SSE2 qui optimise les calculations mathematique en nombres flottants.

    les performances peuvent augmenter jusqu'a 15% dans certains cas.

    XXiemeciel

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 26
    Par d�faut
    J'imagine que c'est g�r� silencieusement par VS7.1 ca non? Car je ne vois aucune option explicite la dessus si ce n'est "optimize for processor : blended / PIV or above".

  16. #16
    Membre chevronn� Avatar de xxiemeciel
    Inscrit en
    Juin 2005
    Messages
    371
    D�tails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 371
    Par d�faut
    Citation Envoy� par oldfox
    J'imagine que c'est g�r� silencieusement par VS7.1 ca non? Car je ne vois aucune option explicite la dessus si ce n'est "optimize for processor : blended / PIV or above".
    si tu parles ici de l'option SSE ou SSE2 ce n'est pas par default tu dois le demander pour l'avoir. Et generalement il faut le mettre dans la ligne de command du compilateur (tu trouveras toutes les options sur le site MSDN)

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vclrfArchMinimumCPUArchitecture.asp

    mais attention cette option empeche le fonctionnement du programme sur des processeurs ne gerant pas SSE / SSE2.

    XXiemeciel

Discussions similaires

  1. Optimisation de votre SGBDR et de vos requ�tes...
    Par SQLpro dans le forum Langage SQL
    R�ponses: 35
    Dernier message: 11/01/2013, 11h49
  2. Instanciation, constructeur inline, vtable
    Par NiamorH dans le forum C++
    R�ponses: 7
    Dernier message: 02/01/2008, 14h20
  3. [C#] Comment optimiser mon constructeur ?
    Par blbird dans le forum C#
    R�ponses: 2
    Dernier message: 19/01/2006, 14h41
  4. [langage]Problème de temps de lecture, optimisation
    Par And_the_problem_is dans le forum Langage
    R�ponses: 2
    Dernier message: 08/01/2003, 08h47
  5. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    R�ponses: 2
    Dernier message: 11/06/2002, 10h24

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