CGraph

CGraph

基于C++的高效DAG调度框架

CGraph是一个纯C++实现的跨平台DAG(有向无环图)执行框架,无第三方依赖。框架支持自定义算子构建和灵活的运行调度,包括依赖、并行和聚合等。CGraph提供流水线、节点、组、参数和切面等功能模块,以及多种工具和插件,可提高开发效率。该框架兼容MacOS、Linux和Windows等主流操作系统及IDE。

CGraph图流程执行框架C++跨平台无依赖并发执行Github开源项目
<p align="left"> <a href="https://github.com/ChunelFeng/CGraph"><img src="https://badgen.net/badge/langs/C++/cyan?list=1" alt="languages"></a> <a href="https://github.com/ChunelFeng/CGraph"><img src="https://badgen.net/badge/os/MacOS,Linux,Windows/cyan?list=1" alt="os"></a> <a href="https://github.com/ChunelFeng/CGraph/stargazers"><img src="https://badgen.net/github/stars/ChunelFeng/CGraph?color=cyan" alt="stars"></a> <a href="https://github.com/ChunelFeng/CGraph/network/members"><img src="https://badgen.net/github/forks/ChunelFeng/CGraph?color=cyan" alt="forks"></a> </p>

awesome-cpp HelloGithub GitHub-Chinese-Top-Charts

中文 | English Readme

<h1 align="center"> CGraph 说明文档 </h1> <img align="right" src="https://yellow-cdn.veclightyear.com/835a84d5/24e8dacf-7ad2-4d03-93ce-a54885df17db.jpg" width="256px">

<b>CGraph</b>是一个基于纯C++的跨平台<b>有向无环图</b>框架,不依赖任何第三方库。</br></br> 使用它,您可以<b>简单地构建自己的操作符,并根据需要描述任何运行调度</b>,例如依赖、并行、聚合等。还提供了一些有用的工具和插件来改进您的项目。</br></br> 以下是教程和联系信息。如果您需要了解更多关于这个仓库的信息,请<b>随时与我们联系</b>

一. 简介

CGraph中文名为【色丶图】,是一套无任何第三方依赖的跨平台图流程执行框架。通过GPipeline(流水线)底层调度,实现了依赖元素依次顺序执行、非依赖元素并发执行的调度功能。

使用者只需继承GNode(节点)类,实现子类的run()方法,并根据需要设定依赖关系,即可实现任务的图化执行或流水线执行。还可以通过设定各种包含多节点信息的GGroup(组),自行控制图的条件判断、循环和并发执行逻辑。

项目提供了丰富的Param(参数)类型,用于不同应用场景下的数据互通。此外,还可以通过添加GAspect(切面)的方式,实现以上各种元素功能的横向扩展;通过引入GAdapter(适配器)对单个节点功能进行加强;或者通过添加GEvent(信号),丰富和优化执行逻辑。

CGraph Skeleton <br>

本工程使用纯C++11标准库编写,无任何第三方依赖。兼容MacOSLinuxWindowsAndroid系统,支持通过 CLionVSCodeXcodeVisual StudioCode::BlocksQt Creator等多款IDE进行本地编译和二次开发,具体编译方式请参考 CGraph 编译说明 <br>

详细功能介绍和用法,请参考 推荐阅读 中的文章内容。项目相关视频在B站持续更新中,欢迎观看交流和一键三连:<br>

二. 使用Demo

MyNode.h

#include "CGraph.h" class MyNode1 : public CGraph::GNode { public: CStatus run() override { printf("[%s], 睡眠1秒 ...\n", this->getName().c_str()); CGRAPH_SLEEP_SECOND(1) return CStatus(); } }; class MyNode2 : public CGraph::GNode { public: CStatus run() override { printf("[%s], 睡眠2秒 ...\n", this->getName().c_str()); CGRAPH_SLEEP_SECOND(2) return CStatus(); } };

main.cpp

#include "MyNode.h" using namespace CGraph; int main() { /* 创建一个流水线,用于设定和执行流图信息 */ GPipelinePtr pipeline = GPipelineFactory::create(); GElementPtr a, b, c, d = nullptr; /* 注册节点之间的依赖关系 */ pipeline->registerGElement<MyNode1>(&a, {}, "nodeA"); pipeline->registerGElement<MyNode2>(&b, {a}, "nodeB"); pipeline->registerGElement<MyNode1>(&c, {a}, "nodeC"); pipeline->registerGElement<MyNode2>(&d, {b, c}, "nodeD"); /* 执行流图框架 */ pipeline->process(); GPipelineFactory::remove(pipeline);

return 0; }


![CGraph演示](https://yellow-cdn.veclightyear.com/835a84d5/922d749e-4b46-46f0-a396-87ad9ca0dd4c.jpg)
<br>
如上图所示,图结构执行时,首先执行`a`节点。`a`节点执行完毕后,并行执行`b`和`c`节点。`b`和`c`节点全部执行完毕后,再执行`d`节点。

## 三. 推荐阅读

* [纯序员给你介绍图化框架的简单实现——执行逻辑](http://www.chunel.cn/archives/cgraph-run-introduce)
* [纯序员给你介绍图化框架的简单实现——循环逻辑](http://www.chunel.cn/archives/cgraph-loop-introduce)
* [纯序员给你介绍图化框架的简单实现——参数传递](http://www.chunel.cn/archives/cgraph-param-introduce)
* [纯序员给你介绍图化框架的简单实现——条件判断](http://www.chunel.cn/archives/cgraph-condition-introduce)
* [纯序员给你介绍图化框架的简单实现——面向切面](http://www.chunel.cn/archives/cgraph-aspect-introduce)
* [纯序员给你介绍图化框架的简单实现——函数注入](http://www.chunel.cn/archives/cgraph-function-introduce)
* [纯序员给你介绍图化框架的简单实现——消息机制](http://www.chunel.cn/archives/cgraph-message-introduce)
* [纯序员给你介绍图化框架的简单实现——事件触发](http://www.chunel.cn/archives/cgraph-event-introduce)
* [纯序员给你介绍图化框架的简单实现——超时机制](http://www.chunel.cn/archives/cgraph-timeout-introduce)
* [纯序员给你介绍图化框架的简单实现——线程池优化(一)](http://www.chunel.cn/archives/cgraph-threadpool-1-introduce)
* [纯序员给你介绍图化框架的简单实现——线程池优化(二)](http://www.chunel.cn/archives/cgraph-threadpool-2-introduce)
* [纯序员给你介绍图化框架的简单实现——线程池优化(三)](http://www.chunel.cn/archives/cgraph-threadpool-3-introduce)
* [纯序员给你介绍图化框架的简单实现——线程池优化(四)](http://www.chunel.cn/archives/cgraph-threadpool-4-introduce)
* [纯序员给你介绍图化框架的简单实现——线程池优化(五)](http://www.chunel.cn/archives/cgraph-threadpool-5-introduce)
* [纯序员给你介绍图化框架的简单实现——线程池优化(六)](http://www.chunel.cn/archives/cgraph-threadpool-6-introduce)
* [纯序员给你介绍图化框架的简单实现——性能优化(一)](http://www.chunel.cn/archives/cgraph-performance-1)
* [纯序员给你介绍图化框架的简单实现——距离计算](http://www.chunel.cn/archives/cgraph-distance-introduce)
  <br><br>
* [CGraph 主打歌——《听码农的话》](http://www.chunel.cn/archives/listen-to-coder)
* [聊聊我写CGraph的这一年](http://www.chunel.cn/archives/cgraph-anniversary-introduce)
* [从零开始主导一款收录于awesome-cpp的项目,是一种怎样的体验?](http://www.chunel.cn/archives/cgraph-awesome-cpp)
* [炸裂!CGraph性能全面超越taskflow之后,作者却说他更想...](http://www.chunel.cn/archives/cgraph-compare-taskflow-v1)
* [以图优图:CGraph中计算dag最大并发度思路总结](http://www.chunel.cn/archives/cgraph-max-para-size)
* [一文带你了解练习时长两年半的CGraph](http://www.chunel.cn/archives/cgraph-kunanniversary-introduce)
* [CGraph作者想知道,您是否需要一款eDAG调度框架](http://www.chunel.cn/archives/cgraph-extended-dag)  
<br>

## 四. 关联项目

* [GraphANNS](https://github.com/whenever5225/GraphANNS) : 基于CGraph的图形近似最近邻搜索
* [CThreadPool](https://github.com/ChunelFeng/CThreadPool) : 一个简单好用、功能强大、性能优异、跨平台的C++线程池
* [taskflow](https://github.com/taskflow/taskflow) : 通用并行和异构任务编程系统
* [awesome-cpp](https://github.com/fffaraz/awesome-cpp) : 一个精选的优秀C++(或C)框架、库、资源和闪亮事物列表。受awesome-...事物的启发。
* [awesome-workflow-engines](https://github.com/meirwah/awesome-workflow-engines) : 优秀开源工作流引擎的精选列表
* [nndeploy](https://github.com/DeployAI/nndeploy) : nndeploy是一款模型端到端部署框架。以多端推理以及基于有向无环图模型部署为内核,致力为用户提供跨平台、简单易用、高性能的模型部署体验。
* [KuiperInfer](https://github.com/zjhellofss/KuiperInfer) : 带你从零实现一个高性能的深度学习推理库,支持大模型 llama2 、Unet、Yolov5、Resnet等模型的推理。
* [OGraph](https://github.com/symphony09/ograph) : 使用Go构建管道的简单方法。

[![Star History Chart](https://api.star-history.com/svg?repos=ChunelFeng/CGraph&type=Date)](https://star-history.com/#ChunelFeng/CGraph&Date)

------------
<details>
<summary><b>附录-1. 版本信息</b></summary>
[2021.05.04 - v1.0.0 - Chunel]
* 提供图化执行功能,支持非依赖节点并行计算

[2021.05.09 - v1.1.0 - Chunel]
* 优化图执行过程中的并发度

[2021.05.18 - v1.1.1 - Chunel]
* 添加节点`name`和`session`信息

[2021.05.23 - v1.2.0 - Chunel]
* 提供单节点循环执行功能

[2021.05.29 - v1.3.0 - Chunel]
* 提供`cluster`(簇)和`region`(区域)划分和循环执行功能
* 提供`tutorial`内容,包含多种使用样例

[2021.06.14 - v1.4.0 - Chunel]
* 提供`param`(参数)传递机制
* 提供`group`(组)功能,多节点模块统一继承自`group`模块
* 添加对Linux系统的支持

[2021.06.20 - v1.4.1 - Chunel]
* 提供`condition`(条件)功能
* 添加对Windows系统的支持

[2021.06.24 - v1.5.0 - Chunel]
* 提供`pipeline`工厂创建方法
* 更新`tutorial`内容

[2021.07.07 - v1.5.1 - Chunel]
* 优化线程池功能。实现任务盗取机制

[2021.07.11 - v1.5.2 - Chunel]
* 优化线程池功能。实现线程数量自动调节机制

[2021.07.31 - v1.5.3 - Chunel]
* 优化线程池功能。实现任务批量获取功能,优化任务盗取机制

[2021.08.29 - v1.6.0 - Chunel]
* 提供多`pipeline`功能,优化底层逻辑
* 更新`tutorial`内容

[2021.09.19 - v1.6.1 - Chunel]
* 提供`Lru`算子、`Trie`算子和模板节点功能,优化底层逻辑
* 更新`tutorial`内容

[2021.09.29 - v1.7.0 - Chunel]
* 提供`aspect`(切面)功能,用于横向扩展`node`或`group`功能
* 更新`tutorial`内容

[2021.10.07 - v1.7.1 - Chunel]
* 优化`aspect`(切面)实现逻辑,提供切面参数功能,提供批量添加切面功能
* 更新`tutorial`内容

[2021.11.01 - v1.8.0 - Chunel]
* 提供`adapter`(适配器)功能,提供`singleton`适配器功能
* 优化`pipeline`执行逻辑
* 更新`tutorial`内容

[2021.12.18 - v1.8.1 - Chunel]
* 优化了返回值`CStatus`信息

[2022.01.02 - v1.8.2 - Chunel]
* 提供节点执行超时自动退出功能,提供`task group`(任务组)功能
* 提供线程池配置参数设置方法

[2022.01.23 - v1.8.3 - Chunel]
* 提供`function`适配器,实现函数式编程功能
* 提供线程优先级调度功能,提供线程绑定CPU执行功能
* 更新`tutorial`内容

[2022.01.31 - v1.8.4 - Chunel]
* 提供`node`(节点)异步执行的功能

[2022.02.03 - v1.8.5 - Chunel]
* 提供`daemon`(守护)功能,用于定时执行非流图中任务
* 更新`tutorial`内容

[2022.04.03 - v1.8.6 - Chunel]
* 提供`DistanceCalculator`算子,用于实现任意数据类型、任意距离类型的计算
* 更新`tutorial`内容

[2022.04.05 - v2.0.0 - Chunel]
* 提供`domain`(领域)功能,提供`Ann`领域抽象模型,开始支持个别专业方向
* 提供hold执行机制
* 更新`tutorial`内容

[2022.05.01 - v2.0.1 - Chunel]
* 优化`pipeline`注册机制,支持init方法自定义顺序执行
* 提供一键编译脚本

[2022.05.29 - v2.1.0 - Chunel]
* 提供`element`参数写入方法
* 提供针对C++14版本的支持
* 更新`tutorial`内容

[2022.10.03 - v2.1.1 - Chunel]
* 提供线程池中的任务优先级机制
* 优化`group`执行逻辑

[2022.11.03 - v2.2.0 - Chunel]
* 提供`message`(消息)功能,主要用于完成不同`pipeline`之间的数据传递
* 更新`tutorial`内容

[2022.12.24 - v2.2.1 - Chunel]
* 提供`TemplateNode`(模板节点)功能,用于优化参数传参方式
* 更新`tutorial`内容

[2022.12.25 - v2.2.2 - [yeshenyong](https://github.com/yeshenyong)]
* 优化图执行逻辑

[2022.12.30 - v2.2.3 - Chunel]
* 提供`message`发布订阅功能
* 提供执行引擎切换功能

[2023.01.21 - v2.3.0 - Chunel]
* 提供`event`(事件)功能
* 提供`CGraph Intro.xmind`文件,通过脑图的方式,介绍了CGraph的整体逻辑

[2023.01.25 - v2.3.1 - Chunel]
* 提供针对C++11版本的支持。感谢 [MirrorYuChen](https://github.com/MirrorYuChen) 提供相关解决方案

[2023.02.10 - v2.3.2 - Chunel]
* 优化调度策略,提供调度参数配置接口
* 提供英文版本readme.md

[2023.02.12 - v2.3.3 - [yeshenyong](https://github.com/yeshenyong), Chunel]
* 提供graphviz可视化图展示功能
* 提供参数链路追踪功能

[2023.02.22 - v2.3.4 - Chunel]
* 优化Windows系统下调度机制
* 优化`param`机制和`event`(事件)机制
[2023.03.25 - v2.4.0 - [woodx](https://github.com/woodx9), Chunel]
* 提供可运行的Docker环境和构建Docker环境的Dockerfile文件
* 提供`pipeline`调度资源控制机制
* 优化调度性能

[2023.05.05 - v2.4.1 - Chunel]
* 提供线程绑定执行功能
* 提供获取`pipeline`最大并发度的方法。感谢 [Hanano-Yuuki](https://github.com/Hanano-Yuuki) 提供相关解决方案
* 提供`pipeline`异步执行功能和执行时退出功能

[2023.06.17 - v2.4.2 - Chunel]
* 提供`MultiCondition`(多条件)功能
* 提供`pipeline`暂停执行和恢复执行功能

[2023.07.12 - v2.4.3 - Chunel]
* 优化`CStatus`功能,添加了异常定位信息

[2023.09.05 - v2.5.0 - Chunel]
* 提供perf功能,用于`pipeline`的性能分析
* 提供`element`的超时机制
* 提供`some`(部分)功能,优化`pipeline`的异步执行方式

[2023.09.15 - v2.5.1 - Chunel]
* 提供`fence`(栅栏)功能
* 提供`coordinator`(协调)功能

[2023.11.06 - v2.5.2 - Chunel]
* 优化`message`(消息)功能,可以设定写入阻塞时的处理方式,减少内存复制次数
* 添加`example`相关内容,针对不同行业提供一些简单实现
* 优化调度性能

[2023.11.15 - v2.5.3 - Chunel]
* 提供`proto`定义文件
* 添加`mutable`(异变)功能,提供依赖关系注册语法糖

[2024.01.05 - v2.5.4 - Chunel]
* 提供`test`内容,包含性能和功能方面的测试用例
* 优化`event`(事件)机制,支持异步等待功能

[2024.07.18 - v2.6.0 - [PaPaPig-Melody](https://github.com/PaPaPig-Melody), Chunel]
* 提供`pipeline`的拓扑执行方式
* 提供判定`element`之间是否有依赖关系的方法
* 提供Bazel编译方式
* 优化perf功能

[2024.07.27 - v2.6.1 - Chunel]
* 提供`pipeline`的静态执行方式
* 优化`event`(事件)机制,异步事件可以等待结束

附录-2. 感谢

* 感谢 [Doocs 微信公众号](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzIxNjA5ODQ0OQ==&action=getalbum&album_id=1989460124624551937&scene=173&from_msgid=2654703194&from_itemidx=1&count=3&nolastread=1#wechat_redirect) 刊登相关介绍文档,欢迎加入 [Doocs 开源社区](https://github.com/doocs)

* 感谢《HelloGithub》期刊介绍和推荐:[HelloGithub 第70期](https://github.com/521xueweihan/HelloGitHub/blob/master/content/HelloGitHub70.md)

* 感谢《Github中文排行榜》介绍和推荐:[Github中文排行榜 总榜-C++分类](https://github.com/GrowingGit/GitHub-Chinese-Top-Charts/blob/master/content/charts/overall/software/CPP.md)

* 感谢 [awesome-cpp](https://github.com/fffaraz/awesome-cpp) 的推荐,我们都知道,这是全世界最权威的C++项目推荐列表
* 感谢`Taskflow团队`的推荐:[awesome-parallel-computing](https://github.com/taskflow/awesome-parallel-computing),我们一直将 [taskflow](https://github.com/taskflow/taskflow) 视为榜样
* 感谢 [awesome-workflow-engines](https://github.com/meirwah/awesome-workflow-engines) 的推荐
* 感谢各位开发者 [CONTRIBUTORS](https://github.com/ChunelFeng/CGraph/blob/main/CONTRIBUTORS.md) 为项目做出的贡献
* 感谢所有为`CGraph`项目提出意见和建议的朋友,在此不一一提及。随时欢迎大家加入,一起共建

附录-3. 联系方式

* 微信: ChunelFeng(欢迎扫描上方二维码,添加作者为好友。请简单备注个人信息^_^)
* 邮箱: chunel@foxmail.com
* 源码: https://github.com/ChunelFeng/CGraph
* 论坛: www.chunel.cn

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

热门AI工具AI办公办公工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

模型训练热门AI工具内容创作智能问答AI开发讯飞星火大模型多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

热门AI工具生产力协作转型TraeAI IDE
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

AI助手热门AI工具AI创作AI辅助写作讯飞绘文内容运营个性化文章多平台分发
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多