optimisations accés memoire
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 :cry:
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:
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