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

Assembleur Discussion :

Optimisation de fonction


Sujet :

Assembleur

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 351
    Points : 432
    Points
    432
    Par défaut Optimisation de fonction
    Je dois optimiser 4 fonctions + une fonction d'initialisation pour un exercice.
    Avant de me lancer dans l'assembleur je voudrais savoir l'optimisation en c est suffisante :

    voici le code non optimisé en c:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    // calcule la rotation du point de vue
    inline float x3D(float x, float y, float z, float alpha, float beta) 
    {
      return cosf(alpha)*(x*cosf(beta)-y*sinf(beta))-z*sinf(alpha);
    }
    inline float y3D(float x, float y, float z, float alpha, float beta)
    {
      return x*sinf(beta)+y*cosf(beta);
    }
    inline float z3D(float x, float y, float z, float alpha, float beta)
    {
      return z*cosf(alpha)+sinf(alpha)*(x*cosf(beta)-z*sinf(beta));
    }
     
    // Calcule la projection en 2D
    inline void p2D(float x, float y, float z, float alpha, float beta, float px, float py, float pz, float *xp, float *yp)
    {
      float x3 = x3D(x-px,y-py,z-pz,alpha,-beta);
      float y3 = y3D(x-px,y-py,z-pz,alpha,-beta);
      float z3 = z3D(x-px,y-py,z-pz,alpha,-beta);
      *xp = -y3/x3;
      *yp = -z3/x3;
    }
    Moi je reduis ca comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    inline void p2D(float x, float y, float z, float alpha, float beta, float px, float py, float pz, float *xp, float *yp)
    {
            float acos = cosf(alpha);
            float asin = sinf(alpha);
     
            float bcos = cosf(beta);
            float bsin = sinf(beta);
     
            float p2x = x-px;
            float p2y = y-py;
            float p2z = z-pz;
     
            float x3 = acos *( p2x * bcos - p2y * bsin )- p2z * asin;
            float y3 =  p2x * bsin + p2y * bcos;
            float z3 = p2z * acos + asin *( p2x*bcos -p2z * bsin);
     
            *xp = -y3/x3;
            *yp = -z3/x3;
    }
    et pour la fonction initialisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    int   voitN = 8;
    float voitX[12]; 
    float voitY[12]; 
    float voitAng[12];
    float voitVit[12];
     
    float voitDV[12];
    float voitDAng[12];
     
    void initVoitures()
    {
      int i;
      for (i=0; i<voitN; i++)
      {
        if (i%2 == 0)
        {
          voitX[i] = -0.7;
          voitY[i] = 1+i*1.7;
          voitAng[i] = M_PI/2;
          voitDV[i] = 0.25;
          voitDAng[i] = -M_PI/120;
        } else
        {
          voitX[i] = 0.7;
          voitY[i] = 1+i*1.7;
          voitAng[i] = M_PI/2;
          voitDV[i] = 0.25;
          voitDAng[i] = -M_PI/120;
        }
      }
    }
    je fais ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    int   voitN = 8;
     
    float voitX[8];
    float voitY[8]; 
    float voitAng[8]={M_PI/2,M_PI/2,M_PI/2,M_PI/2,M_PI/2,M_PI/2,M_PI/2,M_PI/2};
    float voitDV[8]={0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25}; 
    float voitDAng[8]={-M_PI/120,-M_PI/120,-M_PI/120,-M_PI/120,-M_PI/120,-M_PI/120,-M_PI/120,-M_PI/120,}; 
     
    float voitVit[8];
     
    void initVoitures()
    {
      int i;
      for (i=0; i<voitN; i++)
      { 
        if (i%2 == 0)
        {
          voitX[i] = -0.7;
        }
        else
        {
          voitX[i] = 0.7;  
        } 
          voitY[i] = 1+i*1.7;
      }
    }
    Es que ces optimisations suffisent ? , ou es qu'on peux faire mieux en c ?.
    Sinon pour l'obtimisation en assembleur si vous avez des pistes pour optimiser ce code ?

  2. #2
    Membre actif Avatar de trax44
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 300
    Points : 233
    Points
    233
    Par défaut
    demande a gcc ce qu'il en pense (il peut te générer du code assembleur avec ses optimisations qui ne sont vraiment pas mauvaise sur les dernières version)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 351
    Points : 432
    Points
    432
    Par défaut
    oki merci

Discussions similaires

  1. Optimisation de fonction
    Par Giansolo dans le forum Mathématiques
    Réponses: 7
    Dernier message: 30/04/2007, 20h27
  2. Optimisation des fonctions?
    Par JauB dans le forum DB2
    Réponses: 5
    Dernier message: 31/01/2007, 20h47
  3. Optimiser une fonction (trouver le minimum)
    Par Noel Gallagher dans le forum C
    Réponses: 2
    Dernier message: 27/11/2006, 06h46
  4. probleme d'optimisation de fonction
    Par franc82 dans le forum C++
    Réponses: 3
    Dernier message: 31/10/2006, 09h45
  5. Optimisation de fonction ...
    Par dark_vidor dans le forum Langage
    Réponses: 10
    Dernier message: 02/01/2006, 11h50

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