Bonjour,

Je travaille actuellement sur un bibliothèque d'analyse du mouvement sur des images 2D/3D dans le domaine médical, en temps réel : le temps de calcul est donc très important pour moi.

En réorganisant d'un code existant en ajoutant des méthodes d’accès a un tableau (qui stocke dans mon cas les niveaux de gris d'une image), j'ai vu les performances se dégrader...

Voici une simplification de la classe gérant l’accès au tableau:

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
 
class Image
{
public:
   float *data() { return data; }
 
   float& operator[](int index) { return data[index]; }
   const float& operator[](int index) const { return data[index]; }
 
   float& at(int index) { return data[index]; }
   const float& at(int index) const { return data[index]; }
 
private:
   int width, height, depth;
   float *data;
};
Les performances associées a différentes méthodes d’accès sont les suivantes:

  • méthode "at()" : performance de l'algo 350ms
  • l’opérateur [] : performance de l'algo 150ms
  • accès au pointeur du tableau ("data()") puis accès classique avec l’opérateur [] : performance de l'algo 50ms


L'algo en lui même est HornSchunck (estimation de mouvement), il ne contient aucun calculs complexes autre que +,-,/,*

Est ce que quelqu'un aurait une explication sur ces différences de temps de calculs ?
Quels conseils me donneriez-vous dans le cas d’accès rapide a un gros volume de données ?

Merci d'avance,