gpt4 book ai didi

c++ - 为什么我不能使用 tbb::task_scheduler_init 创建超过 32 个线程?

转载 作者:行者123 更新时间:2023-11-30 05:24:08 25 4
gpt4 key购买 nike

我尝试使用 task_scheduler_init 来控制程序中的线程数。不过好像不管我设置多少线程,最大线程数都是32。我用的是i7,它有8个逻辑核心。比如我这样设置task_scheduler_init。

tbb::task_scheduler_init init(100);

实际上线程数是32,我尝试用limited_arena来打破限制,但是失败了。 enter image description here

最佳答案

这是 TBB 任务调度程序的硬性限制。这个想法是任务调度程序用于计算并行性。如果您正在积极计算某些东西,则没有理由将线程数增加到远高于硬件线程数。当操作系统开始过于频繁地切换线程上下文时,它会导致过度订阅开销。

TBB 任务调度程序不是为支持在操作系统中阻塞的线程而设计的(例如 I/O)。如果您想将 TBB 与 I/O 任务一起使用,请确保改用异步 I/O。然而,TBB 认识到应用程序设计很少是完美的,因此允许这种 4 倍的超额订阅。另一种方法是使用 std::thread 创建和管理您自己的线程(TBB 在 "tbb/compat/thread" header 中为旧编译器提供自己的包装器)。

关于c++ - 为什么我不能使用 tbb::task_scheduler_init 创建超过 32 个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38816130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com