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

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2003
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 13
    Points : 9
    Points
    9
    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 éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    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