gpt4 book ai didi

c++ - TBB 生成任务内存泄漏

转载 作者:行者123 更新时间:2023-11-30 03:40:27 33 4
gpt4 key购买 nike

我们有一段代码利用 TBB 生成任务来执行一些处理,这是使用以下 TBB 代码初始化 TBB 线程池(以匹配核心数)完成的:

tbb::task_scheduler_init(8);

然后对于我们想要生成的每个任务,我们使用以下代码(其中 MainTask 派生自 tbb::task 类):

task = new (tbb::task::allocate_root()) MainTask(theAction, theOutputData);
tbb::task::enqueue(*task);

当我们运行我们的代码时,我们开始使用一定量的内存,然后随着程序的执行和产生新的任务,如上所述,内存使用量会随着时间的推移逐渐增加。在执行 40 分钟后,它从 12KB 增加到 213KB。这显然不是我们任何处理代码的结果,似乎是 TBB 没有从我们正在创建的 TBB allocate_root 任务中释放内存的结果,一旦它们完成了我们期望的执行。

为什么会这样?我们是否需要做其他事情来解决这个问题,或者是否有一些替代方法来生成 TBB 任务而不使用 allocate_root 方法来解决这个问题?

最佳答案

别担心。 TBB 缓存和重用任务内存以提高性能。并且它有特殊的机制来防止生产者-消费者情况下的内存泄漏,在这种情况下,一个线程不断分配任务而另一个线程只消耗它们。

如果你仍然怀疑内存泄漏,则需要更详细的测试来证明内存消耗在初始上升后并没有停止(当然,它是非线性函数)。 TBB 具有用于检测内存泄漏的特殊单元测试:参见 src/test/test_task_leaks.cpp

关于c++ - TBB 生成任务内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38012997/

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