Re bonjour tous le monde, c'est encore moi.
La on tombe de haut la parallélisation semble échouer à cause des "new"
quand on fait des 100 000 new string
avec 1 thread ça prend 104 ms sur un QuadCore
et maintenant le plus étrange
quand on fait des 400 000 string *s = new string(""),
avec 4 threads sur un QuadCore, ça prend 900 ms par thread !!! (chaque thread faisant 100000 new)
une création de variable (string s = "" se parallélise sans problème.
Est-ce que quelqu'un déjà eut ce type de problème ? Quels solutions ? (à part ne pas utiliser les "new")
voici le code d'exemple, évidement vous ne pourrais pas voir le problème si vous n'avez pas au minimum un dual-core.
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
30
31
32
33
34
35
36
37
38
39
40 #include "stdafx.h" #ifdef WIN32 #pragma comment(lib, "../SDL-1.2.11/lib/SDL.lib") #pragma comment(lib, "../SDL-1.2.11/lib/SDLmain.lib") #endif #include "../SDL-1.2.11/include/SDL.h" #include <string> #include <iostream> using namespace std; int InstanceString( void *data ) { int countS = 0; Uint32 lastDt=SDL_GetTicks(), dtS; while (true) { //string *s = new string(); delete s; //ne se parallélise pas for (int i =0; i < 30; i++) string s = ""; //fonctionne correctement countS++; if (countS%100000 ==0) { dtS = SDL_GetTicks(); cout << "\n" << dtS - lastDt; lastDt = dtS; } } return 0; } int _tmain(int argc, _TCHAR* argv[]) { SDL_CreateThread( InstanceString, (void*)NULL); SDL_CreateThread( InstanceString, (void*)NULL); SDL_CreateThread( InstanceString, (void*)NULL); SDL_CreateThread( InstanceString, (void*)NULL);//*/ int inte; cin >> inte; }
Partager