【问题标题】: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_nodemultifunction_nodeindexer_node,没有任何证据表明input_node 进行了缓存。

    顺便说一句,当我在 google 上搜索一个问题并最终在 stackoverflow 上解决我自己的一个问题时,它总是让我有点毛骨悚然,而且时间已经足够长,以至于我不记得发布过这个问题。当我没有看到答案时,也会给情绪增加一些失望。 ;-)

    至少在我回来时,我已经足够习惯于 TBB 数据流,因此很容易找到一种简单的解决方法。

    【讨论】:

      猜你喜欢
      • 2022-10-18
      • 2014-12-19
      • 1970-01-01
      • 2016-08-12
      • 2013-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多