Mongaulois : déplacement provenant de ce thread http://www.developpez.net/forums/sho...d.php?t=521229
Salut.
J'aurais peut être un piste, mais ca va être dure l'expliquer
A mon boulot, nous avons constater des problème de performance significative sur du filtrage d'image dans des cas particulier avec les proc intel avec 2 et 4 coeur (je ne sait pas pour AMD).
C'est assez difficile à expliquer donc voici un code tout bête qui créé deux mémoire de même taille puis copie une partie de l'une vers l'autre avec un décalage s dans les indices :
En fonction du décalage de s les performance peuvent être un multiple de 10 !!!
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
17
18
19
20
21
22
23
24
25
26
27
28
29 #include <iostream> #include <fstream> #include <ctime> #define TYPE long const int size = 1920*1080*2; const int sborn = 1400; int main(int argc, char** argv) { TYPE *tab1 = new TYPE[size]; TYPE *tab2 = new TYPE[size]; std::ofstream fout("courbe.txt"); for (int s=-sborn;s<=sborn;++s) { std::clock_t time1 =std::clock(); int aa; //pour un meilleur calcul de temps for (aa=0;aa<20;++aa) for (int i =1500;i<size-1500;++i) { //on fait une copie avec un décalage s tab1[i] = tab2[i+s]; } std::clock_t dif = std::clock()-time1; fout<<s<<" "<<static_cast<double>(dif)/aa<<std::endl; } return 0; }
et cela avec s =-1, s=1024 s =-1024 (dépend de la taille et proc et je ne sais pô)
On pense à un problème de prédiction du proc.
Si vous avez plus d'indice ca m'interrese.
Le plus grave dans tout ca est comme le problème apparait avec s=-1, un simple filtrage sur x de taille 3 est moins performant qu'un filtrage sur y de taille 3!!!!
Voici un pdf qu'il apperemment explique tout sur la memoire. Pas encore regarder
http://people.redhat.com/drepper/cpumemory.pdf
Partager