Chinesisch |
CGRAPH -Dokumentation

CGRAPH ist ein plattformübergreifendes Direktor für ein zyklisches GHAPH -Framework, das auf reinem C ++ ohne Abhängigkeiten mit drittanbieter Party basiert.
Sie können Ihre eigenen Betreiber einfach erstellen und alle laufenden Zeitpläne wie Abhängigkeit, Parallelung, Aggregation usw. beschreiben .
Tutorials und Kontaktinformationen werden wie folgt angezeigt .
1. Einführung
CGraph wird auf Chinesisch [Farbe, Bild] bezeichnet und ist ein plattformübergreifender Graph-Prozessausführungs-Framework ohne Abhängigkeiten von Drittanbietern. Durch die zugrunde liegende Planung GPipeline (Pipeline) bietet es die Funktion der sequentiellen Ausführung abhängiger Elemente und der gleichzeitigen Ausführung nicht abhängiger Elemente bei der EDAG-Planung.
Benutzer müssen nur GNode Knotenklasse (Knoten) erben, die run() -Methode der Unterklasse implementieren und Abhängigkeiten festlegen, um die grafische Ausführung oder Pipeline -Ausführung der Aufgabe zu realisieren. Es ist auch möglich, verschiedene GGroup (Gruppen) mit Multi-Knoten-Informationen einzustellen, um das bedingte Beurteilung, die Schleifen und die gleichzeitige Ausführungslogik des Graphen zu steuern.
Das Projekt bietet einen Rich Param (Parameter) -Typ für die Dateninteroperabilität in verschiedenen Anwendungsszenarien. Darüber hinaus GEvent die obigen Elementfunktionen durch Hinzufügen GAdapter GAspect horizontal erweitert werden.

Dieses Projekt wird mit der Pure C ++ 11 Standardbibliothek geschrieben und hat keine Abhängigkeiten von Drittanbietern. Mit MacOS , Linux , Windows und Android -Systemen kompatibel und unterstützt die lokale Kompilierung und Sekundärentwicklung über CLion , VSCode , Xcode , Visual Studio , Code::Blocks , Qt Creator und andere IDES.
Eine detaillierte funktionale Einführung und Verwendung finden Sie im Artikelinhalt in Yimianzhiyuan.com. Verwandte Videos werden kontinuierlich auf B.com aktualisiert.
- [B Station Video] CGRAPH EINLEITUNG
- [B Station Video] CGRAPH -Funktionalkapitel
- Eine umfassende Einführung in alle Substantive und Funktionsmodule im CGRAPH -Projekt
- Basierend auf dem tatsächlichen Codierungsprozess werden die spezifischen Nutzungsszenarien, -nutzungen und Probleme, die jeder Funktion gelöst wurden, ausführlich eingeführt.
- Geeignet für Kinderschuhe, die ein umfassendes Verständnis für Funktionen haben und schnell mit CGRAPH anfangen möchten
- Geeignet für Kinderschuhe, die sich für Multi-Thread-Programme interessieren
- 【B Site Video】 CGRAPH -Anwendung
- 【B Station Video】 CGRAPH SHARE
2. Verwenden Sie Demo
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 ;
}
Wie in der obigen Abbildung gezeigt, wird der Knoten a , wenn die Diagrammstruktur ausgeführt wird, zuerst ausgeführt. Nachdem der Knoten a ausgeführt wurde, werden Knoten b und c parallel ausgeführt. Nachdem alle Knoten b und c ausgeführt werden, wird der Knoten d ausgeführt.
3.. Empfohlen zu lesen
- Pure Serialist stellt Sie in die einfache Implementierung der grafischen Rahmen-Exezution-Logik vor
- Pure Serialist stellt Sie in die einfache Implementierung der grafischen Rahmenzykluslogik vor
- Der reine Sequenzer führt Sie zur einfachen Implementierung der Bereitstellung grafischer Framework-Parameter vor
- Pure Serialist stellt Sie in die einfache Implementierung des grafischen Rahmens vor - ein übereinstimmendes Urteilsvermögen
- Reine Fortsetzungen stellen Sie in die einfache Implementierung grafischer Frameworks vor--face-oriented
- Der reine Sequenzer führt Sie in die einfache Implementierung der grafischen Rahmenfunktionsinjektion vor
- Pure Serialist stellt Sie in die einfache Implementierung des grafischen Frameworks vor-den Nachrichtenmechanismus
- Pure Serialist stellt Sie in die einfache Implementierung des grafischen Frameworks - Ereignisauslösers vor
- Der reine Sequenzer führt Sie in die einfache Implementierung des Grafik-Framework-Timeout-Mechanismus vor
- Der reine Sequenzer führt Sie in die einfache Implementierung der Optimierung des Pooloptimierens grafischer Framework-Thread (i) vor.
- Der reine Sequenzer führt Sie in die einfache Implementierung der Optimierung des Pooloptimierens grafischer Framework-Thread (II) vor.
- Der reine Sequenzer führt Sie in die einfache Implementierung der Optimierung des Pooloptimierens grafischer Framework-Thread (III) vor.
- Der reine Sequenzer führt Sie in die einfache Implementierung der Optimierung des Pooloptimierens grafischer Framework-Thread (IV) vor.
- Der reine Sequenzer führt Sie mit der einfachen Implementierung der Optimierung der grafischen Framework-Thread Pool (V) vor (v)
- Der reine Sequenzer führt Sie in die einfache Implementierung der grafischen Rahmen-Thread-Pooloptimierung (VI) vor.
- Der reine Sequenzer führt Sie in die einfache Implementierung der Optimierung der grafischen Rahmen-Performance-Optimierung vor (i).
- Der reine Sequenzer führt Sie mit der einfachen Implementierung der Optimierung der grafischen Rahmen-Performance-Optimierung vor (II)
- Reine Fortsetzungen setzen Sie mit der einfachen Implementierung der Berechnung der grafischen Framework-Distanz ein
- CGRAPH'S TITEL SONG - "Hören Sie sich den Coder an"
- Sprechen Sie über dieses Jahr, als ich CGRAPH geschrieben habe
- Wie ist es, ein Projekt zu leiten, das in Awesome-CPP von Grund auf neu ist?
- Ausbrechen! Nachdem die Leistung von CGRAPH Taskflow auf umfassende Weise übertroffen hatte, sagte der Autor, dass er ...
- Verwenden der Kartenoptimierung: Zusammenfassung der Ideen zur Berechnung der maximalen Parallelität von DAG in CGRAPH
- Ein Artikel hilft Ihnen beim Erlernen von CGRAPH, der zweieinhalb Jahre dauert.
- CGRAPH -Autoren möchten es wissen, wenn Sie ein EDAG -Planungs -Framework benötigen
- Verbesserung der Kantenreduktion und Effizienz: Zusammenfassung redundanter Randschneidideen in CGRAPH
IV
- Graphanns: Graph-basierte ungefähre Suche nach der nächsten Nachbarn, die CGRAPH arbeitet
- Cthreadpool: Ein einfacher und einfach zu bedienender, leistungsstarker, ausgezeichneter Leistung, plattformübergreifende C ++-Fadenpool
- CGRAPH-LITE: NEIN, einfachste CGRAPH, mit DAG-Ausführungskraft und Paramsübersetzungsfunktion
- Awesome-CPP: Eine kuratierte Liste von Awesome C ++ (oder C) Frameworks, Bibliotheken, Ressourcen und glänzenden Dingen.
- Awesome-Workflow-Engines: Eine kuratierte Liste der fantastischen Open-Source-Workflow-Motoren
- Taskflow: Ein allgemeines paralleles und heterogenes Aufgabenprogrammiersystem
- [B Station Video] Tatsächlicher Test des Leistungsvergleichs zwischen CGRAPH und Taskflow
- Torchpipe: Innerhalb Pytorch servieren
- [B Station Video] Open -Source -Projekt -Torchpipe - AI Engine Online High -Parallelcy -Erfahrung und praktischer Krieg
- nndeploy: nndeploy ist ein Modell für End-to-End-Bereitstellungen. Mit Multi-End-Argumentation und der Bereitstellung von Acyclic Graph-Modell als Kern ist es für Benutzer ein plattformübergreifendes, einfaches und leistungsstarkes Modell für Hochleistungsmodell-Bereitstellungen bereitgestellt.
- [B Station Video] nndeploy --- End-Deploy-Framework für AI-Modell End-to-End-Bereitstellung (1)
- [B Station Video] nndeploy --- End-to-End-Bereitstellungsrahmen des AI-Modells (2)
- KUIPERINFERFERFERFERFERFERFERFERFERFLUS NICHT Sie eine Hochleistungs-Deep-Learning-Inferenzbibliothek von Grund auf neu und unterstützt die Inferenz von Modellen wie LLAMA2, UNET, YOLOV5 und RESNET. Implementieren Sie Schritt für Schritt eine Hochleistungs-Deep Learning Inferenz Library Library
- 【B Station Video】 Kuiperinfer inferen -Framework - Ein lehrorientiertes Argumentationsgerüst
- OGRAPH: Eine einfache Möglichkeit, eine Pipeline mit Go zu bauen.
- [B Station Video] Hören Sie sich die Bigwig von Alibaba Cloud an.
Anhang 1
[2021.05.04 - v1.0.0 - Chunel]
- Geben Sie eine grafische Ausführungsfunktion an und unterstützen Sie das parallele Computer nicht abhängiger Knoten
[2021.05.09 - v1.1.0 - Chunel]
- Optimieren Sie die Parallelität während der Diagrammausführung
[2021.05.18 - v1.1.1 - Chunel]
- Fügen Sie
name und die session hinzu
[2021.05.23 - v1.2.0 - Chunel]]
- Geben Sie die Ausführungsfunktion mit Einzelknoten-Schleifen an
[2021.05.29 - v1.3.0 - Chunel]
- Bereitstellung von Abteilung
cluster (Cluster) und region (Region) und Schleifenausführungen - Geben Sie
tutorial -Inhalte an, einschließlich mehrerer Verwendungsbeispiele
[2021.06.14 - v1.4.0 - Chunel]
- Geben Sie
param an - Geben Sie
group (Gruppen-) Funktion an, Multi-Knoten-Module werden von group einheitlich geerbt - Fügen Sie Unterstützung für Linux -Systeme hinzu
[2021.06.20 - V1.4.1 - Chunel]
-
condition (Bedingung) Funktionsfunktion geben - Fügen Sie Unterstützung für Windows -Systeme hinzu
[2021.06.24 - v1.5.0 - Chunel]
- Stellen Sie
pipeline -Fabrik -Erstellungsmethode bereit -
tutorial aktualisieren
[2021.07.07 - v1.5.1 - Chunel]
- Optimieren Sie die Funktionalität der Threadpool. Taskdiebstahlmechanismus implementieren
[2021.07.11 - v1.5.2 - Chunel]
- Optimieren Sie die Funktionalität der Threadpool. Implementieren Sie den automatischen Mechanismus der Gewindeanpassung
[2021.07.31 - v1.5.3 - Chunel]
- Optimieren Sie die Funktionalität der Threadpool. Implementieren Sie die Funktionsstapelfunktion und optimieren Sie den Mechanismus des Aufgabendiebstahls
[2021.08.29 - v1.6.0 - Chunel]
- Geben Sie mehrere
pipeline -Funktionen an, um die zugrunde liegende Logik zu optimieren -
tutorial aktualisieren
[2021.09.19 - v1.6.1 - Chunel]
- Bietet
Lru -Operator, Trie -Operator und Vorlagenknotenfunktionen, um die zugrunde liegende Logik zu optimieren -
tutorial aktualisieren
[2021.09.29 - v1.7.0 - Chunel]
- Bietet eine
aspect für die Erweiterung des äußeren node oder group -
tutorial aktualisieren
[2021.10.07 - v1.7.1 - Chunel]
-
aspect (Abschnitt) Implementierungslogik optimieren, die Abschnittsparameterfunktion und die Abschnittsfunktion hinzufügen -
tutorial aktualisieren
[2021.11.01 - v1.8.0 - Chunel]
- Geben Sie
adapter und singleton -Adapterfunktion an - Optimieren Sie
pipeline -Ausführungslogik -
tutorial aktualisieren
[2021.12.18 - v1.8.1 - Chunel]
- Optimierte Rückgabewert
CStatus -Informationen
[2022.01.02 - v1.8.2 - Chunel]
- Bietet die automatische Exit -Funktion des Timeouts der Knotenausführung und bietet die
task group - Geben Sie die Einstellungsmethode der Thread Pool -Konfiguration Parameter an
[2022.01.23 - v1.8.3 - Chunel]
- Bietet
function für die Implementierung funktionaler Programmierfunktionen - Geben Sie die Planungsfunktion der Thread-Priorität an und geben Sie eine Thread-Bunden-CPU-Ausführungsfunktion an
-
tutorial aktualisieren
[2022.01.31 - v1.8.4 - Chunel]
- Bietet die Funktion des
node (Knoten) asynchron
[2022.02.03 - v1.8.5 - Chunel]
- Bietet
daemon -Funktion, um Aufgaben in Nicht-Fluss-Diagramme regelmäßig auszuführen -
tutorial aktualisieren
[2022.04.03 - v1.8.6 - Chunel]
- Stellen Sie den
DistanceCalculator zur Implementierung der Berechnungen eines beliebigen Datentyps und eines jeden Entfernungsarts zur Verfügung -
tutorial aktualisieren
[2022.04.05 - v2.0.0 - Chunel]
- Bereitstellung
domain (Domänen-) Funktion, das Ann Domain abstrakt - Bieten Sie einen Ausführungsmechanismus zur Verfügung
-
tutorial aktualisieren
[2022.05.01 - v2.0.1 - Chunel]
- Optimieren Sie den Mechanismus
pipeline -Registrierungsmechanismus und unterstützen Sie benutzerdefinierte Auftragsausführung von Init -Methoden - Geben Sie Ein-Klick-Kompilierungsskripte an
[2022.05.29 - v2.1.0 - Chunel]
- Geben Sie
element -Schreibmethoden an - Bieten Sie Unterstützung für die C ++ 14 -Version
-
tutorial aktualisieren
[2022.10.03 - v2.1.1 - Chunel]
- Stellen Sie den Prioritätsmechanismus im Thread Pool zur Verfügung
-
group optimieren
[2022.11.03 - v2.2.0 - Chunel]
-
message (Message) angeben, die hauptsächlich zur Vervollständigung der Datenübertragung zwischen verschiedenen pipeline verwendet wird -
tutorial aktualisieren
[2022.12.24 - v2.2.1 - Chunel]
- Bietet
TemplateNode -Funktion zur Optimierung der Parameterübertragungsmethode -
tutorial aktualisieren
[2022.12.25 - v2.2.2 - Yeshenyong]
- Optimieren Sie die Diagrammausführungslogik
[2022.12.30 - v2.2.3 - Chunel]
- Geben Sie
message und Abonnementfunktion an - Bietet Ausführungs -Engine -Switching -Funktion
[2023.01.21 - V2.3.0 - Chunel]]
-
event (Event) zur Verfügung stellen - Geben Sie die Datei
CGraph Intro.xmind an, die die Gesamtlogik von CGRAPH durch das Gehirndiagramm einführt.
[2023.01.25 - v2.3.1 - Chunel]]
- Bietet Unterstützung für die C ++ 11 -Version. Vielen Dank an Mirroryuchen für die Bereitstellung relevanter Lösungen
[2023.02.10 - v2.3.2 - Chunel]
- Optimieren Sie die Planungsstrategien und Bereitstellung der Konfigurationsschnittstelle für Planungsparameter
- Die englische Version Readme.md ist verfügbar
[2023.02.12 - v2.3.3 - Yeshenyong, Chunel]
- Geben Sie die visuelle Bildanzeigefunktion GraphViz an
- Geben Sie die Funktion der Parameterverbindungsverfolgung an
[2023.02.22 - v2.3.4 - Chunel]
- Optimieren Sie den Planungsmechanismus unter Windows Systems
- Optimieren Sie
param und event (Ereignis) Mechanismus
[2023.03.25 - v2.4.0 - Woodx, Chunel]
- Geben Sie eine Runnable Docker -Umgebung und Dockerfile -Dateien zum Erstellen von Docker -Umgebungen an
- Bereitstellung von
pipeline -Planungsressourcenmanagementmechanismus - Die Planungsleistung optimieren
[2023.05.05 - v2.4.1 - Chunel]
- Geben Sie die Ausführungsfunktion der Threadbindungsgut an
- Bietet
pipeline -Methode für die Parallelitätserfassung. Vielen Dank an Hanano-Yuuki für die Bereitstellung relevanter Lösungen - Bietet eine asynchrone Ausführungsfunktion und die Ausgangsfunktion
pipeline während der Ausführung
[2023.06.17 - v2.4.2 - Chunel]
- Bietet
MultiCondition (Multi-Condition) - Bietet
pipeline -Pause Ausführung und Lebenslaufausführungsfunktionen
[2023.07.12 - v2.4.3 - Chunel]
[2023.09.05 - v2.5.0 - Chunel]
- Bietet eine Perf -Funktion für
pipeline -Leistungsanalyse - Bietet Zeitüberschreitungsmechanismus für
element - Stellen Sie
some (teilweise) Funktionen zur Optimierung der asynchronen Ausführung von pipeline bereit
[2023.09.15 - v2.5.1 - Chunel]
-
fence Zaunfunktion - Bietet
coordinator (Koordinator) Funktion
[2023.11.06 - v2.5.2 - Chunel]
- Optimieren Sie die
message (Meldung), mit der die Verarbeitungsmethode beim Schreiben des Blockierens festgelegt und die Anzahl der Speicherkopienzeiten reduziert werden kann - Fügen Sie
example für verwandte Inhalte hinzu, um einige einfache Implementierungen für verschiedene Branchen bereitzustellen - Die Planungsleistung optimieren
[2023.11.15 - v2.5.3 - Chunel]
- Geben Sie eine
proto -Definitionsdatei an - Fügen Sie die
mutable Funktion hinzu, um Abhängigkeitsregistrierungssyntaxzucker bereitzustellen
[2024.01.05 - v2.5.4 - Chunel]]
- Geben Sie
test an, einschließlich Leistungs- und Funktionalitätstestfälle -
event (Ereignis) optimieren und die asynchrone Wartenfunktion unterstützen
[2024.07.18 - V2.6.0 - Papapig -Melody, Chunel]
- Bietet die Möglichkeit,
pipeline -Topologie auszuführen - Geben Sie eine Methode an, um festzustellen, ob zwischen
element eine Abhängigkeit besteht - Bereitstellung der Baselkompilierungsmethode
- Perf -Funktion optimieren
[2024.09.17 - v2.6.1 - Chunel]
- Bietet eine statische Ausführungsmethode der
pipeline und bietet einen Mikroaufgabenmechanismus basierend auf der statischen Ausführung - Bietet
pipeline -Ausschnittfunktion, um doppelte Abhängigkeiten zwischen element zu entfernen - Bietet eine Methode zum Löschen von Abhängigkeiten
element -
event (Event) -Mechanismus optimieren, asynchrone Ereignisse können auf Ende warten - Füllen Sie das CGRAPH-LITE-Projekt frei und bieten einfache DAG-Kompositions- und Parameterübertragungsfunktionen. Die Schnittstelle ist vollständig kompatibel und kann nahtlos auf dieses Projekt umgestellt werden
[2024.11.16 - v2.6.2 - Chunel]]
- Optimieren Sie den Parameter gegenseitigen Ausschlussmechanismus und erhalten Sie die Leistung
- Das Problem des Wartens auf die Auxiliary -Thread -Ausnahme behoben
-
tutorial aktualisieren
Anhang 2
Vielen Dank an Doocs für die Veröffentlichung relevanter Einführungsdokumente auf dem offiziellen Account von WeChat.
Vielen Dank an die Zeitschrift Einführung und Empfehlung von Hellogithub: Hellogithub Ausgabe 70

- Dank der Einführung und Empfehlung von "Github Chinese Rankings": Github Chinese Rankings Total - C ++ - Kategorie

- Dank der Empfehlung von Awesome-CPP wissen wir alle die maßgeblichste Empfehlungsliste für das CPP-Projekt der Welt
- Dank der Empfehlung der
Taskflow Group : Awesome-Parallel-Computing, und wir behandeln immer Taskflow als Vorbild als Vorbild - Vielen Dank an die Empfehlung von Awesome-Workflow-Engines
- Vielen Dank an alle Entwickler von Mitwirkenden für ihren Beitrag zum Projekt
- Vielen Dank an alle Freunde, die Kommentare und Vorschläge für
CGraph -Projekt abgegeben haben und sie nicht nacheinander erwähnen. Jeder ist herzlich eingeladen, sich zusammenzuschließen und zusammen zu bauen
Anhang-3
- WeChat: Chunferg (Willkommen, den obigen QR -Code zu scannen, um den Autor als Freund hinzuzufügen. Bitte beachten Sie kurz Ihre persönlichen Daten^_^)
- E -Mail: [email protected]
- Quellcode: https://github.com/chunfereng/cgraph
- Forum: www.chunel.cn