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:
Les performances associées a différentes méthodes d’accès sont les suivantes:
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; };
- 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,
Partager