【问题标题】:Intel TBB input_node output value caching delays resource release. Workaround ideas?Intel TBB input_node 输出值缓存延迟资源释放。解决方法的想法?
【发布时间】:2020-07-15 21:41:23
【问题描述】:
我是英特尔线程构建模块的新手,并且正在使用流程图组件。到目前为止,它工作得很好。我在节点之间的消息是 shared_ptr 类型,因此它们是可复制构造的、轻量级的,并且底层资源在图循环结束时被处理掉......
来自我的input_node 的消息除外。 input_node 被设计成保存其最后一个输出值的副本。这意味着input_node 的值输出所持有的任何资源在input_node 生成下一个输出之前不会被释放。
这似乎与 API 的其余部分不协调/不一致。关于如何处理它的任何想法?我想我可以编写自己的节点,但我宁愿不这样做。我应该只使用try_put 吗?如果是这样,当我提供完输入后,如何让图表知道,以便wait_for_all 不会提前结束?
【问题讨论】:
标签:
c++
shared-ptr
tbb
reference-counting
tbb-flow-graph
【解决方案1】:
一个简单的解决方法是让input_node 生成一条不使用shared_ptr 类型的消息,并立即提供给function_node,该function_node 的输出确实使用了您想要传播的任何shared_ptr 类型,并且在何时收集传播完成。感觉有点傻,但效果很好。除了input_node 之外,可能还有节点进行缓存,但我使用的是function_node、multifunction_node 和indexer_node,没有任何证据表明input_node 进行了缓存。
顺便说一句,当我在 google 上搜索一个问题并最终在 stackoverflow 上解决我自己的一个问题时,它总是让我有点毛骨悚然,而且时间已经足够长,以至于我不记得发布过这个问题。当我没有看到答案时,也会给情绪增加一些失望。 ;-)
至少在我回来时,我已经足够习惯于 TBB 数据流,因此很容易找到一种简单的解决方法。