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 :

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;
}
En fonction du décalage de s les performance peuvent être un multiple de 10 !!!
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