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 fonction d'interpolation bilinéaire


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 421
    Points : 95
    Points
    95
    Par défaut Optimisation fonction d'interpolation bilinéaire
    Bonjour à tous,

    J'ai développé un code pour faire de l'interpolation bilinéaire à partir de https://fr.wikipedia.org/wiki/Interp...ilin%C3%A9aire
    Pourriez-vous m'indiquer un moyen pour optimiser mon code s'il vous plaît ?
    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
     
     
    float bilinearInterpolation(float dx, float dy, float deltaX, float deltaY, float deltaFx, float deltaFy, float deltaFxy, float fX1Y1)
    {
      //Precondition
      assert(deltaX > 0);
      assert(deltaY > 0);
     
      assert(dx >= 0.);
      assert(dy >= 0.);
     
      float res;
     
      res = deltaFx*(dx/deltaX) + deltaFy*(dy/deltaY) 
        + deltaFxy*(dx*dy/(deltaX*deltaY)) + fX1Y1;
     
      return res;
    }

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    a part supprimer la variable temporaire, il n'y a pratiquement rien à faire sous cette forme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    deltaFx*(dx/deltaX) + deltaFy*(dy/deltaY) + deltaFxy*(dx*dy/(deltaX*deltaY)) + fX1Y1;
    Avec un peu de renommage, on a:
    • rx = dx/deltaX
    • ry = dy/deltaY
    • res = deltaFx*rx + deltaFy * ry + deltaFxy * rx * ry + fX1Y1


    Tu peux reformuler ta fonction sur ce principe, mais je ne pense pas que tu y gagnes quoique ce soit, le compilateur étant capable (normalement) de le faire lui-même.

    Par contre, il se peut qu'en travaillant avec des doubles, tu sois plus précis.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 421
    Points : 95
    Points
    95
    Par défaut
    Je t'en remercie !

    Existe t-il une forme de l'interpolation bilinéaire qui soit plus rapide ?

  4. #4
    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
    Existe t-il une forme de l'interpolation bilinéaire qui soit plus rapide ?
    Oui, comme l'utilisation de jeu d'instruction dédis, vectorisation/parallélisassions, utilisation du GPU, etc...

    Il y a toujours moyen de faire plus rapide, mais faut prendre beaucoup de temps pour monter en compétences et pour mettre la solution au point.

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Points : 718
    Points
    718
    Par défaut
    Salut,

    Tu peux peut-être supprimer les deux assert suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    assert(dx >= 0.);
    assert(dy >= 0.);
    Et tester le résultat final pour voir s'il est positif ou non (tu auras donc un test en moins).

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Un assert sert normalement uniquement à du debug et est une instruction vide en Release. Donc les virer pour ajouter un test euh
    Globalement à part pouvoir faire le calcul avec des int, tu pourras difficilement avoir des optimisations énormes sur un simple calcul.
    Avec des float, évite les additions/soustractions, favorise les multiplications, tu pourras pas aller bien plus loin, tu dois fatalement faire le calcul à un moment.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 301
    Points : 345
    Points
    345
    Par défaut
    Y'avait eu à l'époque déjà une discussion sur l'interpolation et son optimisation (c'était le cas tri-linéaire mais c'est identique): http://www.developpez.net/forums/d12...e/#post6858415 peut être que ça peut t'intéresser.

Discussions similaires

  1. [OPTIMISATION]fonction de concaténation
    Par m-mas dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 14/06/2007, 14h35
  2. Optimisation fonction MAX
    Par AurelGTS dans le forum Langage SQL
    Réponses: 7
    Dernier message: 14/05/2007, 19h26
  3. Optimisation : fonction vide ou test
    Par bolhrak dans le forum C++
    Réponses: 2
    Dernier message: 15/07/2006, 19h31
  4. [TSQL] Optimisation fonction levenshtein
    Par Adi81 dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 17/03/2006, 15h22
  5. [Optimisation][Fonction]calcul du nombre de jours ...
    Par m-mas dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 26/10/2005, 14h39

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