繁体   English   中英

TBB产生任务内存泄漏

[英]TBB spawn task memory leak

我们有一段代码利用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没有按照我们期望的那样,一旦他们完成执行,就从我们正在创建的TBBallocate_root任务中释放内存。

为什么会这样呢? 我们是否还需要做其他事情来解决此问题,或者是否有其他方法可以生成TBB任务而不使用可解决此问题的allocate_root方法?

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

如果您仍然怀疑内存泄漏,则需要进行更详细的测试,以证明内存消耗在初始增加后不会停止(当然,它是非线性函数)。 TBB具有用于检测内存泄漏的特殊单元测试:请参阅src/test/test_task_leaks.cpp

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM