Bonjour,

Je cherche à optimiser (en terme de rapidité d'execution) au maximum, le code suivant:

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
void BMes::calc_inter_trilinear(const cv::Vec3d & m,const BOctreeBox & box,const std::vector<BMes *> & B_list , BMes * b_inter)//Fonction de calcul d'un point de mesure
{
    cv::Vec3d Md( (m[0]-box.pos[0])/box.dim[0],
                  (m[1]-box.pos[1])/box.dim[1],
                  (m[2]-box.pos[2])/box.dim[2] );
 
    cv::Vec3d c00 ( B_list[box.id[0]]->B*(1-Md[0]) + B_list[box.id[4]]->B*Md[0] );
    cv::Vec3d c10 ( B_list[box.id[1]]->B*(1-Md[0]) + B_list[box.id[5]]->B*Md[0] );
    cv::Vec3d c11 ( B_list[box.id[2]]->B*(1-Md[0]) + B_list[box.id[6]]->B*Md[0] );
    cv::Vec3d c01 ( B_list[box.id[3]]->B*(1-Md[0]) + B_list[box.id[7]]->B*Md[0] );
    cv::Vec3d c0 ( c00*(1-Md[1]) + c10 * Md[1] );
    cv::Vec3d c1 ( c01*(1-Md[1]) + c11 * Md[1] );
 
    b_inter->B = c0*(1-Md[2]) + c1 * Md[2];
 
    *((cv::Vec3d*)b_inter)=m;
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
class BMES : public cv::Vec3d
{
 public:
  cv::Vec3d m;
 .
 .
 .
}
Il s'agit d'une interpolation trilinéaire (http://en.wikipedia.org/wiki/Trilinear_interpolation). j'utilise opencv pour les vecteurs.

Voila, j'ai déjà essayé d'écrire tout en une seule ligne pour supprimer les variables intermédiaires (c00 c10 c11 c 01 c0 c1) mais cela n'a rien changé. le compilateur devait déjà effectué l'optimisation)

C'est le nombre d’opérations flottantes qu'il faudrait réduire.

J’apprécie toutes remarques pour améliorer ce code.

Merci pour votre aide