Bonjour � tous,
J'ai multithread� un code, et j'ai des r�sultats horribles, je ne suis pas expert mais je suspecte les threads qui se vident le cache entre eux. Voici l'algo :
Et j'appelle les threads de cette fa�on :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9 for (int y=y_begin; y<y_end; ++y) { for (unsigned short x=0; x<w; x++) { int i=(h-y-1)*w+x; // Traitements (peuvent être plus ou moins long data[i] = data[i] + /* code */; } }
En le lan�ant avec time j'ai ces r�sultats :
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 std::vector<Vector> data; data.resize(w*h); // Taille par exemple w = 256, h = 196 int yb = 0; int ye = 0; std::vector<std::thread> threads(thread-1); for(int i=0; i < thread-1; ++i) { ye += h/thread; threads[i] = std::thread(ThreadFunction(), std::ref(data), yb, ye); yb = ye; } ThreadFunction()(data, yb, h); for(size_t i=0; i < threads.size(); ++i) { threads[i].join(); }
real 0m10.309s
user 0m13.633s
sys 0m21.829s
(coup� avant la fin)
Alors que en single thread j'ai quasi 0 en sys. Je suppose que c'est � cause de nombreux changements de contexte ?
Et finalement pour donner un ordre de grandeur, sur mon processeur 4 coeurs, je met 20 secondes avec un thread et 3 minutes avec 4�
Quelles sont les causes possibles ?
Merci d'avance !
Partager