2010-03-09 25 views
1

Est-ce que quelqu'un sait comment modifier la planification des threads (spécifiquement affinité) lors de l'utilisation de TBB? En effectuant une analyse de haut niveau sur une application parallèle simple, il semble que TBB spécifie l'affinité des threads sous-jacents d'une manière qui réduit les performances. Spécifiquement, les noyaux que j'utilise ont un hyper-threading activé, et il semble que TBB affinite des threads au même noyau même s'il reste un noyau complètement déchargé. FWIW, je réalise qu'il est probable que TBB fasse la «bonne chose» et que changer l'affinité des threads ne fera que réduire les performances. Je voudrais juste expérimenter pour voir si c'est vraiment le cas.Comment peut-on modifier le comportement de la planification des threads lors de l'utilisation de Threading Building Blocks (TBB)?

Répondre

2

TBB 2.1 a ajouté un partitionneur d'affinité qui affecte des tâches aux threads en fonction de l'affinité du cache. Utilisation de ce partitionneur au lieu de celui par défaut might help out. Vous pouvez également plonger dans des tâches individuelles et utiliser tbb::task::set_affinity (documentation here). Le planificateur peut vous informer si la tâche est exécutée sur un thread autre que celui indiqué par son affinité si votre sous-classe de tbb::task implémente le rappel note_affinity().