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