Optimiser l'utilisation des pointeurs
Bonjour à tous et toutes !
Je suis confronté à un problème lié à l'embarqué. J'ai un programme complexe qui utilise beaucoup de pointeurs, voire de pointeurs de pointeurs. Ceci dit, la mémoire est limitée en temps d'accès, et en quantité, ce ui fait un paquet de mouvements du cache vers la DDRAM et vice versa. Du coup, je me retrouve avec un programme qui tourne, mais qui est très très lent. Les options d'optimisations (GCC) sont toutes placées au mieux (je vous ferais grâce des 4 lignes d'optimisation du Makefile :P ), mais je cherche du coup à réduire le nombre de pointeurs, ou à optimiser leur utilisation.
Qu'est-ce qui peut être fait ?
Merci d'avance pour vos réponses ;)
Re: Optimiser l'utilisation des pointeurs
Citation:
Envoyé par progman
Bonjour à tous et toutes !
Je suis confronté à un problème lié à l'embarqué. J'ai un programme complexe qui utilise beaucoup de pointeurs, voire de pointeurs de pointeurs. Ceci dit, la mémoire est limitée en temps d'accès, et en quantité, ce ui fait un paquet de mouvements du cache vers la DDRAM et vice versa. Du coup, je me retrouve avec un programme qui tourne, mais qui est très très lent. Les options d'optimisations (GCC) sont toutes placées au mieux (je vous ferais grâce des 4 lignes d'optimisation du Makefile :P ), mais je cherche du coup à réduire le nombre de pointeurs, ou à optimiser leur utilisation.
Qu'est-ce qui peut être fait ?
Le principe est de réduire le nombre de pointeurs en utilisant une variable locale.
mettons que l'on ait
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
struct b
{
int x;
int y;
int z;
};
struct a
{
struct b *pb;
}; |
Au lieu de faire
Code:
1 2 3 4
|
pa->pb->x = 1;
pa->pb->y = 2;
pa->pb->z = 3; |
on fera
Code:
1 2 3 4 5 6
|
struct b *pb = pa->pb;
pb->x = 1;
pb->y = 2;
pb->z = 3; |
Ce principe est mis en oeuvre un peu partout dans mon code :
http://emmanuel-delahaye.developpez.com/clib.htm
Ceci dit, je doute fort que ce soit la seule cause de ralentissement...
Que dit le profiler ?