Chinois |
Documentation CGRAPH

CGRAPH est une plate-forme multiplaterection dans un cadre cyclique G Raph basé sur un C ++ pur sans aucune dépendance tierce.
Avec lui, vous pouvez simplement construire vos propres opérateurs et décrire tous les horaires de fonctionnement comme vous avez besoin, tels que la dépendance, la paralling, l'agrégation, etc.
Les tutoriels et les coordonnées sont affichés comme suit.
1. Introduction
CGraph est appelé [couleur, image] en chinois, et est un cadre d'exécution de processus de graphique multiplateforme sans dépendances tierces. Grâce à la planification sous-jacente GPipeline (pipeline), il fournit la fonction de l'exécution séquentielle des éléments dépendants et de l'exécution simultanée d'éléments non dépendants dans la planification EDAG.
Les utilisateurs n'ont qu'à hériter GNode (Node), implémenter la méthode run() de la sous-classe et définir les dépendances au besoin pour réaliser l'exécution graphique ou l'exécution de pipeline de la tâche. Il est également possible de définir divers GGroup (groupes) contenant des informations multi-nœuds pour contrôler le jugement conditionnel, la boucle et la logique d'exécution simultanée du graphique.
Le projet fournit un type de Param riche (paramètre) pour l'interopérabilité des données dans différents scénarios d'application. De GAdapter , les différentes fonctions des éléments peuvent être étendues horizontalement en ajoutant GEvent GAspect ;

Ce projet est écrit à l'aide de la bibliothèque standard Pure C ++ 11 et n'a pas de dépendances tierces. Compatible avec les systèmes MacOS , Linux , Windows et Android , il prend en charge la compilation locale et le développement secondaire via CLion , VSCode , Xcode , Visual Studio , Code::Blocks , Qt Creator et autres IDE.
Pour une introduction et une utilisation fonctionnelles détaillées, veuillez vous référer au contenu de l'article dans yimianzhiyuan.com. Les vidéos connexes sont mises à jour en continu sur B.com.
- [B alent la vidéo] CGRAPH INTRODUCTION
- [B Station vidéo] Chapitre fonctionnel CGRAPH
- Une introduction complète à tous les noms et modules fonctionnels du projet CGRAPH
- Sur la base du processus de codage réel, les scénarios d'utilisation spécifiques, les usages et les problèmes résolus de chaque fonction sont introduits en détail.
- Convient aux chaussures pour enfants qui veulent avoir une compréhension complète des fonctionnalités et commencer rapidement avec CGRAPH
- Convient aux chaussures pour enfants intéressées par la programmation multi-thread
- 【BIDE VIDÉO SITE】 CGRAPH
- 【BATING BATING VIDEO】 CGRAPH Partage
2. Utilisez la démo
Mynode.h
# include " CGraph.h "
class MyNode1 : public CGraph ::GNode {
public:
CStatus run () override {
printf ( " [%s], sleep for 1 second ... n " , this -> getName (). c_str ());
CGRAPH_SLEEP_SECOND ( 1 )
return CStatus ();
}
};
class MyNode2 : public CGraph ::GNode {
public:
CStatus run () override {
printf ( " [%s], sleep for 2 second ... 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 ;
}
Comme le montre la figure ci-dessus, lorsque la structure du graphique est exécutée, le nœud a est d'abord exécuté. Une fois le nœud a exécuté, les nœuds b et c sont exécutés en parallèle. Une fois que tous les nœuds b et c sont exécutés, le nœud d est exécuté.
3. Lecture recommandée
- Pure Serialist vous présente la simple implémentation de la logique de framework graphique
- Pure Serialist vous présente la simple implémentation de la logique du cycle de framework graphique
- Le séquenceur pur vous présente la simple implémentation de la livraison de paramètre de cadre graphique
- Pure Serialist vous présente la simple implémentation du cadre graphique - Jugement conditionnel
- Les suites pures vous présentent l'implémentation simple de cadres graphiques - orienté vers la face
- Le séquenceur pur vous présente la simple implémentation de l'injection de la fonction de cadre graphique
- Pure Serialist vous présente la simple implémentation du cadre graphique - le mécanisme du message
- Pure Serialist vous présente la simple implémentation du cadre graphique - déclenchement d'événements
- Le séquenceur pur vous présente la simple mise en œuvre du mécanisme graphique du cadre de temps
- Le séquenceur pur vous présente la simple implémentation de l'optimisation graphique du pool de framework-thread (i)
- Le séquenceur pur vous présente la simple implémentation de l'optimisation graphique du pool de framework-thread (II)
- Le séquenceur pur vous présente la simple implémentation de l'optimisation graphique du pool de framework-thread (III)
- Le séquenceur Pure vous présente la simple implémentation de l'optimisation graphique du pool de framework-thread (IV)
- Le séquenceur Pure vous présente la simple implémentation de l'optimisation graphique du pool de framework-thread (v)
- Le séquenceur Pure vous présente la simple implémentation de l'optimisation graphique du pool de framework-thread (VI)
- Le séquenceur Pure vous présente l'implémentation simple de l'optimisation graphique-cadre-performance (I)
- Le séquenceur pur vous présente la simple implémentation de l'optimisation graphique-cadre-performance (II)
- Les suites pures vous présentent la simple mise en œuvre du calcul graphique-framework-distance
- La chanson titre de CGraph - "Écoutez le codeur"
- Parler de cette année, j'ai écrit cgraph
- Qu'est-ce que ça fait de diriger un projet inclus dans Awesome-CPP à partir de zéro?
- Éclater! Après que la performance de CGRAPH ait dépassé le flux de tâches de manière complète, l'auteur a déclaré qu'il voulait ...
- Utilisation d'optimisation de la carte: Résumé des idées pour calculer la concurrence maximale de DAG dans CGRAPH
- Un article vous aidera à en savoir plus sur CGRAPH, qui dure deux ans et demi.
- Les auteurs CGRAPH veulent savoir si vous avez besoin d'un cadre de planification EDAG
- Réduction des bords et amélioration de l'efficacité: Résumé des idées de coupe des bords redondantes dans CGRAPH
IV.
- Graphanns: Recherche de voisin le plus proche approximative basée sur des graphiques travaillant sur CGRAPH
- Cthreadpool: une performance simple et facile à utiliser, puissante, excellente, piscine de threads C ++ multiplateforme
- CGRAPH-LITE: tête uniquement, CGRAPH le plus simple, avec une fonction d'exécuteur DAG et de param
- Awesome-CPP: Une liste organisée de frameworks C ++ (ou C) impressionnants, de bibliothèques, de ressources et de choses brillantes.
- Awesome-Workflow-Engines: une liste organisée de moteurs de workflow open source impressionnants
- Taskflow: un système de programmation de tâches parallèle et hétérogène à usage général
- [VIDÉO de la station B] Test réel de la comparaison des performances entre CGraph et Taskflow
- Torchpipe: servir à l'intérieur du pytorch
- [BATINE BATION B] TORCHPIPE DE PROJET Open SOURC - AI MOTEUR EN LIGNE HAUTE RECORT ET LA GUERRE PRATIQUE
- NNDEPLOY: NNDEPLOY est un cadre de déploiement de bout en bout du modèle. Avec le raisonnement multi-end et le déploiement de modèle de graphe acyclique dirigé comme noyau, il s'engage à fournir aux utilisateurs une expérience de déploiement de modèle de modèle simple, simple et haute performance.
- [B Station B VIDÉO] NNDEPLOY --- Framework End-déploiment pour le déploiement de bout en bout du modèle AI (1)
- [BATING VIDÉO] NNDEPLOY --- Cadre de déploiement de bout en bout du modèle d'IA (2)
- KUIPERINFER: vous emmène pour implémenter une bibliothèque d'inférence en apprentissage profond haute performance à partir de zéro, en soutenant l'inférence de modèles tels que LLAMA2, UNET, YOLOV5 et Resnet. Implémentez une bibliothèque d'inférence d'apprentissage en profondeur de haute performance étape par étape
- Video de la station B】 KuipeRinfer Framework inférieur - Un cadre de raisonnement orienté vers l'enseignement
- Ograph: un moyen simple de construire un pipeline avec GO.
- [B Station B. Bigwig d'Alibaba Cloud: Ograph - Carte de streaming basée sur GO Planification de deux ou trois choses
Annexe-1.
[2021.05.04 - v1.0.0 - Chunel]
- Fournir une fonction d'exécution graphique et prendre en charge l'informatique parallèle des nœuds non dépendants
[2021.05.09 - v1.1.0 - Chunel]
- Optimiser la concurrence lors de l'exécution du graphique
[2021.05.18 - v1.1.1 - Chunel]
- Ajouter
name du nœud et les informations session
[2021.05.23 - v1.2.0 - Chunel]
- Fournir une fonction d'exécution de boucle à nœud
[2021.05.29 - v1.3.0 - Chunel]
- Fournir des fonctions de division et d'exécution de la
cluster et de la région) et region (région) - Fournir un contenu
tutorial , y compris plusieurs exemples d'utilisation
[2021.06.14 - v1.4.0 - Chunel]
- Fournir un mécanisme de livraison
param (paramètre) - Fournir une fonction
group (groupe), les modules multi-nœuds sont hérités de modules group uniformément - Ajouter la prise en charge des systèmes Linux
[2021.06.20 - V1.4.1 - Chunel]
- Fourniture de
condition (condition) - Ajouter la prise en charge des systèmes Windows
[2021.06.24 - v1.5.0 - Chunel]
- Fournir une méthode de création d'usine
pipeline - Mettre à jour le contenu
tutorial
[2021.07.07 - v1.5.1 - Chunel]
- Optimiser la fonctionnalité du pool de threads. Mettre en œuvre le mécanisme de vol de tâche
[2021.07.11 - v1.5.2 - Chunel]
- Optimiser la fonctionnalité du pool de threads. Mettre en œuvre le mécanisme de réglage automatique du thread
[2021.07.31 - v1.5.3 - Chunel]
- Optimiser la fonctionnalité du pool de threads. Implémentez la fonction d'acquisition par lots de tâche et optimisez le mécanisme de vol de tâche
[2021.08.29 - v1.6.0 - Chunel]
- Fournir plusieurs fonctions
pipeline pour optimiser la logique sous-jacente - Mettre à jour le contenu
tutorial
[2021.09.19 - v1.6.1 - Chunel]
- Fournit des fonctions de l'opérateur
Lru , de l'opérateur Trie et du nœud de modèle pour optimiser la logique sous-jacente - Mettre à jour le contenu
tutorial
[2021.09.29 - V1.7.0 - Chunel]
- Fournit une fonction
aspect pour étendre node extérieur ou la fonction group - Mettre à jour le contenu
tutorial
[2021.10.07 - v1.7.1 - Chunel]
- Optimiser la logique d'implémentation de
aspect (section), fournir une fonction de paramètre de section et une fonction de section Ajouter un lot - Mettre à jour le contenu
tutorial
[2021.11.01 - v1.8.0 - Chunel]
- Fournir une fonction
adapter et une fonction d'adaptateur singleton - Optimiser la logique d'exécution
pipeline - Mettre à jour le contenu
tutorial
[2021.12.18 - v1.8.1 - Chunel]
- Valeur de retour optimisée Informations
CStatus
[2022.01.02 - v1.8.2 - Chunel]
- Fournit la fonction de sortie automatique du délai d'exécution du nœud et fournit une fonction
task group - Fournir la méthode du paramètre de configuration du pool de threads
[2022.01.23 - v1.8.3 - Chunel]
- Fournit l'adaptateur
function pour implémenter les fonctions de programmation fonctionnelle - Fournir une fonction de planification de priorité de thread et fournir une fonction d'exécution du processeur liée au thread
- Mettre à jour le contenu
tutorial
[2022.01.31 - v1.8.4 - Chunel]
- Fournit la fonction de l'exécution asynchrone
node (nœud)
[2022.02.03 - v1.8.5 - Chunel]
- Fournit une fonction
daemon pour exécuter régulièrement des tâches dans les graphiques non-flux - Mettre à jour le contenu
tutorial
[2022.04.03 - v1.8.6 - Chunel]
- Fournir un opérateur
DistanceCalculator pour implémenter les calculs de tout type de données et de tout type de distance - Mettre à jour le contenu
tutorial
[2022.04.05 - v2.0.0 - Chunel]
- Fournir une fonction
domain (domaine), fournir un modèle de résumé du domaine Ann et commencer à soutenir les directions professionnelles individuelles - Fournir un mécanisme d'exécution
- Mettre à jour le contenu
tutorial
[2022.05.01 - v2.0.1 - Chunel]
- Optimiser le mécanisme d'enregistrement
pipeline et prendre en charge l'exécution des commandes personnalisées des méthodes INIT - Fournir des scripts de compilation en un clic
[2022.05.29 - v2.1.0 - Chunel]
- Fournir la méthode d'écriture des paramètres
element - Fournir une prise en charge de la version C ++ 14
- Mettre à jour le contenu
tutorial
[2022.10.03 - v2.1.1 - Chunel]
- Fournir un mécanisme de priorité de tâche dans le pool de threads
- Optimiser la logique d'exécution
group
[2022.11.03 - v2.2.0 - Chunel]
- Fournir une fonction
message (message), principalement utilisée pour terminer la transmission de données entre les différents pipeline - Mettre à jour le contenu
tutorial
[2022.12.24 - v2.2.1 - Chunel]
- Fournit la fonction
TemplateNode pour optimiser la méthode de transfert de paramètres - Mettre à jour le contenu
tutorial
[2022.12.25 - V2.2.2 - Yeshenyong]
- Optimiser la logique d'exécution du graphique
[2022.12.30 - v2.2.3 - Chunel]
- Fournir une fonction de publication
message et d'abonnement - Fournit la fonction de commutation du moteur d'exécution
[2023.01.21 - v2.3.0 - Chunel]
- Fournir une fonction
event (événement) - Fournissez le fichier
CGraph Intro.xmind , qui introduit la logique globale de CGRAPH à travers le diagramme cérébral.
[2023.01.25 - v2.3.1 - Chunel]
- Fournit une prise en charge de la version C ++ 11. Merci à Mirroryuchen pour avoir fourni des solutions pertinentes
[2023.02.10 - v2.3.2 - Chunel]
- Optimiser les stratégies de planification et fournir l'interface de configuration des paramètres de planification
- Version anglaise Readme.md est disponible
[2023.02.12 - V2.3.3 - Yeshenyong, Chunel]
- Fournir une fonction d'affichage d'image visuelle Graphviz
- Fournir la fonction de suivi des liens de paramètre
[2023.02.22 - v2.3.4 - Chunel]
- Optimiser le mécanisme de planification sous Windows System
- Optimiser le mécanisme et le mécanisme de
param event (événement)
[2023.03.25 - V2.4.0 - Woodx, Chunel]
- Fournir un environnement Docker Runnable et des fichiers Dockerfile pour la construction d'environnements Docker
- Fournir un mécanisme de gestion des ressources de planification
pipeline - Optimiser les performances de planification
[2023.05.05 - V2.4.1 - Chunel]
- Fournir une fonction d'exécution de liaison au thread
- Fournit
pipeline . Merci à Hanano-Yuuki d'avoir fourni des solutions pertinentes - Fournit une fonction d'exécution asynchrone et une fonction de sortie
pipeline pendant l'exécution
[2023.06.17 - v2.4.2 - Chunel]
- Fournit une fonction
MultiCondition (multi-conditions) - Fournit des fonctions d'exécution et d'exécution de CV de la pause
pipeline
[2023.07.12 - V2.4.3 - Chunel]
- Optimiser la fonction
CStatus et ajouter des informations de positionnement d'exception
[2023.09.05 - v2.5.0 - Chunel]
- Fournit une fonction perf pour l'analyse des performances
pipeline - Fournit un mécanisme de délai de temps pour
element - Fournir
some fonctions (partielles) pour optimiser l'exécution asynchrone du pipeline
[2023.09.15 - V2.5.1 - Chunel]
- Fournit une fonction
fence - Fournit la fonction
coordinator (coordinateur)
[2023.11.06 - v2.5.2 - Chunel]
- Optimiser la fonction de
message (message), qui peut définir la méthode de traitement lors de l'écriture de blocage et réduire le nombre de temps de copie de mémoire - Ajouter un contenu lié
example pour fournir des implémentations simples pour différentes industries - Optimiser les performances de planification
[2023.11.15 - v2.5.3 - Chunel]
- Fournir un fichier de définition
proto - Ajouter une fonction
mutable pour fournir une syntaxe d'enregistrement de dépendance sucre
[2024.01.05 - v2.5.4 - Chunel]
- Fournir du contenu
test , y compris les cas de tests de performance et de fonctionnalité - Optimiser le mécanisme
event (événement) et supporter la fonction d'attente asynchrone
[2024.07.18 - V2.6.0 - Papapig-Mélody, Chunel]
- Fournit le moyen d'exécuter la topologie
pipeline - Fournir une méthode pour déterminer s'il existe une dépendance entre
element - Fournir une méthode de compilation bazel
- Optimiser la fonction perf
[2024.09.17 - v2.6.1 - Chunel]
- Fournit une méthode d'exécution statique de
pipeline et fournit un mécanisme de micro-tâche basé sur l'exécution statique - Fournit une fonction d'écrêtage de
pipeline pour supprimer les dépendances en double entre element - Fournit une méthode pour supprimer les dépendances
element - Optimiser le mécanisme
event (événement), les événements asynchrones peuvent attendre la fin - Libérez le projet CGRAPH-LITE, offrant une composition DAG simple et des fonctions de transfert de paramètres. L'interface est entièrement compatible et peut être commandé à ce projet de manière transparente
[2024.11.16 - v2.6.2 - Chunel]
- Optimiser le mécanisme d'exclusion mutuelle des paramètres et obtenir des performances
- Correction du problème de l'attente de l'exception du fil auxiliaire
- Mettre à jour le contenu
tutorial
Annexe-2.

- Merci à l'introduction et à la recommandation de "Github Chinese Classes": GitHub Chinese Classes Total - C ++ Catégorie

- Grâce à la recommandation de Awesome-CPP, nous le savons tous, c'est la liste de recommandations la plus faisant autorité pour le projet CPP au monde
- Merci à la recommandation de
Taskflow Group : Awesome-Paralal Computing, et nous traitons toujours Taskflow comme un modèle - Merci à la recommandation de Work-Workflow-Engines
- Merci à tous les contributeurs de développeurs pour leur contribution au projet
- Merci à tous les amis qui ont fait des commentaires et des suggestions pour
CGraph , et ne les mentionneront pas un par un. Tout le monde est invité à rejoindre et à construire ensemble
Annexe-3.
- WeChat: ChunelElg (Bienvenue pour scanner le code QR ci-dessus pour ajouter l'auteur en tant qu'ami. Veuillez noter brièvement vos informations personnelles ^ _ ^)
- Courriel: [email protected]
- Code source: https://github.com/chunelfeng/cgraph
- Forum: www.chunel.cn