Salut, j’ai déjà posté sur le forum au moment où je cherchais à me former sur la progra multithread. J’ai passé en revue sur developpez.net avec tous ceux qui m’ont filé un coup de main (merci encore !) , les frameworks Boost, TBB et OMP. J’ai décidé de retenir TBB comme solution finale pour des questions de facilité d’intégration.
Au stade du « redesign » mon source, je m’aperçois que je ne suis pas à l’aise avec la notion de « donnée partagée » qui est peut-être à l’origine de mes plantages répétés…. L’idée est la suivante : j’avais au départ la construction d’un objet qui dispose d’une méthode next(), laquelle méthode permet à l’occasion di’térations, de générer une suite de valeur. C’et donc cette boucle que j’ai choisi de paralléliser, connaissant dès le départ mon nombre total d’itérations, au moyen d’un parallel_for
Ce que j’observe :, des plantages interviennent dans l’exécution de mon parallel_for, je n’arrive jamais à sortir de la boucle placée dans la méthode
Void operator()
De ma classe (alors que l’idée c’est de pouvoir récupérer en fin de traitement, toues mes valeurs dans un tableau).
Ce que j’ai remarqué : c’est que je suis en mesure de tracer l’index de parcours du blocked_range passé en paramètre à la fonction, et que le plantage n’intervient jamais pour le même index.
Qqs questions «conceptuelles»: dans quel cas je peux être certain que j’ai précisément affaire à des données partagées lors de l’exécution de ma boucle?
Dans la mesure où mon exécution ne semble jamais être stoppée au même endroit, est-ce que je considère que c’est mes threads qui arrivent n’importe quand/comment sur la ligne de calcul ?
Comment je mets en place avec TBB une synchronisation des threads pour la zone pour laquelle j’ai un doute (avec Boost j’avais vu que l’on mettait des mutex, avec TBB je trouve rien)?c’est quoi la règle pour placer les points de synchronisation au(x) bon(s) endroit (s) ?
Merci si vous avez des éléments pour me faire comprendre.
Partager