有没有人知道如何在使用TBB时修改线程调度(特别是亲和力)?对简单的并行应用程序进行高级分析,似乎TBB以降低性能的方式指定底层线程的亲和性。具体来说,我正在运行的核心启用了超线程,看起来TBB正在将线程关联到同一个核心,即使有一个不同的核心完全卸载了。
FWIW,我意识到TBB可能正在做“正确的事情”,改变线程的亲和力只会降低性能。我只想试一试,看看是不是真的如此。
答案 0 :(得分:2)
TBB 2.1添加了一个关联分区程序,它根据缓存关联性将任务分配给线程。使用此分区而不是默认的might help out。您还可以深入了解各个任务并使用tbb::task::set_affinity
(文档here)。如果tbb::task
的子类实现note_affinity()
回调,则调度程序可以通知您,如果任务恰好在其亲缘关系指示的线程上运行。