Bonjour,
Je découvre la librairie TBB d'Intel pour la programmation multi-threading. J'ai bien compris comment fonctionne la fonction parallel_for mais je souhaiterais savoir s'il est possible de récupérer un ID unique pour chaque thread qui appelle la lambda ? J'ai vu qu'on pouvait récupérer l'ID du thread mais en fait je veux un ID compris entre 0 et nbThread.
Alors cette solution avec une variable statique pour l'id et un mutex fonctionne très bien mais je trouve que c'est sale et puis cela necessite une synchronisation donc une perte de performance.
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 static int id; id = 0; unsigned int nbThread = 4; unsigned int workPerThreadAjust = NodesToAnalyse.size()/nbThread+1; tbb::parallel_for( tbb::blocked_range<size_t>(0, NodesToAnalyse.size(), workPerThreadAjust), [&](const tbb::blocked_range<size_t>& r) { s_mutex.lock(); std::cout << "Thread ID=" << id << " / Analyse range: " << r.begin() << " -> " << r.end(); ++id; s_mutex.unlock(); this->_analyseNode(NodesToAnalyse, r.begin(), r.end(), id-1); } // fin de la lambda )
La fonction tbb::this_tbb_thread::get_id() ne fonctionne pas car retourne un gros identifiant (celui du thread courant) mais qui n'est pas dans l'intervalle [0, nbThread[
Une idée ?
Merci par avance
Partager