ChunelFeng / CGraph

【A common used C++ DAG framework】 一个通用的、无三方依赖的、跨平台的、收录于awesome-cpp的、基于流图的并行计算框架。欢迎star & fork & 交流
http://www.chunel.cn
MIT License
1.76k stars 321 forks source link

cgraph能否在gnode的run方法中获取父节点或子节点对象,并执行父子节点方法获取相关信息? #118

Closed starfisher closed 1 year ago

starfisher commented 1 year ago

获取父节点或子节点,也可以帮助实现有向图的遍历操作

starfisher commented 1 year ago

框架缺少edge边的概念,比如节点与节点连接之间用param包装成固定的edge边可不可以

ChunelFeng commented 1 year ago

您好,首先,感谢您的关注。 色图中,没有edge的概念,目的是为了使得 node 和node之间的链接相对更简单一些。 同一个pipeline中,节点之间的信息传递,均通过 GParam 类传递,满足了数据互通的需求。

遍历有向图的操作,在 _GEngine 文件夹中有对应的逻辑,按理说不需要外部感知。 在 element.h(node的父类) 中,有对应的记录信息。如果有特别需要的话,可以修改为 protected,或者自行封装函数获取。

private:
    std::set<GElement *> run_before_;                // 被依赖的节点
    std::set<GElement *> dependence_;                // 依赖的节点信息

by the way,想了解一下,是否在实际开发中,遇到过类似 节点执行的时候,需要知道自己的 father或者 son是 谁的情况。 如果有的话,请列举。我们考虑在项目中,给类似的信息,开放出来,方便使用。

再次感谢您的关注。欢迎随时交流指教

starfisher commented 1 year ago

是的,有实际开发,上面是我截的一个简单的图,每个算子计算的时候会从father节点获取父节点输出结果,作为本节点的算法输入。

个人如果使用色图的话,确实可能会考虑修改gelement.h,并封装edge的打算。

starfisher commented 1 year ago

当然还有其他例子,cicd构建部署工具以及node-RED数据转发这种类型的应用应该也需要。 image

image

ChunelFeng commented 1 year ago

收到,感谢您的意见。感觉这种应该属于类似 rpa 的 saas 服务类应用场景吧。

在色图中,节点的 run()方法,返回值代表其运行的状态,不是它反馈给下一层结果值哈。 色图中,传递计算值的方法,是通过 GParam 封装,实现夸节点传递。参考:参数传递的例子 所以,实际上也是可以做到您说的这种效果的。

我们接下来,也会考虑通过接口的形式,在当前节点执行的时候,也可以获取到 father 和 son的信息。 感谢您的关注和建议

ChunelFeng commented 1 year ago

您好,最新版本的 GElement.h 文件中,已经提供了 buildRelation() 方法, 方便获取当前节点的 前驱和后继信息,希望对您有所帮助。

再次感谢您的关注

starfisher commented 1 year ago

好的,谢谢