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; }Il s'agit d'une interpolation trilinéaire (http://en.wikipedia.org/wiki/Trilinear_interpolation). j'utilise opencv pour les vecteurs.
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; . . . }
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
Partager