有谁知道在使用 TBB 时如何修改线程调度(特别是亲和性)?对简单的并行应用程序进行高级分析,似乎 TBB 正在以降低性能的方式指定底层线程的亲和性。具体来说,我正在运行的内核启用了超线程,看起来 TBB 正在将线程关联到同一个内核,即使有一个完全卸载的不同内核也是如此。
FWIW,我意识到 TBB 很可能在做“正确的事”,改变线程的亲和性只会降低性能。我只是想试验一下,看看是否真的如此。
最佳答案
TBB 2.1 添加了一个关联分区器,它根据缓存关联将任务分配给线程。使用此分区程序而不是默认分区程序 might help out .您还可以深入研究单个任务并使用 tbb::task::set_affinity
(文档 here)。如果您的 tbb::task
子类实现了 note_affinity()
回调,则调度程序可以在任务碰巧在其亲和性指示的线程以外的线程上运行时通知您.
关于c++ - 使用线程构建 block (TBB) 时如何修改线程调度行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2405849/