comment booster la performance de votre programme en utilisant swap sur vos vector source et destination

comment booster la performance de votre programme en utilisant swap sur vos vector source et destination

by Ronan Boulic -
Number of replies: 0

certains ont remarqué une perte de performance de leur programme par rapport au programme de démo dès qu'il y a plusieurs filtrages sur une grande image.

Cette perte de performance peut venir de l'affectation du vector destination (le résultat du filtrage) au vector source (l'input du filtrage) tant qu'il faut faire un nouveau passage dans la boucle de filtrage. En effet une affectation signifie que toutes les valeurs des éléments du vector destination sont copiées une à une dans le vecto source.

J'ai déjà indiqué une solution relativement simple qui consiste à alterner le vector que l'on passe à la fonction filtrage à chaque nouveau passage dans cette boucle.

Voici une solution encore plus simple : la méthode swap peut être appelée sur un vector a pour "échanger sans affectation" les valeurs de ce vector a avec celles d'une autre vector b.

a.swap(b);

exemple:

vector<double> a(100,1);
vector<double> b(200,2);
a.swap(b); // opération à coût constant indépendant de la taille de a et de b

Après cet appel, a est un vector contenant 200 fois la valeur 2 et b est un vector contenant 100 fois la valeur 1.

je montrerai en cours cette semaine comment cela fonctionne car nous avons maintenant les bases concernant les pointeurs et l'allocation dynamique de mémoire.


PS performances bis: la même perte de performance est observée quand on passe le vector source par valeur à la fonction de filtrage ; un message précédent sur ce forum a donné la solution: faire un passage par référence constante. A faire si vous ne l'avez pas fait.

PS performance ter: renvoyer un vector par valeur peut impliquer aussi la même perte de performance si on renvoie un vector qui n'est pas local à la fonction. Si le vector renvoyé est local à la fonction qui se termine, alors - depuis C++11 - on bénéficie d'un mécanisme similaire à ce qui est fait pour le swap.