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++/CLI Discussion :

Optimisation de code


Sujet :

C++/CLI

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2003
    Messages
    13
    D�tails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 13
    Par d�faut Optimisation de code
    J'ai quelques questions sur de l'optimisation de code.
    Je travail sur un �mulateur et l code suivant � pour but de lire un word stock� en big endian (sur une architecture little endian)
    B = Base
    A = Adresse
    D = La donn�e

    1�re solution :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    D = (B[A+0] << 8) | (B[A+1])
    => Je compte 2 acc�s m�moire (1 fois pour lire B[A+0] et une autre pour lire B[A+1))

    2 �me solution :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    D = *((u16*) (B + A)) /* On lit le word à l'adresse B + A */
    D = ((D & 0xFF) << 8) | ((D & 0xFF00) >> 8) /* On swap les bytes */
    => Je compte 1 acc�s m�moire mais plus d'op�ration (je suppose que D est travaill�e dans un registre ...)

    3 �me solution :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    D = ((*((u16*) (B + A)) & 0xFF) << 8) | ((*((u16*) (B + A)) & 0xFF00) >> 8)
    => �quivalent � la deuxi�me mais �crit en une seule ligne.
    Est ce que le compilateur va d�tecter que *((u16*) (B + A)) est pr�sent deux fois et ne va faire qu'un seul acc�s m�moire ?

    Merci pour l'aide que vous pourrez m'apporter.

  2. #2
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 503
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 503
    Par d�faut
    "Premature optimization is the root of all evil !" Donald Knuth

    Laissez l'optimiseur de code faire sa besogne.

    Une approche plus performante est le chargement de la valeur dans un registre 16bit comme AX sous Intel et utiliser une m�canique de swap entre AH et AL, il doit bien avoir un opcode pour �a.

    Ne jamais optimiser dans le vide.
    Il y a de tr�s grosse chance que l'optimiseur d�tecte ce pattern et utilise l'opcode myst�re de swap inter-registre.
    Mais on s'en cogne, il trouvera bien un truc qui augmentera les performances en diminuant les cache-miss, en r�ordonnant les instructions pour �viter des Stall dans les pipelines, en utilisant des instructions imbittables dans l'instruction-set � plusieurs centaines d'opcode du moindre CPU du march�.

    En clair, faite le code le plus lisible possible.
    N'optimiser que le code qui ne respecte pas les performances attendues et avec un profiler, pas avec le doigt mouill�.

Discussions similaires

  1. optimiser le code d'une fonction
    Par yanis97 dans le forum MS SQL Server
    R�ponses: 1
    Dernier message: 15/07/2005, 08h41
  2. Optimiser mon code ASP/HTML
    Par ahage4x4 dans le forum ASP
    R�ponses: 7
    Dernier message: 30/05/2005, 10h29
  3. optimiser le code
    Par bibi2607 dans le forum ASP
    R�ponses: 3
    Dernier message: 03/02/2005, 14h30
  4. syntaxe et optimisation de codes
    Par elitol dans le forum Langage SQL
    R�ponses: 18
    Dernier message: 12/08/2004, 11h54
  5. optimisation du code et var globales
    Par tigrou2405 dans le forum ASP
    R�ponses: 2
    Dernier message: 23/01/2004, 10h59

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