Temps de calcul & méthode accès tableau
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:
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,