已合并
【modify docs】添加architecture文件夹下内容的英文,修改样例参考readme中的产品名称 #5650
zangyan创建于 9月23日
【modify docs】添加architecture文件夹下内容的英文,修改样例参考readme中的产品名称 #5650
已合并
共 36 个文件变更+450-49
| @@ -0,0 +1,20 @@ | |||
| 1 | +# HCCL Architecture Documentation | ||
| 2 | + | ||
| 3 | +This document describes the software architecture of HCCL (Huawei Collective Communication Library). | ||
| 4 | + | ||
| 5 | +## Document Contents | ||
| 6 | + | ||
| 7 | +- [System Overview](./overview.md) - Overall system architecture and module division | ||
| 8 | +- [base_comm](./base_comm/) - Basic communication module | ||
| 9 | +- [coll_comm](./coll_comm/) - Collective communication domain management module | ||
| 10 | + | ||
| 11 | +## Architecture Principles | ||
| 12 | + | ||
| 13 | +1. **Modular Design** - Each module has a single responsibility, and modules are decoupled | ||
| 14 | +2. **Platform Abstraction** - Shield the underlying hardware differences and provide unified interfaces | ||
| 15 | +3. **Extensibility** - Support flexible extension of new algorithms and new communication primitives | ||
| 16 | + | ||
| 17 | +## Related Links | ||
| 18 | + | ||
| 19 | +- [Contribution Guide](../../../CONTRIBUTING.md) | ||
| 20 | +- [RFC Documents](../rfcs/) | ||
| @@ -0,0 +1,285 @@ | |||
| 1 | +# HCCL & HCOMM Software Architecture Overview | ||
| 2 | + | ||
| 3 | +--- | ||
| 4 | + | ||
| 5 | +## 1 Introduction to HCCL Collective Communication | ||
| 6 | + | ||
| 7 | +### 1.1 Why Collective Communication Is Needed | ||
| 8 | + | ||
| 9 | +Large model training and inference = multi-device collaboration, **communication is the scaling bottleneck** | ||
| 10 | + | ||
| 11 | +```mermaid | ||
| 12 | +flowchart LR | ||
| 13 | + F[Forward] --> B[Backward] --> A[AllReduce<br/>Gradient Synchronization] --> U[Update<br/>Update Weights] --> F | ||
| 14 | +``` | ||
| 15 | + | ||
| 16 | +- **Training side**: Under data parallelism, each NPU processes a different sample, and after each iteration, gradients are synchronized through AllReduce. Model/expert parallelism also relies on AllGather, ReduceScatter, and AlltoAll for coordination. | ||
| 17 | +- **Inference side**: Large model inference also requires tensor parallelism/expert parallelism coordination, and communication latency directly affects time to first token and throughput. | ||
| 18 | +- **Collective communication**: It enables all nodes to exchange data in parallel, efficiently, and in an orderly manner, greatly reducing synchronization overhead. | ||
| 19 | +- HCCL = **a high-performance collective communication library for Ascend NPU clusters**, which enables multiple NPUs to work together efficiently. | ||
| 20 | + | ||
| 21 | +### 1.2 Overview of HCCL Core Capabilities | ||
| 22 | + | ||
| 23 | +| Dimension | Capability | | ||
| 24 | +|------|------| | ||
| 25 | +| **Collective communication primitives** | AllReduce, Broadcast, AllGather, ReduceScatter, AlltoAllv, Send, Receive, ... | | ||
| 26 | +| **Communication algorithms** | Ring, Mesh, RHD (Halving-Doubling), Star + self-developed algorithms | | ||
| 27 | +| **Communication protocols** | UBC, UB_RTP, UBoE, RoCE (v2), HCCS, UB_MEM | | ||
| 28 | +| **Execution modes** | Single-operator mode + graph mode | | ||
| 29 | +| **Extension capabilities** | Custom development of communication operators | | ||
| 30 | +| **Application scenarios** | Collective communication for large model training (data/model/expert parallelism) and inference (TP/PP/EP) | | ||
| 31 | + | ||
| 32 | +HCCL sits between the AI framework and the hardware drivers in the CANN software stack, serving as a bridge between them: | ||
| 33 | + | ||
| 34 | + | ||
| 35 | +--- | ||
| 36 | + | ||
| 37 | +## 2 Collective Communication Model | ||
| 38 | + | ||
| 39 | +### 2.1 Concepts and Relationships | ||
| 40 | + | ||
| 41 | +Collective communication involves three core concepts: | ||
| 42 | + | ||
| 43 | +| Term | One-sentence explanation | Main corresponding hardware | | ||
| 44 | +|------|-----------|---------| | ||
| 45 | +| **Collective communication domain** | The execution context of collective communication, managing the entities and resources that participate in communication | Composed of multiple NPUs | | ||
| 46 | +| **Rank** | A member of the collective communication domain, with a unique Rank ID (starting from 0) | One NPU | | ||
| 47 | +| **RankGraph** | The communication relationship graph among Ranks, describing "who connects to whom and how" | Network topology | | ||
| 48 | + | ||
| 49 | + | ||
| 50 | + | ||
| 51 | +--- | ||
| 52 | + | ||
| 53 | +### 2.2 Introduction to the RankGraph Topology Model | ||
| 54 | + | ||
| 55 | +RankGraph uses a graph to model the connection relationships among different Ranks in the communication domain, and introduces topology layer abstraction to adapt to the hierarchical structure of large-scale clusters. Note: The meaning of Edge/Link in RankGraph differs from that of Link/Path in NCCL. For details, see the following table. | ||
| 56 | + | ||
| 57 | +| Concept | One-sentence explanation | Easy-to-understand analogy | | ||
| 58 | +|------|-----------|------------| | ||
| 59 | +| **Node** | A node in the graph, divided into communication entities and Fabrics (switching/routing abstraction) | Communication entity = NPU with a network port; Fabric = a group of switches | | ||
| 60 | +| **Endpoint** | The communication device of a Node (logical concept). A Node can have multiple Endpoints. One Endpoint maps to one physical port (which can be a bonding port controlled by hardware and invisible to software). One physical port can be shared by multiple Endpoints. | A network port on an NPU; one NPU can have multiple network ports; a bonding port is transparent to software | | ||
| 61 | +| **Edge** | The connection relationship between Nodes, with Endpoints at both ends (corresponding to Link in NCCL) | A network cable with its two ends plugged into the network ports of different NPUs | | ||
| 62 | +| **Link** | The link-establishment information between two communication entities extracted from an Edge (including the Endpoints at both ends + the protocol), corresponding to Path in NCCL | The path description through which two NPUs can establish a link | | ||
| 63 | +| **netLayer** | The topology layer. Communication quality decreases as the layer increases. Within a server it is Layer0 (for example, HCCS direct connection), and between servers it is Layer1 (for example, RoCE through switches). | The 8-device HCCS direct connection within a server is the fastest (Layer0), while crossing servers through switches is slower (Layer1) | | ||
| 64 | +| **Fabric** | An abstraction of a network switching/routing group. The communication entities connected to it can communicate with one another. Two connected Fabrics do not exist on the same network layer. | A switch that enables all NPUs plugged into it to communicate with one another | | ||
| 65 | +| **TopoInstance** | A topology instance within each layer | Eight NPU devices in the same equipment room form a 1DMesh instance | | ||
| 66 | + | ||
| 67 | +> **Layer key points**: Clusters are naturally hierarchical (Layer). Each layer contains topology instances (TopoInstance). Communication quality decreases as the layer increases. Topology types include Fullmesh, 1DMesh, CLOS, Ring, and so on. | ||
| 68 | +> **Progressive relationship**: Edge describes "who connects to whom" → Link describes "how to establish a link" → Channel describes "how to communicate". A Channel is instantiated based on a Link and is the actually usable data channel. For details, see 2.3. | ||
| 69 | + | ||
| 70 | + | ||
| 71 | + | ||
| 72 | +--- | ||
| 73 | + | ||
| 74 | +### 2.3 Introduction to Basic Communication | ||
| 75 | + | ||
| 76 | +The foundation of collective communication consists of four **primitive concepts**, which are the basic elements that form all communication operations: | ||
| 77 | + | ||
| 78 | +| Concept | One-sentence explanation | Main corresponding hardware | | ||
| 79 | +|------|-----------|---------| | ||
| 80 | +| **Communication device (Endpoint)** | The logical interface for network communication, including the protocol and address | NPU network port / Host NIC | | ||
| 81 | +| **Communication channel (Channel)** | The data channel between the communication devices at both ends (including synchronization Notify) | RoCE QP / UB Jetty connection | | ||
| 82 | +| **Communication memory (CommMem)** | The memory segment registered to the communication domain and accessible by communication devices (Endpoints) | NPU on-chip memory / Host memory | | ||
| 83 | +| **Communication engine (CommEngine)** | The module that executes communication tasks, including Thread and the thread scheduler, driving the communication hardware to move data | AICPU_TS, CCU, AIV | | ||
| 84 | + | ||
| 85 | +> **Composition relationship**: Channel = communication devices at both ends + communication protocol + N Notifys | ||
| 86 | + | ||
| 87 | + | ||
| 88 | + | ||
| 89 | +--- | ||
| 90 | + | ||
| 91 | +#### 2.3.1 Memory Semantics Primitives vs. Network Semantics Primitives | ||
| 92 | + | ||
| 93 | +| | Network semantics primitives | Memory semantics primitives | | ||
| 94 | +|--|---------|---------| | ||
| 95 | +| **Core object** | Channel (communication channel) | Communication device + mapped memory | | ||
| 96 | +| **Operation mode** | Write / Read / Notify | Local copy (operating like local memory) | | ||
| 97 | +| **Communication model** | Unilateral operation, bilateral operation (requiring cooperation of both ends) | Unilateral operation (initiated by only one end) | | ||
| 98 | +| **Applicable protocols** | RoCE, UB | UB_MEM, HCCS | | ||
| 99 | + | ||
| 100 | + | ||
| 101 | + | ||
| 102 | + | ||
| 103 | + | ||
| 104 | +> The choice of semantics depends on the underlying protocol and scenario requirements | ||
| 105 | + | ||
| 106 | +--- | ||
| 107 | + | ||
| 108 | +### 2.4 Introduction to the Communication Engine | ||
| 109 | + | ||
| 110 | +The communication engine is **the core module that executes communication tasks** in a communication entity. As shown in the following figure, it receives **communication resources** (Endpoint/Channel/CommMem, see 2.3) and tasks dispatched by **communication task orchestration** from above, and drives the **communication hardware** through the **thread execution scheduler** to complete data movement. | ||
| 111 | + | ||
| 112 | + | ||
| 113 | + | ||
| 114 | +- **Thread**: The execution context of communication tasks, carrying a series of data plane operators (LocalReduce, ChannelRead/Write, Notify, and so on). One engine can contain multiple Threads executing concurrently. | ||
| 115 | +- **Thread execution scheduler**: Schedules the operators on Threads to run on hardware, such as TS (Task Scheduler) / STARS / operating system | ||
| 116 | +- **Communication hardware**: The hardware that actually moves data, such as RoCE NIC, SDMA, and UB NIC | ||
| 117 | +- **Inter-thread synchronization**: Different Threads coordinate their execution order through ThreadNotify/ChannelNotify (see 2.5 for details) | ||
| 118 | + | ||
| 119 | +> **In one sentence**: Communication engine = Thread (execution context) + thread scheduler (scheduling execution). The AICPU_TS engine is completed through the collaboration of **AICPU running the communication Kernel and TS scheduling the Task**. | ||
| 120 | + | ||
| 121 | +According to different Thread abstractions and scheduling methods, common communication engines include AICPU_TS, CPU_TS, AIV, and CCU: | ||
| 122 | + | ||
| 123 | +| Communication engine | Thread abstraction | Introduction | Characteristics | Applicable scenarios | | ||
| 124 | +|------|------------|------|-------|---------| | ||
| 125 | +| **AICPU_TS** | NPU Stream | AICPU runs the communication Kernel and dispatches communication Task descriptors, and TS schedules them to run on hardware | Does not occupy compute cores, dispatches Task descriptors | Large-volume data communication | | ||
| 126 | +| **CPU_TS** | NPU Stream | The Host CPU runs the communication logic, and TS schedules the dispatch | Does not occupy compute cores, high dispatch overhead | Dedicated to Atlas A2 | | ||
| 127 | +| **AIV** | AICore Block | The Vector Core directly executes communication operators | Low latency, occupies Vector cores | Small data and low latency | | ||
| 128 | +| **CCU** | Mission | Hardened communication unit that executes microcode | Hardened scheduling, executes microcode | Dedicated hardware communication | | ||
| 129 | + | ||
| 130 | +> A single collective communication domain uses only one engine by default. Operator developers select the engine automatically through the algorithm selector. | ||
| 131 | + | ||
| 132 | +--- | ||
| 133 | + | ||
| 134 | +#### 2.4.1 AICPU_TS Communication Engine | ||
| 135 | + | ||
| 136 | +- Task descriptor dispatch mode | ||
| 137 | + | ||
| 138 | + | ||
| 139 | + | ||
| 140 | +1. The Host submits the AICPU Kernel to the task queue. | ||
| 141 | +2. The TS scheduler dispatches the AICPU Kernel to AICPU for execution. | ||
| 142 | +3. AICPU submits the communication Task descriptor to the TS queue. | ||
| 143 | +4. The TS scheduler dispatches the communication Task to the executor. | ||
| 144 | + | ||
| 145 | +> **Key point**: AICPU dispatches communication tasks through Task descriptors, **does not occupy compute cores**, and is suitable for large-data high-bandwidth scenarios. | ||
| 146 | + | ||
| 147 | +#### 2.4.2 CCU Communication Engine | ||
| 148 | + | ||
| 149 | +- Dedicated acceleration unit execution mode | ||
| 150 | + | ||
| 151 | +CCU (Collective Communication Unit) is a dedicated collective communication coprocessor located on the IO Die. Its Thread abstraction is Mission. | ||
| 152 | + | ||
| 153 | + | ||
| 154 | + | ||
| 155 | +1. The Host dispatches the CCU instruction sequence (composed of instructions that CCU can recognize) to the CCU instruction space, and submits the CCU Kernel task to the task queue. | ||
| 156 | +2. The CCU Kernel is scheduled by the scheduler and then sent to CCU for execution. | ||
| 157 | +3. CCU executes the corresponding instruction stream and uses URMA (Unified Remote Memory Access) to complete data movement. | ||
| 158 | + | ||
| 159 | +> **Key point**: CCU is a dedicated collective communication acceleration unit that executes the preset CCU instruction stream (moving data through URMA). It provides **high bandwidth and low latency** while occupying few compute cores and little memory access bandwidth. However, it is limited by on-chip resources and supports a limited number of communication domains (Ascend 950PR/950DT). | ||
| 160 | + | ||
| 161 | +#### 2.4.3 AIV Communication Engine | ||
| 162 | + | ||
| 163 | +- Vector Core execution mode | ||
| 164 | + | ||
| 165 | + | ||
| 166 | + | ||
| 167 | +1. The Host submits the AIV Kernel to the task queue. | ||
| 168 | +2. The TS scheduler dispatches the AIV Kernel to the Vector Core. | ||
| 169 | +3. The Vector Core uses different protocols to complete data movement. | ||
| 170 | + | ||
| 171 | +> **Key point**: AIV provides low latency but **occupies Vector compute cores**, and is suitable for small-data and low-latency scenarios. | ||
| 172 | + | ||
| 173 | +--- | ||
| 174 | + | ||
| 175 | +### 2.5 Introduction to the Synchronization Mechanism | ||
| 176 | + | ||
| 177 | +There are two synchronization scenarios in communication: | ||
| 178 | + | ||
| 179 | +| Synchronization method | Scenario | Description | Interface prototype | | ||
| 180 | +|---------|------|------|-----| | ||
| 181 | +| **ThreadNotify** | Within the same communication entity | A Thread sends/waits for a synchronization signal to/from another Thread in the same communication entity | `ThreadNotifyRecord` / `ThreadNotifyWait` | | ||
| 182 | +| **ChannelNotify** | Between different communication entities | Through the notify on the Channel and the Channel data channel, a Thread sends/waits for a synchronization signal to/from the Thread of a remote communication entity | `ChannelNotifyRecord` / `ChannelNotifyWait` | | ||
| 183 | + | ||
| 184 | + | ||
| 185 | + | ||
| 186 | +--- | ||
| 187 | + | ||
| 188 | +## 3 Software Layering Logic | ||
| 189 | + | ||
| 190 | +### 3.1 Layered Architecture Overview | ||
| 191 | + | ||
| 192 | +| Software layer | Responsibility | Repository location | | ||
| 193 | +|----|------|--------| | ||
| 194 | +| HCCL collective communication operators | Operator entry → algorithm selection → algorithm execution | hccl | | ||
| 195 | +| HCOMM collective communication domain management | Communicator + topology management + resource management | hcomm / coll_communicator_mgr (HCCM) | | ||
| 196 | +| HCOMM basic communication | Resource management + communication primitive execution | hcomm / base_comm | | ||
| 197 | + | ||
| 198 | + | ||
| 199 | + | ||
| 200 | +--- | ||
| 201 | + | ||
| 202 | +### 3.2 Target Directory Structure — Corresponding to the Software Architecture | ||
| 203 | + | ||
| 204 | +Target directory structure of the HCCL repository: | ||
| 205 | + | ||
| 206 | +```text | ||
| 207 | +hccl | ||
| 208 | +│── src # Source code directory of HCCL operators | ||
| 209 | +| ├── common # Common logic, including type definitions, the logging module, and so on | ||
| 210 | +| └── ops # HCCL operator implementation | ||
| 211 | +| ├── all_gather # AllGather operator implementation | ||
| 212 | +| ├── all_gather_v # AllGatherV operator implementation | ||
| 213 | +| ├── all_reduce # AllReduce operator implementation | ||
| 214 | +| ├── all_to_all_v # AlltoAll, AlltoAllV, and AlltoAllVC operator implementation | ||
| 215 | +| ├── batch_send_recv # BatchSendRecv operator implementation | ||
| 216 | +| ├── broadcast # Broadcast operator implementation | ||
| 217 | +| ├── op_common # Common components of operators | ||
| 218 | +| │ ├── executor # Algorithm executor | ||
| 219 | +| │ ├── selector # Algorithm selector | ||
| 220 | +| │ ├── template # Algorithm template | ||
| 221 | +| │ └── topo # RankGraph topology information adaptation of communication operators | ||
| 222 | +| ├── recv # Recv operator implementation | ||
| 223 | +| ├── reduce # Reduce operator implementation | ||
| 224 | +| ├── reduce_scatter # ReduceScatter operator implementation | ||
| 225 | +| ├── reduce_scatter_v # ReduceScatterV operator implementation | ||
| 226 | +| ├── scatter # Scatter operator implementation | ||
| 227 | +| └── send # Send operator implementation | ||
| 228 | +├── include # HCCL external header files | ||
| 229 | +├── experimental # Experimental code directory contributed by the community (the internal main directory structure is consistent with src, compatibility of new interfaces is not guaranteed, and it is not currently adopted by commercial versions) | ||
| 230 | +``` | ||
| 231 | + | ||
| 232 | +Target directory structure of the HCOMM repository: | ||
| 233 | + | ||
| 234 | +```text | ||
| 235 | +hcomm | ||
| 236 | +├── src # Source code directory | ||
| 237 | +│ ├── base_comm # Basic communication layer | ||
| 238 | +│ │ ├── common # Common basic function directory of the basic communication layer | ||
| 239 | +│ │ ├── config_mgr # Environment variable configuration management | ||
| 240 | +│ │ ├── primitives # Basic communication primitives | ||
| 241 | +│ │ └── resource # Basic communication resources | ||
| 242 | +│ ├── coll_communicator_mgr # Collective communication domain management | ||
| 243 | +│ │ ├── api_c_adpt # C interface adaptation | ||
| 244 | +│ │ ├── common # Common basic function directory of the collective communication layer | ||
| 245 | +│ │ ├── communicator # Communicator | ||
| 246 | +│ │ ├── dfx # DFX | ||
| 247 | +│ │ ├── rank_graph # Topology management | ||
| 248 | +│ │ ├── config_mgr # Configuration management | ||
| 249 | +│ │ └── resource_mgr # Resource management | ||
| 250 | +│ └── legacy # Historical version compatibility directory | ||
| 251 | +│ ├── ascend910 # A2 & A3 compatibility code | ||
| 252 | +│ └── ascend950 # A5 legacy process compatibility code | ||
| 253 | +├── include # External header files | ||
| 254 | +├── pkg_inc # Inter-package interface header files | ||
| 255 | +├── experimental # Experimental code directory contributed by the community (the internal main directory structure is consistent with src, compatibility of new interfaces is not guaranteed, and it is not currently adopted by commercial versions) | ||
| 256 | +``` | ||
| 257 | + | ||
| 258 | +> **legacy = historical compatibility, not continuously evolved** | ||
| 259 | + | ||
| 260 | +--- | ||
| 261 | + | ||
| 262 | +### 3.3 API Layering Relationship | ||
| 263 | + | ||
| 264 | + | ||
| 265 | + | ||
| 266 | +| Layer | Interface | Target audience | Responsibility overview | | ||
| 267 | +|------|------|------|---------| | ||
| 268 | +| L1 | HCCL operators (hccl.h) | AI framework adaptation layer | Provides entry points of standard collective communication operators such as AllReduce | | ||
| 269 | +| L2-comm | Communicator in HCOMM collective communication domain management (hccl_comm.h) | Framework adaptation layer | Communicator creation | | ||
| 270 | +| L2-res-rank_graph | HCOMM collective communication domain management (hccl_res.h / hccl_channel.h / hccl_rank_graph.h) | Operator developers | Topology query and resource (Thread/Channel) acquisition | | ||
| 271 | +| L3-prim | HCOMM basic communication primitives (hcomm_primitives.h) | Operator developers, communication library developers | Data movement (Write/Read/Reduce) + synchronization (Notify) | | ||
| 272 | +| L3-res | HCOMM basic communication resources (hcomm_res.h / hcomm_channel.h) | Communication library developers | Acquisition and management of basic resources such as communication devices/channels/memory | | ||
| 273 | +| CCU | HCOMM CCU operator development interface (include/ccu/, including ccu_primitives.hpp, ccu_res.h, ccu_launch.h, and so on) | CCU operator developers | CCU resource object encapsulation and Kernel Launch interfaces | | ||
| 274 | + | ||
| 275 | +- L2-res-rank_graph + L3-prim are **newly opened operator programming interfaces**, specifically for custom communication operator development. | ||
| 276 | +- L3-res + L3-prim are **communication library development interfaces**, specifically for the development of collective communication libraries and so on. | ||
| 277 | + | ||
| 278 | +## Software Architecture Constraints | ||
| 279 | + | ||
| 280 | +| Constraint | Description | | ||
| 281 | +|------|------| | ||
| 282 | +| **Layering dependency direction** | Upper layers depend on lower layers, and lower layers must not depend inversely on upper layers: `base_comm` must not depend inversely on `coll_communicator_mgr`; `coll_communicator_mgr` and `base_comm` must not depend inversely on `coll_comm_ops`. | | ||
| 283 | +| **Control plane/data plane separation** | Resource management and topology query belong to the control plane; data movement (Write/Read/Reduce) and synchronization (Notify) belong to the data plane. The interfaces of the two planes evolve independently and are not coupled. | | ||
| 284 | +| **HCCL and HCOMM decoupling** | HCCL operators dynamically load HCOMM interfaces through dlsym, so the two repositories can be compiled independently and evolve independently. | | ||
| 285 | +| **legacy not continuously evolved** | `legacy/` is used only for historical version compatibility and does not carry new capabilities. All new capabilities are placed in the standard directories. | | ||
| @@ -0,0 +1,9 @@ | |||
| 1 | +# Basic Communication Module | ||
| 2 | + | ||
| 3 | +The basic communication module is business-independent. It encapsulates the underlying hardware and protocols and provides a unified communication abstraction for the upper-layer frameworks. | ||
| 4 | + | ||
| 5 | +## Submodules | ||
| 6 | + | ||
| 7 | +## Code Path | ||
| 8 | + | ||
| 9 | +`src/base_comm/` | ||
| @@ -0,0 +1,11 @@ | |||
| 1 | +# HCCP Protocol | ||
| 2 | + | ||
| 3 | +The HCCP (Huawei Collective Communication Protocol) communication protocol module. | ||
| 4 | + | ||
| 5 | +## Responsibility | ||
| 6 | + | ||
| 7 | +## Protocol Layers | ||
| 8 | + | ||
| 9 | +## Code Path | ||
| 10 | + | ||
| 11 | +`src/base_comm/resources/hccp/` | ||
| @@ -0,0 +1,12 @@ | |||
| 1 | +# Collective Communication Domain Management Module | ||
| 2 | + | ||
| 3 | +The collective communication domain management module. | ||
| 4 | + | ||
| 5 | +## Submodules | ||
| 6 | + | ||
| 7 | +- [Communicator](./communicator.md) - Communicator | ||
| 8 | +- ... | ||
| 9 | + | ||
| 10 | +## Code Path | ||
| 11 | + | ||
| 12 | +`src/coll_communicator_mgr/` | ||
| @@ -0,0 +1,18 @@ | |||
| 1 | +# Communicator | ||
| 2 | + | ||
| 3 | +The communicator module manages and coordinates collective communication operations. | ||
| 4 | + | ||
| 5 | +## Responsibility | ||
| 6 | + | ||
| 7 | +- Communication context management | ||
| 8 | +- Collective operation creation and scheduling | ||
| 9 | +- Communication domain management | ||
| 10 | +- Topology information maintenance | ||
| 11 | + | ||
| 12 | +## Core Interfaces | ||
| 13 | + | ||
| 14 | +## Data Flow | ||
| 15 | + | ||
| 16 | +## Code Path | ||
| 17 | + | ||
| 18 | +`src/coll_communicator_mgr/communicator/` | ||
| @@ -0,0 +1,3 @@ | |||
| 1 | +<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 837 559" width="837" height="559"><!-- svg-source:excalidraw --><metadata><!-- payload-type:application/vnd.excalidraw+json --><!-- payload-version:2 --><!-- payload-start -->eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO2cTWvcRlx1MDAxY8bv/lx1MDAxNGZzbVx1MDAxZM2M5kWBUlx1MDAxY78kgSRt40BcdTAwMGZtXHTa1dgrrJVcdTAwMTbtbGI3XHUwMDA0UighoVx1MDAxNFxcSlx0tITgnnpJ6KWXXHUwMDEw6IdpbTenfIWOtM6OdjWSJe1LlGT3sKBZWVx1MDAxYf31PPPT6JF8d2l5uSH2u7xxYbnB91q25zqhfafxUdR+m4c9N/DlTzBe7lx1MDAwNf2wXHUwMDE1r9lcdTAwMTai27tw/nzHXHUwMDBld7noenaLr9x2e33b64m+41x1MDAwNiutoHPeXHUwMDE1vNP7NPq+bnf4J92g44hwRe3kY+64XCJcYlx1MDAwN/viXHUwMDFl73Bf9OTWv5LLy8t342/5i+tEe/TsfVx1MDAxZaJ43bj1TZ9D3lx1MDAxMra/43H1055sN43h4r5cXLTU4lx1MDAxZNdcdTAwMTFt2cRcdTAwMDBcdTAwMWW2tbm701x1MDAxNrJcdTAwMTFcdTAwMTC14mCrXHUwMDE3llVLT4TBLl9cdTAwMGI82Wm563OcXHUwMDExhrfVjpt2a3cnXGb6vqPW2dxcXF+9aKl1tl3P21x1MDAxMvvxlmVBZSVcdTAwMWFj2//ytINwrD3rr+RcdTAwMGV32j7v9Ub6XHUwMDFhdO2WK6JjXHUwMDA3hmqNete94sRV/ia5XHUwMDA13zndwpuyq1x1MDAxMrPTlnuqP5w7I1x1MDAxZFRCQcZ44/XAjzWDTIhcdTAwMTAwqDlcXMH1XHUwMDFkXHUwMDFlnauGXHLU0bi9dSlcdTAwMDVcdTAwMTHvYFvKiavKhVJFV6J2v+95quhR5zdcdTAwMTLqUcfV7zr2YEuAUkKZYVBgUjD83XP93fHNeUFrV+18KXHgWkHe8uwm99KyXHUwMDE0fE/kKlx1MDAxMlx1MDAxOFgjSZiWJCqjyJaJmybNVaRcYm2/17VDWa4qqlx1MDAwNG9FlSOn6FR+SPU+8MWW+23UXHLARlo37Y7rRbtTxY7PjOzv5bW1q69+e3B08PDV/V///fvw5Pnjo2dcdTAwMDfJ0vW4XHUwMDE0yNhGo79e9dydSOuNlqwhXHUwMDBmXHUwMDFiScVcdTAwMGJXjm7DXHUwMDE1RNBtaExcdTAwMDJJlkmgXHUwMDAxgFx1MDAwMaVIXHKNS+DcXFxCgFx1MDAwNUu4ZNjckiW3Zc3CdFx1MDAwN4LQ3XF927tZsPx2X1x1MDAwNDd4b3BWR/dcdTAwMTKdlcvDXHUwMDExe4WMfmiOZ4MuuNVcZvZcblOEKtnEmsVpjCTbhp6lU/bsue348+74NU1cdTAwMTGcRVx1MDAxMVNjkFx1MDAwNJrHXGZcdTAwMDIgNJiJXHUwMDE51mFcdTAwMDTNyyCEmoROXHUwMDA3I5EkR2GRjZBxOVJWTI7ALCFHI/58XHUwMDE4XGJR9UxcIoSMtOYgZNXzbnCn3+J6asCRPyhOjY7rOMmRqIgvmEEgJaZJNLYw62qLKtzQ1HxcdTAwMDRcdTAwMTVcIuxnkMJYYVx1MDAxNOc6XHUwMDExloJcdTAwMDMkXHUwMDBiOsycXHUwMDBlqSulfDpcdTAwMTiIXHUwMDEwXHUwMDAwLItpbIDraoMzNFmUXHUwMDBlKT0u8DAhXHUwMDFl1EmsiodLtmgnx/q3hVx1MDAwNzmpwIxcdTAwMDJcdTAwMDR1fCB1NUZFPoxcdTAwMTd9anxApfhg4lx1MDAwNVx1MDAxZmbOXHUwMDA3Vs5cdTAwMDbUYphKI+j4QOtqgzM0WZRcdTAwMGYpPS74MCFcdTAwMWasyfgwuI7datlC1IFcdTAwMTFcdTAwMTZjgCBCdd5gdfVGXHUwMDE1RGTUfWqYMEthgphcdTAwMGJMzFx1MDAxY1x1MDAxMyBcdTAwMTVL5FrBhFx1MDAwNiRcdTAwMTBjnVx1MDAxNay6WuFcZk1cdTAwMTbFREqPXHUwMDBiTEyIXHSgulJ1XHUwMDFlIVx1MDAwMvn19lx1MDAxMcGA/DBkQI0vVuvqi4qziLGST4lcdTAwMGVxalxiXHUwMDBiw2EsNIRMl2OrYlTMsWGTNVv5Zjy3ur7ONkhcdTAwMTUj1j7HXHUwMDA2uiBcdTAwMWKiLFx1MDAxM1x1MDAwMFxmXHUwMDE4IVx1MDAxNGpdcHFeLlx1MDAwMFx1MDAxNiWshFx1MDAwYs7UZOUkXHUwMDFiWrNIsoFNbJb/bMX7XHUwMDAziFx0o+xkjnr09OnJ88OTg1x1MDAwN8d/XHUwMDFjXHUwMDFlPXk8lzxcdTAwMWKlMjzlXHUwMDE1Ylx1MDAxONTQ3XVam1x1MDAxYi9cdTAwMDCks+ZFoTMwk0i7Uy7RXHUwMDA2TJ2r/fjUKVx1MDAxYkxvtlHAvO/1bEOXacNMk2BcZiFcdTAwMDGE6HiyPieXXHUwMDAwXHRcdTAwMTRW5pmPfElcdTAwMTadbKTkSKxiclxcTDayWKLPtM2R1jyWjI5h85pzZLuDSXVcdTAwMTKDIN1cXHyjru6oxJCsylx1MDAxN5x6gDxLlou2XHUwMDExXVBi9pTQZdvZPoDAMlx1MDAwMNYneJt19UG+JItSXCIlx1x1MDAwNSUmpYQ+2i5Jif/++v74xUFdQGExzFxiNZnOIJfqapDqoNBcdTAwMTd/XHUwMDFhrChcdTAwMTdzY7JgxexZocu5s61AXHUwMDE5syi1XHUwMDEyVVdWuFxcVyvkS7IoK1JyXFywYlJW6GPuwqw4/uHn40c/1YVcdTAwMTJcdTAwMTBcdTAwMTDIoPbx8St1dUZcdTAwMTVI6Ks+XHUwMDA1PMR3i0FhPIzdLDY1dmSJ+59VXHUwMDEzXGZOXHUwMDFkXHUwMDA08/FgWZub1nv6Jp72VbzMt4xMXHUwMDA0oFx1MDAwNVx1MDAxMdPdcLo6r9uyJsKJXHUwMDE50ORcdTAwMDFcdTAwMDaoXHUwMDFjYJhMXHUwMDE3YGhcdTAwMTBRLsBoYlx1MDAwZT9cdTAwMTBEwFx0XHUwMDAzjKOnL05cdTAwMGXvXHUwMDBmrmvnmVukbKPewzMpRNCwdJy4Ni+LYGpZZd5WrcKJvNLPJLBollxmLMaeWsQoPb2AZOLpxdlmfZ+nXHUwMDE36culaG2Q6Vx1MDAwZWBcIoosaupcdTAwMDByfW5cdTAwMDBhOPHGw0RcdTAwMDBplkgsrDE9YpjSo9TsXG6R3jVcdTAwMDCAyDBcdGNpeUJWQp5cdTAwMWbSdFx1MDAwM05cdTAwMThgJFx1MDAwN7TBPZKv/dcvXHUwMDFmrrVt3+feP/e/u9lcdTAwMGW57Zw8e/T65aN5zUeyXHUwMDEzcoxNgDDShn+fzctKlolmPiGpeF6mMGNpllx1MDAwYj/Gn5NfXHUwMDEwZ9A6XeLowo/sf1x1MDAxZVx1MDAxMr3TXHUwMDE3vd2qTVx1MDAwMT9/XHUwMDE3iVM8/UjpXHUwMDExp6fQWj0u7mhlIWbC9GPkmvmXP49/fP7qye9zQ0m2SZBcdTAwMDUtRLVcdOFcdTAwMTd19cjEc5Z0/cshQ37Hx9Owu90tIY9mOJBJdbnOqTjgadVcdTAwMDdtgneVMOKma4HDN3y76Y1cdTAwMWZZ47bL71xczFx1MDAxZdyXTkeIyEg8XHUwMDFlRO8t3ftcdTAwMWZWtYX5In0=<!-- payload-end --></metadata><defs><style class="style-fonts"> | ||
| 2 | + @font-face { font-family: Nunito; src: url(data:font/woff2;base64,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); } | ||
| 3 | +</style></defs><rect x="0" y="0" width="837" height="559" fill="#ffffff"></rect><g stroke-linecap="round" transform="translate(10 10) rotate(0 407.5 80)"><path d="M0 0 C195.57 0, 391.15 0, 815 0 C815 0, 815 0, 815 0 C815 40.11, 815 80.23, 815 160 C815 160, 815 160, 815 160 C594.26 160, 373.52 160, 0 160 C0 160, 0 160, 0 160 C0 114.16, 0 68.33, 0 0 C0 0, 0 0, 0 0" stroke="none" stroke-width="0" fill="#FFDAB9"></path><path d="M0 0 C163.01 0, 326.01 0, 815 0 M0 0 C280.35 0, 560.7 0, 815 0 M815 0 C815 0, 815 0, 815 0 M815 0 C815 0, 815 0, 815 0 M815 0 C815 37.6, 815 75.2, 815 160 M815 0 C815 60.65, 815 121.29, 815 160 M815 160 C815 160, 815 160, 815 160 M815 160 C815 160, 815 160, 815 160 M815 160 C626.45 160, 437.91 160, 0 160 M815 160 C626.21 160, 437.43 160, 0 160 M0 160 C0 160, 0 160, 0 160 M0 160 C0 160, 0 160, 0 160 M0 160 C0 100.22, 0 40.44, 0 0 M0 160 C0 103.55, 0 47.09, 0 0 M0 0 C0 0, 0 0, 0 0 M0 0 C0 0, 0 0, 0 0" stroke="#e8685f" stroke-width="2" fill="none"></path></g><g transform="translate(10 25) rotate(0 406 15)"><text x="406" y="19.608" font-family="Nunito, Segoe UI Emoji" font-size="18px" fill="#c45b47" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">HCCL Coll Comm Ops</text></g><g stroke-linecap="round" transform="translate(45 70) rotate(0 75 35)"><path d="M0 0 C41.99 0, 83.98 0, 150 0 C150 0, 150 0, 150 0 C150 21.1, 150 42.2, 150 70 C150 70, 150 70, 150 70 C98.75 70, 47.49 70, 0 70 C0 70, 0 70, 0 70 C0 43.89, 0 17.79, 0 0 C0 0, 0 0, 0 0" stroke="none" stroke-width="0" fill="#ffffff"></path><path d="M0 0 C30 0, 60.01 0, 150 0 M0 0 C43.2 0, 86.39 0, 150 0 M150 0 C150 0, 150 0, 150 0 M150 0 C150 0, 150 0, 150 0 M150 0 C150 18.9, 150 37.8, 150 70 M150 0 C150 25.07, 150 50.13, 150 70 M150 70 C150 70, 150 70, 150 70 M150 70 C150 70, 150 70, 150 70 M150 70 C110.6 70, 71.19 70, 0 70 M150 70 C110.51 70, 71.02 70, 0 70 M0 70 C0 70, 0 70, 0 70 M0 70 C0 70, 0 70, 0 70 M0 70 C0 45.69, 0 21.39, 0 0 M0 70 C0 48.6, 0 27.21, 0 0 M0 0 C0 0, 0 0, 0 0 M0 0 C0 0, 0 0, 0 0" stroke="#c45b47" stroke-width="1" fill="none"></path></g><g transform="translate(45 98) rotate(0 75 7)"><text x="75" y="11.096" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">AllReduce</text></g><g stroke-linecap="round" transform="translate(235 70) rotate(0 75 35)"><path d="M0 0 C47.99 0, 95.97 0, 150 0 C150 0, 150 0, 150 0 C150 24.65, 150 49.3, 150 70 C150 70, 150 70, 150 70 C118.12 70, 86.24 70, 0 70 C0 70, 0 70, 0 70 C0 51.84, 0 33.68, 0 0 C0 0, 0 0, 0 0" stroke="none" stroke-width="0" fill="#ffffff"></path><path d="M0 0 C30 0, 60.01 0, 150 0 M0 0 C34.79 0, 69.59 0, 150 0 M150 0 C150 0, 150 0, 150 0 M150 0 C150 0, 150 0, 150 0 M150 0 C150 21.35, 150 42.7, 150 70 M150 0 C150 23.6, 150 47.2, 150 70 M150 70 C150 70, 150 70, 150 70 M150 70 C150 70, 150 70, 150 70 M150 70 C105.89 70, 61.79 70, 0 70 M150 70 C105.76 70, 61.52 70, 0 70 M0 70 C0 70, 0 70, 0 70 M0 70 C0 70, 0 70, 0 70 M0 70 C0 47.54, 0 25.08, 0 0 M0 70 C0 51.9, 0 33.81, 0 0 M0 0 C0 0, 0 0, 0 0 M0 0 C0 0, 0 0, 0 0" stroke="#c45b47" stroke-width="1" fill="none"></path></g><g transform="translate(235 98) rotate(0 75 7)"><text x="75" y="11.096" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">AllGather</text></g><g stroke-linecap="round" transform="translate(425 70) rotate(0 75 35)"><path d="M0 0 C53.98 0, 107.96 0, 150 0 C150 0, 150 0, 150 0 C150 14.2, 150 28.4, 150 70 C150 70, 150 70, 150 70 C107.49 70, 64.99 70, 0 70 C0 70, 0 70, 0 70 C0 45.79, 0 21.57, 0 0 C0 0, 0 0, 0 0" stroke="none" stroke-width="0" fill="#ffffff"></path><path d="M0 0 C30.01 0, 60.01 0, 150 0 M0 0 C56.39 0, 112.79 0, 150 0 M150 0 C150 0, 150 0, 150 0 M150 0 C150 0, 150 0, 150 0 M150 0 C150 23.8, 150 47.6, 150 70 M150 0 C150 22.13, 150 44.26, 150 70 M150 70 C150 70, 150 70, 150 70 M150 70 C150 70, 150 70, 150 70 M150 70 C101.19 70, 52.39 70, 0 70 M150 70 C101.02 70, 52.03 70, 0 70 M0 70 C0 70, 0 70, 0 70 M0 70 C0 70, 0 70, 0 70 M0 70 C0 49.39, 0 28.77, 0 0 M0 70 C0 55.21, 0 40.41, 0 0 M0 0 C0 0, 0 0, 0 0 M0 0 C0 0, 0 0, 0 0" stroke="#c45b47" stroke-width="1" fill="none"></path></g><g transform="translate(425 98) rotate(0 75 7)"><text x="75" y="11.096" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">ReduceScatter</text></g><g stroke-linecap="round" transform="translate(615 70) rotate(0 75 35)"><path d="M0 0 C59.98 0, 119.95 0, 150 0 C150 0, 150 0, 150 0 C150 17.75, 150 35.5, 150 70 C150 70, 150 70, 150 70 C96.87 70, 43.73 70, 0 70 C0 70, 0 70, 0 70 C0 53.73, 0 37.46, 0 0 C0 0, 0 0, 0 0" stroke="none" stroke-width="0" fill="#ffffff"></path><path d="M0 0 C30.01 0, 60.01 0, 150 0 M0 0 C47.99 0, 95.98 0, 150 0 M150 0 C150 0, 150 0, 150 0 M150 0 C150 0, 150 0, 150 0 M150 0 C150 26.25, 150 52.5, 150 70 M150 0 C150 20.67, 150 41.33, 150 70 M150 70 C150 70, 150 70, 150 70 M150 70 C150 70, 150 70, 150 70 M150 70 C96.49 70, 42.98 70, 0 70 M150 70 C96.27 70, 42.54 70, 0 70 M0 70 C0 70, 0 70, 0 70 M0 70 C0 70, 0 70, 0 70 M0 70 C0 51.23, 0 32.47, 0 0 M0 70 C0 44.51, 0 19.02, 0 0 M0 0 C0 0, 0 0, 0 0 M0 0 C0 0, 0 0, 0 0" stroke="#c45b47" stroke-width="1" fill="none"></path></g><g transform="translate(615 98) rotate(0 75 7)"><text x="75" y="11.096" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">AlltoAll</text></g><g stroke-linecap="round" transform="translate(10 200) rotate(0 408.5 80)"><path d="M0 0 C195.93 0, 391.86 0, 817 0 C817 0, 817 0, 817 0 C817 48.68, 817 97.37, 817 160 C817 160, 817 160, 817 160 C633.12 160, 449.25 160, 0 160 C0 160, 0 160, 0 160 C0 108.98, 0 57.96, 0 0 C0 0, 0 0, 0 0" stroke="none" stroke-width="0" fill="#ADD8E6"></path><path d="M0 0 C163.44 0, 326.89 0, 817 0 M0 0 C215.63 0, 431.25 0, 817 0 M817 0 C817 0, 817 0, 817 0 M817 0 C817 0, 817 0, 817 0 M817 0 C817 33.6, 817 67.21, 817 160 M817 0 C817 43.88, 817 87.76, 817 160 M817 160 C817 160, 817 160, 817 160 M817 160 C817 160, 817 160, 817 160 M817 160 C499.95 160, 182.89 160, 0 160 M817 160 C498.5 160, 179.99 160, 0 160 M0 160 C0 160, 0 160, 0 160 M0 160 C0 160, 0 160, 0 160 M0 160 C0 121.33, 0 82.65, 0 0 M0 160 C0 109.28, 0 58.56, 0 0 M0 0 C0 0, 0 0, 0 0 M0 0 C0 0, 0 0, 0 0" stroke="#2b8bc0" stroke-width="2" fill="none"></path></g><g transform="translate(10 215) rotate(0 406 15)"><text x="406" y="19.608" font-family="Nunito, Segoe UI Emoji" font-size="18px" fill="#1a6a8f" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Coll Communicator Mgr</text></g><g stroke-linecap="round" transform="translate(154 261) rotate(0 75 35)"><path d="M0 0 C41.97 0, 83.93 0, 150 0 C150 0, 150 0, 150 0 C150 24.85, 150 49.7, 150 70 C150 70, 150 70, 150 70 C105.61 70, 61.23 70, 0 70 C0 70, 0 70, 0 70 C0 55.62, 0 41.25, 0 0 C0 0, 0 0, 0 0" stroke="none" stroke-width="0" fill="#ffffff"></path><path d="M0 0 C30.01 0, 60.02 0, 150 0 M0 0 C31.19 0, 62.37 0, 150 0 M150 0 C150 0, 150 0, 150 0 M150 0 C150 0, 150 0, 150 0 M150 0 C150 17.15, 150 34.3, 150 70 M150 0 C150 17.73, 150 35.46, 150 70 M150 70 C150 70, 150 70, 150 70 M150 70 C150 70, 150 70, 150 70 M150 70 C117.09 70, 84.18 70, 0 70 M150 70 C116.78 70, 83.55 70, 0 70 M0 70 C0 70, 0 70, 0 70 M0 70 C0 70, 0 70, 0 70 M0 70 C0 54.93, 0 39.85, 0 0 M0 70 C0 51.11, 0 32.22, 0 0 M0 0 C0 0, 0 0, 0 0 M0 0 C0 0, 0 0, 0 0" stroke="#1a6a8f" stroke-width="1" fill="none"></path></g><g transform="translate(154 289) rotate(0 75 7)"><text x="75" y="10.584" font-family="Nunito, Segoe UI Emoji" font-size="14px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Communicator Mgmt</text></g><g stroke-linecap="round" transform="translate(344 261) rotate(0 75 35)"><path d="M0 0 C47.96 0, 95.93 0, 150 0 C150 0, 150 0, 150 0 C150 14.4, 150 28.8, 150 70 C150 70, 150 70, 150 70 C94.99 70, 39.97 70, 0 70 C0 70, 0 70, 0 70 C0 49.57, 0 29.14, 0 0 C0 0, 0 0, 0 0" stroke="none" stroke-width="0" fill="#ffffff"></path><path d="M0 0 C30.01 0, 60.02 0, 150 0 M0 0 C52.79 0, 105.57 0, 150 0 M150 0 C150 0, 150 0, 150 0 M150 0 C150 0, 150 0, 150 0 M150 0 C150 19.6, 150 39.21, 150 70 M150 0 C150 16.26, 150 32.53, 150 70 M150 70 C150 70, 150 70, 150 70 M150 70 C150 70, 150 70, 150 70 M150 70 C112.39 70, 74.77 70, 0 70 M150 70 C112.03 70, 74.06 70, 0 70 M0 70 C0 70, 0 70, 0 70 M0 70 C0 70, 0 70, 0 70 M0 70 C0 42.77, 0 15.55, 0 0 M0 70 C0 54.41, 0 38.83, 0 0 M0 0 C0 0, 0 0, 0 0 M0 0 C0 0, 0 0, 0 0" stroke="#1a6a8f" stroke-width="1" fill="none"></path></g><g transform="translate(344 289) rotate(0 75 7)"><text x="75" y="10.584" font-family="Nunito, Segoe UI Emoji" font-size="14px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Comm Resource Mgmt</text></g><g stroke-linecap="round" transform="translate(534 261) rotate(0 75 35)"><path d="M0 0 C53.96 0, 107.92 0, 150 0 C150 0, 150 0, 150 0 C150 17.95, 150 35.9, 150 70 C150 70, 150 70, 150 70 C114.36 70, 78.72 70, 0 70 C0 70, 0 70, 0 70 C0 43.52, 0 17.03, 0 0 C0 0, 0 0, 0 0" stroke="none" stroke-width="0" fill="#ffffff"></path><path d="M0 0 C30.01 0, 60.02 0, 150 0 M0 0 C44.38 0, 88.77 0, 150 0 M150 0 C150 0, 150 0, 150 0 M150 0 C150 0, 150 0, 150 0 M150 0 C150 22.05, 150 44.11, 150 70 M150 0 C150 14.8, 150 29.6, 150 70 M150 70 C150 70, 150 70, 150 70 M150 70 C150 70, 150 70, 150 70 M150 70 C107.68 70, 65.37 70, 0 70 M150 70 C107.29 70, 64.57 70, 0 70 M0 70 C0 70, 0 70, 0 70 M0 70 C0 70, 0 70, 0 70 M0 70 C0 44.62, 0 19.24, 0 0 M0 70 C0 43.71, 0 17.43, 0 0 M0 0 C0 0, 0 0, 0 0 M0 0 C0 0, 0 0, 0 0" stroke="#1a6a8f" stroke-width="1" fill="none"></path></g><g transform="translate(534 289) rotate(0 75 7)"><text x="75" y="10.584" font-family="Nunito, Segoe UI Emoji" font-size="14px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Topology Mgmt</text></g><g stroke-linecap="round" transform="translate(10 389) rotate(0 406.5 80)"><path d="M0 0 C194.84 0, 389.69 0, 813 0 C813 0, 813 0, 813 0 C813 57.25, 813 114.51, 813 160 C813 160, 813 160, 813 160 C504.64 160, 196.29 160, 0 160 C0 160, 0 160, 0 160 C0 103.79, 0 47.59, 0 0 C0 0, 0 0, 0 0" stroke="none" stroke-width="0" fill="#99FF99"></path><path d="M0 0 C162.68 0, 325.36 0, 813 0 M0 0 C312.08 0, 624.16 0, 813 0 M813 0 C813 0, 813 0, 813 0 M813 0 C813 0, 813 0, 813 0 M813 0 C813 61.61, 813 123.22, 813 160 M813 0 C813 59.12, 813 118.24, 813 160 M813 160 C813 160, 813 160, 813 160 M813 160 C813 160, 813 160, 813 160 M813 160 C532.68 160, 252.36 160, 0 160 M813 160 C530.04 160, 247.08 160, 0 160 M0 160 C0 160, 0 160, 0 160 M0 160 C0 160, 0 160, 0 160 M0 160 C0 110.43, 0 60.86, 0 0 M0 160 C0 115.01, 0 70.03, 0 0 M0 0 C0 0, 0 0, 0 0 M0 0 C0 0, 0 0, 0 0" stroke="#2e7d32" stroke-width="2" fill="none"></path></g><g transform="translate(10 405) rotate(0 405 15)"><text x="405" y="19.608" font-family="Nunito, Segoe UI Emoji" font-size="18px" fill="#1b5e20" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Base Comm Module</text></g><g stroke-linecap="round" transform="translate(125 451) rotate(0 130 35)"><path d="M0 0 C72.7 0, 145.41 0, 260 0 C260 0, 260 0, 260 0 C260 14.6, 260 29.2, 260 70 C260 70, 260 70, 260 70 C194.97 70, 129.93 70, 0 70 C0 70, 0 70, 0 70 C0 53.36, 0 36.71, 0 0 C0 0, 0 0, 0 0" stroke="none" stroke-width="0" fill="#ffffff"></path><path d="M0 0 C52.03 0, 104.06 0, 260 0 M0 0 C85.24 0, 170.48 0, 260 0 M260 0 C260 0, 260 0, 260 0 M260 0 C260 0, 260 0, 260 0 M260 0 C260 15.4, 260 30.81, 260 70 M260 0 C260 24.4, 260 48.79, 260 70 M260 70 C260 70, 260 70, 260 70 M260 70 C260 70, 260 70, 260 70 M260 70 C162.2 70, 64.41 70, 0 70 M260 70 C161.28 70, 62.56 70, 0 70 M0 70 C0 70, 0 70, 0 70 M0 70 C0 70, 0 70, 0 70 M0 70 C0 50.16, 0 30.32, 0 0 M0 70 C0 53.62, 0 37.24, 0 0 M0 0 C0 0, 0 0, 0 0 M0 0 C0 0, 0 0, 0 0" stroke="#1b5e20" stroke-width="1" fill="none"></path></g><g transform="translate(165 472) rotate(0 77.83995056152344 14)"><text x="77.83995056152344" y="10.584" font-family="Nunito, Segoe UI Emoji" font-size="14px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Base Comm Resource</text><text x="77.83995056152344" y="24.584" font-family="Nunito, Segoe UI Emoji" font-size="14px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">(Channel, Thread, ...)</text></g><g stroke-linecap="round" transform="translate(425 451) rotate(0 130 35)"><path d="M0 0 C83.1 0, 166.19 0, 260 0 C260 0, 260 0, 260 0 C260 18.15, 260 36.3, 260 70 C260 70, 260 70, 260 70 C176.55 70, 93.09 70, 0 70 C0 70, 0 70, 0 70 C0 47.3, 0 24.6, 0 0 C0 0, 0 0, 0 0" stroke="none" stroke-width="0" fill="#ffffff"></path><path d="M0 0 C52.03 0, 104.06 0, 260 0 M0 0 C70.68 0, 141.36 0, 260 0 M260 0 C260 0, 260 0, 260 0 M260 0 C260 0, 260 0, 260 0 M260 0 C260 17.85, 260 35.71, 260 70 M260 0 C260 22.93, 260 45.86, 260 70 M260 70 C260 70, 260 70, 260 70 M260 70 C260 70, 260 70, 260 70 M260 70 C206.05 70, 152.11 70, 0 70 M260 70 C205.05 70, 150.11 70, 0 70 M0 70 C0 70, 0 70, 0 70 M0 70 C0 70, 0 70, 0 70 M0 70 C0 52.01, 0 34.01, 0 0 M0 70 C0 42.92, 0 15.84, 0 0 M0 0 C0 0, 0 0, 0 0 M0 0 C0 0, 0 0, 0 0" stroke="#1b5e20" stroke-width="1" fill="none"></path></g><g transform="translate(425 479) rotate(0 130 7)"><text x="130" y="10.584" font-family="Nunito, Segoe UI Emoji" font-size="14px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Base Comm Data Plane</text></g></svg> | ||
| @@ -0,0 +1,2 @@ | |||
| 1 | +<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 920 869" width="920" height="869"><!-- svg-source:excalidraw --><metadata><!-- payload-type:application/vnd.excalidraw+json --><!-- payload-version:2 --><!-- payload-start -->eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO2dWW9cdTAwMWLXXHUwMDE1x9/9KVx1MDAwNOU1ntx9XHRQXHUwMDE0tuM0rlx1MDAxMze1nbpbIFxmyZE0NUWy5MiOXHUwMDFiXHUwMDE4cNG+NInTtEFadEvhXHUwMDAybV2gXHJSdHmIk+bDxJKTb9E7M5Jm4Vx1MDAxOXI2kiNmJMBcdTAwMTZnLmf9/8495y7nvn5mY2PTuzNyNp/d2HRe69p9tze2b28+7W+/5Ywn7nBgdpHg82S4P+5cdTAwMDYldz1vNHn2mWf27PFNx1x1MDAxYvXtrmPdcif7dn/i7ffcodVcdTAwMWTuPeN6zt7kq/6/V+w95yuj4V7PXHUwMDFiW9FJzjo911x1MDAxYo7Dczl9Z89cdTAwMTl4XHUwMDEzc/Tvmc9cdTAwMWJcdTAwMWKvXHUwMDA3/5o9bs8/ozng3pYp4Hp3gi9cdTAwMDS7ji987HQ9e7DTd6Jdr5ntXGadfLxjPoro42235+2aTVx1MDAxYUXbdlx1MDAxZHdn1zNcdTAwMWJcdTAwMTXSJ1x1MDAxYsOjPrtcdTAwMTFcdTAwMTWbeOPhTefCsG+u3Jz6KdpRZFtEJ+7Y3Zs74+H+oHdSxlx1MDAxYtuDychcdTAwMWWby4/Kbbv9/jXvTnB082TNI9lMnePG0UXi1PaTb/Xsya5cdTAwMTP7mjnrzu7AmUxcdTAwMTJcdTAwMTc8XHUwMDFj2V3/qZlcdTAwMDPF7ta/xNGlXvC8X41cdTAwMWZh0Ds6wvFcdTAwMGKInjM92nI3uiDH8d9cdTAwMGVhWmlGmTrZXHUwMDExSYdFl+9OnjOv2Vx1MDAwYr6ybaTiRFx1MDAwZs0/78W0XHUwMDA04jKIScFzXvO2ID0kNOGX2jzZcffor+hW90c9O7xcdTAwMTQszVx1MDAxYpecSMpcdTAwMTE52d93XHUwMDA3N83OwX6/XHUwMDFmbVx1MDAxYnZvXHUwMDAyV390s1eGg4BcdTAwMGVMMWOcY1x1MDAxZT1td9BzfEVu2iimgLHB4lLv6CRnYk82pX1nsONcdTAwMGVcdTAwMWNzy1x1MDAwM882f4xzXHUwMDAzIJJcdTAwMDBcdTAwMTA6TYBiXHUwMDAwXHUwMDAxPCaU+Vx1MDAwNGCHIXt7kVx1MDAwNJAsXHUwMDAyUt9aXHUwMDE5XHUwMDAwQiimNVwiXGJcdTAwMDCALkT/mZpI6FwiXHUwMDA1wdOzXHUwMDBla4/Hw9tbYye08lve8OhcdTAwMWPwkYPSxVx1MDAwZe3Zk5tFXHUwMDBmO1x1MDAxZlvENI3pvFx1MDAwMraIXGKlNZdcdTAwMDTAXHUwMDE2l8A2MFHHzzM3s3GNXHUwMDA2msXT0Fx1MDAxMlx1MDAwMVZbhZj1f2cy+5TNe2p7ey15xYRjIYWSYmnAwmpIKGJ5tC5cdTAwMTErwlxiYkxjXHUwMDAxUEXKUlx1MDAxNZiSSTfh/czhipOmcNVDne115YpRjTTHeMlcXFx1MDAwMXpIaKI4WU2vrDRcdTAwMTJSXHUwMDExriBcdTAwMWaTlsDK21x1MDAxZDt2XHUwMDBmbe2af1x1MDAwYniY6dqKSIAqXHUwMDAyUCXqpsogRTtrSlx1MDAxNTbBieDxYHXRVGXIISGJwlx1MDAxMVZ96peYas5hV42VVv/louqnvFX/wtVPtalUKFx1MDAxNmzJ4p9SQ0JcdTAwMTGrXHUwMDEzP0VaSa1cdFx1MDAwM7TPS2v/XG4uKn7Rmv7Fiz9oVKBILVv803JISGKFpp8z418yQlx1MDAxNCB/UcHx6diD/MFE2u2JV1x1MDAwNDO1T4pEXHUwMDEzYKtcdTAwMTlcdTAwMThRdFx1MDAxY7baiIItyvVRmlJCuYZcdTAwMDJcbl5cdTAwMDaApYiUXHUwMDExjDSFvFx1MDAxM1nBOykk0bRvsmKJOrzXWU+JaqJcdTAwMDRmKiacU6BQybAkhiuoVUZVcVwiXG5pNO1CtGZ0QVx1MDAxYVWUMCHh/onGapRcIsxcdTAwMTFGXGZydHVcdI2as9r9rbHT2y/SXHUwMDFjj1NcdTAwMTKFvFxcqFx1MDAxN5lcdTAwMTVQaE4vt6u7ei29XFxcIlx1MDAxMMGEXHUwMDExqP94MV4uqIWEXHUwMDFlVufiKkI4U1x1MDAxNDLN50rIfjD03O07W7dt19tCdmnhM7Yq4a9ze7mWlCGJOFma8jPkkJBE8ebyo6Ne9pvMXHUwMDExfNBV9kFxgpnGXGKKXHUwMDE5z1dFqlNcdTAwMWEpXHUwMDBldUG1SEVHKIWU0EY6emVIdWpGyvjUjWRcbpugh2tcckZcdTAwMTBcdTAwMTfKM2XQXHUwMDE5jntbl/PHuaIpXHUwMDBl2lx1MDAxYUMlMKdSsiU2Q2bJISGJdaunlCbSVFx1MDAxMmDb5nNlxkrs2oOB4/u5doGGI9FcdTAwMTTHb40jXHUwMDFlwSTmWC1xwCCohYRcdTAwMWVW2KhPhaJcXDNcZrWYXqwg/Ntj18tcdTAwMWbrizbWX0bIQ4ipTpY6RFxiVENCXHUwMDExq9O+Rn5PXHUwMDAxXHUwMDEzkM1/voL0XHUwMDEzXHUwMDE1aGlcdTAwMDTaqD/cWm9zXHUwMDE31lxuSayWb/xhUSSEscpRPcxcdTAwMWbmIWJcdTAwMDeLUPha5ZDiXG4uTUFcdTAwMWKoh1vrrVxiuJZcYon4QJblXHUwMDA2XHUwMDE1MUEkRLF2obqpYqRcdTAwMWauQ1XMXHUwMDBiJbhcblx1MDAwNtru953xVsfOP15IJZlcdTAwMTJAX5+C+vpk3Ux1yDbpdNaSKY45YUQucaAorIWEXHUwMDFlSlxmvj5cdTAwMWGTY2g6OX4+qnJcdTAwMWb88lwiXHUwMDBmXHUwMDFlXHUwMDFhgvqPXHUwMDFlPWxz+F173Lttj1x1MDAxYjg2nUhCXHUwMDE4I2A0d6mEvTm+0yrmRlx1MDAwMrHccsxNl27bjlpLc6MxYpLDg7NcdTAwMTZjbkApJORQ3NqcXHUwMDEyqihmgiqsoVx1MDAwNvevl1x1MDAxObKTNY06+ShcdTAwMTNQMZ6ASvAppmLDtKPROthcdTAwMTJcdTAwMDWgWuGM+lx1MDAxOWDhymAlXvpxKFxij8lhZeCZpUKuuNZlVFx1MDAxOGjAPJkv7v328adcdTAwMGZcdTAwMGU+eP/xJ+9GXHUwMDBmaDh2d9yB3b8+s9T2cOBdc39cdTAwMTT2XHUwMDFhJbY+b++5/UBJiVx1MDAxM57ruzv+Y9jsO9uxXHUwMDE3bJ6P53bt/slubziK9p5Mhb5cdTAwMTS2g0DKtve94VVnXHUwMDEyXos33nfij8R54Viw2KI8/VaivmSOidbg1JPLZTGcP8NcdTAwMWZgMZXegtBpXHUwMDFhXHUwMDE1UMFcdTAwMTFZqIJb9Nz+RrGI02+9ySx+/N7hu2/PZTFVKsZizPLkYbFr7i2uzEI0Zlx1MDAwYrxcdTAwMDYksURSMCTByZAvVqpcdTAwMWGzp+9PXHUwMDAziXVcdTAwMTRgXHUwMDA3iqTaiqxEjVx1MDAxNWRcdTAwMGWvc52ghFx1MDAwNnI0XHUwMDE1ys//89PDj96ZXHUwMDA3ZbpU+Vxuci6Ue26vXHUwMDE3XHUwMDBmjaBaclrkNUDJMZdMcLDR6aVKTM6a/D9NpYjl9MmmMuZVt1TmopKmX3yDqXz86NHBXHUwMDFiXHUwMDBmnnz8q8O3fzmPTbjsilx0hSRfR8WpJTaVp9KQM3ulLKTzUlx0XHUwMDAwNafUlvGqXHUwMDExXHUwMDE2RJtcdTAwMThXyCSyRIFcdTAwMTUpsvyBfkKamp9cdTAwMTDBW4JcdTAwMGJcdTAwMTJcZvW7NI/gUE1cdTAwMWIom9vpXHUwMDEyq6M1S/t1wKoowZRLsFx1MDAwMehcdTAwMWLVYM3OfFx1MDAwMMSdxNDIXHUwMDEwwlx1MDAxNFx1MDAxM1x1MDAxM1xmq+hyZrCKXHLfJmim0jhcdTAwMDSKqEjTLau5WJ1SRZNZvTyX1cvNYXVa+nWwSjlnWMBcdTAwMTHpy9VYnZGpXHUwMDAx8H4lsrBQiGipjEcu8lSspjJcdTAwMTaCaoZcZulCyegmW1ZzsVxu9YY0ltUrZ/FcXFpcdTAwMTNlVs0rIP86WnWRMlx1MDAxZaSER6B+syyws2ecXHUwMDAyfrBgXHUwMDE2JlxuMXNcdTAwMWSKXHUwMDE5rzhqqlxyx6OCoSu2JKNcdTAwMWFcdTAwMWZccp9CrVx1MDAxZlxckFeZXHUwMDE2RSN5fdHX0tWUlNLAgoVWRyys/zrqVy6YXHUwMDE22pBcdTAwMDLgerUsrvNmylx1MDAwMsAyZinjXHUwMDBic+PZUsSESrZcdTAwMDAzXHUwMDA2XHUwMDAxiymyKNZKccKpRoK0NWxBYsE8440j9npYX1x1MDAwNaK6YTSVjW12ydWxm1x1MDAwNUNccvRcdTAwMWHFY0KxgpqGr9VcdTAwMDIvMCe3MLwmYG3h3ahcdTAwMWZenZZFXHUwMDBi7/GJXHUwMDE3XHUwMDAzb6feqteYXyF0PFx1MDAxOWlE7/WK9GbP/p3GlyphaU2QYZdrpFxiinoksp1lzISFsFFcdTAwMDdVXG5cdTAwMDdzzlp8XHUwMDBi4UtPx3ClOJRXU1OgZlx1MDAwMZwuu3KEp4mogWGFpKJUgZmVXindNztzsjHQjoyxxZBClFx1MDAxM3M1aXxh11lLy1CriWaMXHUwMDFheGlUY7f05qL3dFxmcLpcdTAwMTBK6WpCSWlswUIr7KdcdTAwMDXlX1x1MDAwM6zab4qllEH17beqwpoxQVx1MDAxYWhI5tpcdTAwMTLGWWZcdTAwMWNcdTAwMGJhatBkr09GZYuQJbFxXHUwMDE1tFx1MDAxMLJtSi6B6+lcdTAwMTj6dETijaSWMnhNlVo9sClcdTAwMDRq6aklmGopXGKE7I2qyM6Z2FxyoEuJJZE/PlKETcQ5KlrMmcU1VoxcYo5pfEBGS24ucpc0PCqeQbU8ufn85JmFV89xXHUwMDA2XHUwMDE3dVxmZeSC+UlcdTAwMTmhvqFv11x1MDAxM/FCk9MhkpMhb1x1MDAwMuSM9qo24Fxyt5YmeUnDpCqSvG5cdTAwMDFvXHUwMDFjiDqqZEI0xVx1MDAxMk5cdTAwMDH5nbJcZs+ZXGJcdTAwMGa0WUlqXHUwMDExwpA/S1tcdTAwMWLPOEmwXHUwMDEw1IqUdZJoglKLc6z8ZVx1MDAwZnDS9Y7yTtBcdTAwMTj6LcHhiU9cYoZcdTAwMDZPRZ2+9Vx1MDAxMIwlVZzHhVluQMbhz/76+YO3Pv/wJ1x1MDAwN1x1MDAxZv3l4DdcdTAwMGa/P/js3lvXrp+7eu2zez++8PIrh+/ef/zJ75/869GTR380W6zg57N79+eN4ah82NXZhVxmyOqIrLFcdEyxXHUwMDAyx3x8t6xNmD1ZXHUwMDFkMFx0nFgm0EOMMi5cdTAwMTHFJDnFVirQJkhuaVOZY4pM8EahwLo1XHSzTMKSxmhVrNTDXHUwMDE5XHRPXHUwMDFl/P3xo/9cdTAwMDbIXlx1MDAxZF64+OSTX1x1MDAxY9x/YCi99txL58x/r5w/2ZLDXHUwMDFj1HDI1ZlcdTAwMDKYrVpcInYskVx02sDxmnZcdTAwMTlT4Hr9XFztaiy9itZ0mlxuLIBmbiotheI/kXpP66ze6qkrINiliX2En/9cYiA+NpK+UcSHk3ZcdTAwMGZcdTAwMWY+OHj/zXkow2Xj03xVYuuCXHUwMDE5TdxsLd3NjFx1MDAxYXFTXHUwMDAx9VV1SpBpXHUwMDBmTKBhe+ZcdTAwMTRb5u3ZW6O+PchFqmSWlJhrgYQ23p5ONqNRv5HNn0+FtKnEXHUwMDEx1tOVNqveW9XM1Fx1MDAxOItcdTAwMDGXXGLCieJcblx1MDAxYewlSmWXmeW+XHUwMDEzpJiMy7MouYfvfXh4/4Mv/vCnbGCBXCJcdTAwMGJLjbFkSoXWXFwjXHUwMDAxjsfslqDU6ffd0cSdbOVqXHUwMDE3ozjqv1xi2rSBWpRIy1xcoqaI+XE3hjujiqXGaKLHvFx1MDAxOFx1MDAxNjFj5tH5aUtcdTAwMDFcdTAwMThx7Y6zP1x1MDAxZUDEVVhcdTAwMTTG0GvNJjG9f4FZMZZcZqKpLf2pXHUwMDAzYDtXr1xuiCRcdTAwMGaIXFy0IC5cdTAwMTZESqS/dp+EeoZbXHUwMDEwXHUwMDFiXHUwMDA0otSESlx1MDAxOY87XCJcdTAwMTCdXHUwMDEyIPbtjtPfXHUwMDFhjYe33J5TKC9ccqHpXHUwMDEwczpRXHUwMDE01KiMlaVcdTAwMTMhZpH2pC+Tpyq0IIqCXHUwMDBilNe+uGLlXGLz8OfvPP7f7+blqYFLxb1Vlth6qrxVLlx0U1IpyFndLo3mcTt1kKwjV2+ubLlcXCyXmPpLp2uormxcdTAwMWWYYcqZMP1MNphwqTVcdTAwMDFTXHUwMDFh71VcYlxmTi3YKVxyZs81ava6u/lcIklsKVx1MDAxY/3K5DhHQbjFePTbXHUwMDAyW693qzBnXGbHXHUwMDBmXHUwMDE0825j3XRcckE27E9ccvtWs5GFS61cdLKYSKyIifOgynS3PLNj95YznYx5VkeKJFx1MDAxNlEm+PWHXHUwMDFiK61QklxcyYjFmNmrXHUwMDExlkRcdTAwMDO5Ultyg60lydWCcVx1MDAxOZ+PXHUwMDFkXHUwMDAzt+7GWqRcdTAwMTRXNK7Vwt0sf/vnwVx1MDAxYlx1MDAwZsNe0Fx1MDAxOVx1MDAxZCxgqfLgNi1EpZL4rTDQ8Fx1MDAwN7c0ueF4k63JnUE3XHUwMDBmtkQkK1xclUx5wfA0qDG3uVx1MDAxZVBll9rxzHrrXGYqkZxcdTAwMTKpXHUwMDE5uNR6XHUwMDAzneKPPn3y8M0vfv3vg3feOvzHn2f4xVlcdTAwMDXXXHUwMDA2V+GPMVx1MDAxM5xAXHUwMDE17Vx1MDAwZsp0hFx1MDAwNotcdTAwMWZcdTAwMWM3JPlrXHUwMDFmhEmap6lcclc9SGKbWiFcdTAwMGLr6YbequtjLb7+bMpcdTAwMDJcdTAwMWLkaMv0XHUwMDFhWURcdTAwMTGEKFx1MDAwNydcdTAwMDLVXq2WXqpiNHTTXHUwMDBieER/bUSPLPhw8verT88vzWLFz6S+Zl6aPfbOXHUwMDFiXG7cwU7yuTrhXHUwMDFkz8pxXHUwMDFjXHUwMDE4ge5+4pX6r89cdTAwMWX5T2TqhTiD3vwzZWY5j5/Mikb4zThfcG/nfPD8bFfp92CuJr4vTWjfnnhcdTAwMTfMXbueecEv+y8nfYDpXGbq1F+JXHL04m+WNi5B2tpihiW+LFhrWFx1MDAxNmdYXGbsklJa3+J7X1bDXHUwMDAypGZelWk520zbolx1MDAxMFx1MDAxMkhcdTAwMTEw20C/vG2ZtUZcXFx1MDAxMddF0FxcXHUwMDE2hjTLwmRGXHUwMDE0vaH/Ylx1MDAxYWBiXGLizLj/or41zk+ZiSFcdTAwMDVMTJrA+Vx1MDAwNiFr4cW4NaCxzbVcdTAwMTiD5Fx1MDAwMy1qXHQ4k1x1MDAxMsErQuxVtFx1MDAwM1x1MDAxOcs5zrJcdTAwMDNMtHZgKXZAXG7JsWrNwGrMQFx1MDAxZVx1MDAwZmSJNsCfJ6cwgVx1MDAxN/lcdTAwMWVUtFx1MDAwMlnrrs4yXHUwMDAzsnVcdTAwMDeWXHUwMDEzcfh4YsLA5J2tXHUwMDFkWLxcdTAwMWRomjfAKPfTi0hogNywtCGYvZhrXHUwMDExf0BcdTAwMDJjV1x1MDAwMUPAm2VcYprf8qBwsFx1MDAxMlxiOK/jy2BcdTAwMDd4XHItXHUwMDBmtdT6uexKxoLLi3MvKrc3XHUwMDEwJJi/9lx1MDAwNodcZsuotGE5Sk9cdTAwMTFcdTAwMDRcdTAwMWEol0GhKYNCgaZMXHUwMDBlWFx1MDAxNJnqXHUwMDExjer2RnRlWjy1J/I17MluM3xccilNyIEk2G3Ca+/lbIaROctcdTAwMTPlp1RU3epkpSRNeFx1MDAxOUomfnCsUCVDlJGPPHnu5I/Ice5itslcdTAwMWK7IYNcdTAwMTVcdTAwMDIgwZWSXHUwMDA0g1PNf1jVPIVcdTAwMTFQPvskkLLiXG5JpZNcdTAwMDLiIKJT31x1MDAwMJJJXHUwMDE1cYdaa+W/QaYkZfG0PjFbVXeamqbYqmwlpb5fj62KZZOa7bskXHUwMDA3/3Ix/dKKXHUwMDFiq85y/KZcdTAwMWFsk+ZYMVxyz1lcdTAwMWHPNk1njt6RcbFG1zwjupOnY2Bxe6k5XeE2z/Hvm8c2vTTsOVx1MDAxN1x1MDAwN3ann1x1MDAxNuDmLde5fX7aPDy1XHUwMDFk/GyeOXpuvmlwXHUwMDAy/u6euft/M9CNoyJ9<!-- payload-end --></metadata><defs><style class="style-fonts"> | ||
| 2 | + @font-face { font-family: Nunito; src: url(data:font/woff2;base64,d09GMgABAAAAAA3wAA8AAAAAHIQAAA2SAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGkIbilgcgjIGYD9TVEFURACBMBEICp8QmBYLWgABNgIkA4EwBCAFhCQHIBurF7Mi2DhAgMgvCdl/lcCT8Wo8Bw+BZlcJK6qoPUAUZWBofq1RDsLzCGCCEfw7O9I7OAOOMcIxXAuep7XK9wt6GmhpAHv2eo+BPIXsxkYB27i4WJYArJBqeNrmP9Tx/ZxxXD3KDYwIQqmQCm1s6AHmIsrIRenvTp7//jDPffsXuNHSgi1YJly5VkwHCkhzDmj4Dc4rpY4NKkW6kP8CAAPzDLkuRvkA0mD9NPdq75Kyajq0SGoaUG5CT06Yn8v7cHnJJ8qYS5hfIDWO3eTmqqqA0wGBQjk1T2DnJpRq/18zowlJ1zRMIQwtyEP9MJ3Tbr/tvhYETAcx8Cl1OaEU+oQhWSN518A1J1U5gPYYRxX9pKGpFtNb260OQJxNxoKAuPcmwoBgAM2lwt1FLAxSoYxnqMOo8ZnwOQgXHe5jjGobxFd3eWvvfmJ85VwTZP3PO/GBNz75d3FDuDFcFgCuVpndP0pdYf+VZwHXBnE7RliICw5TAsw4T6jlg3iy4eWn6hsZQu3LokFr5KJ1KSyZF/dUVVGguyEdrvs/qcIJJj279YYSks/m3l7+CmyNpwFX3aj/3ViBBXC6uCZBV3CQrBec+sNSZQ29LODSa6oTPqFVBYZwYHmmnnep5NWSpV8v3DXJ9LGyS9fHAYUKijEcA+To2pXTRCpxIe5SFA4J96uQ8hC/I0S3vvQmF0v6Bap+DPXooGh1UYyw/82Duxw33+1XHT3CGQoveQnc1SE/+vWTYHh3L/C8TbxNo/Neww2CFPBR6q1XNQMY+/Wy/to0sMGiiMmSEpgQH3CkC1vMwjHZdftvnDgVzKefUj9qszp5et5LiiWqaCtSVX9310STFGmKqQkhEm0DakkNvYUSvlROkDTAIM/de4QnVhEYwIuyPhMlffiKuiHCakhpWlMmNixU5RtJs77Fx5i3ShxoUzTKzHkwVIaahBgM5AuxUeo2vPWDqs2Td6IkY4RWaZ02UF6hpY7Z6qBYnl5+q11ysGfgF8LNWCAUDVnR0037hj1/jISA8H/keAhQfe8b9oLS+0h/EOQ/joZigA+EPItQD9JA9FAVD3GvqK3UGuUm6rNHbMoZlZinn7+hoFRTicMQsr/o//MUXcfog9moRbWTmbSWxqh1mFIMj3GvOmqC6N2aqDK1ML9ioT6VB2CbbIsc4iVbv7Jg/0j4TYEHKdya/PL/mTCblK6QLy/przwWSwagBgw/k7Lc89VIggb8haVGA4wmaKNKPwfKOGEqv8IEBTQOhyDBb/ZRYFTBUAozzbGBiYWTm9cQn6CImFGT7YDCDLOtYWBhc0v9RmhYTFyfD5dZYdztLne6wfWuG36Aa13tKpcTUGCVp5pCSLuWjdMpPVx+LkyDNxPbYDKqKdgxMjRVCgi3PLqdJgnlVeZtzgF/dijXqwXBlIGoXw5NKYaCsWBxrTdl0ZReOn1KmcZpsxxMOzPK9sz4w6Yiz7v0WcTEzoNikRtYssiDmu1bABcZ44bjaoqXOeZVwDM1mdyOsDjN7nA5uvzva9z/OGgvAzFcyKGftuNjMGhivPfg97rn7+Ugu6YZOL92kbr7Yxx8XuV+f9ljk2iOXzJYiHufZIxpr6bR3hAuc25ySJ9VMWIw6gesMtutkOE5SezmiYENF2boGmNcUEOMJI8mCGvRfGUmzh5kDC8FgDExtgXxTLO4QDui1fAySB9jVDBzLeKHmccZDPDZ2wE+hdnReeBdvrXMOQPWCnrU9SMQalV+6ixaumaVvOvdYLlcrvJRSfpF8uC20+l8u1TqmQxs1jLVMmA8JGyq9e9Icllw+71bUSIMTvfiNj6zi9GzNIZZnfMLdCMYndvQczM/AvQunnu7/0QO7Y8I4+Fj+cZpsbi4BO/5DwRNFe+cgiy7V3c8mc66ugTavZ2Ms2oJndHXvBRmETB0cdkk+9hnH9ehgwAOmZqeoZfePgTitHQHpXTg850yafobwTtfrbyeXJMAMjnC7y7Y7GCVp4ncR18EVKMyHaXu33+ODp9bRzz5gZfvjVcBbjGZbcbuhBBtMjJlodcPfwg5NAfnZjysudMX6YmAagZTwWDLpli7Kb638Jk33HNXsRfWcnPvcO2LXtpqdfFxrVFlITmryPh5YvpW054hvJRBg7KrNxYv/yJ0g/aHl06RUW2MjvMtEJ3zFwsrrKYxSOJemSccmwRqxeYIO0/mDBowxnRkqpI22j99+erFJUjhlNSj01WJCj/yTJf/wSflh6654UKksXbtWaEwQbvIppkZkIQBk/vxnmki17qzQMqm6xZmo6djZlEU9e2+mck8Py27jJY2Y0Ril/rS6rWrF0PvsWV2L0UT/oHlKNjHWmB1sWf3nW6opM4qlBncsozMLamOdl331ED0Re0TJoO4pcUgMj2hv6O1VSwUog/Yegc4mOqbcVvOR+xlu53dm6vM4rBg699LI/wb/y62sSqMfmn9VJunfrNfaqxwsIV/n1s/MvnWzmh2pqd76Lq7b73GWbGrw7O73D1jOq7sF8gVgiHVgb379h4PsIvicgxX4NqvavAaDK+m/l+1GsdvXjnYSacmYBSOU3AcwiRR6buHMslc8bO6ugyP4n9USTJD3+tqk7LhCNhNHaCGvA5RN5MKnLDYgu10wk2Mk0MEZtyO/L6BvP3tEoxwkeOEhiQ1BJf64cHNaZnpjMDPD7F4hAZs84hhMg7dGJN7/WoVm08NkaSLGiU1TLT1+stVUEC6Z9OFD+6jvo9NRQaHrm1iD34HR6jhW00mtVJp4s1vtd+fv0/a0O6rMKxQhauBjrVjWdU4Ed0eeKxtqmLiv5iRJnGTxSyXycwyy01A5Fe4M4xZnz15lZYWf+v9Aa7EY2upLblRne4ju/DODmNFXquqoTtL2BwU3HjnhCZzx1eb7KzqGv2G/fnlcVn6CNFP9Lp05bk6Ra2XByo8OAF17+AOHLfjOKHAcSXxjg6OgJCv9udqtLlB7TbWGAXHWJsD3pGeHu9IYLNKqOF8W490x1YZEHlEfPSt0N4IF7cOPGnMfc6QsGO4YvApPf9pY7+NgD1j74QH4gQZH324gnqkMtEPPvGrLQWliuL6rm2cYIWwzOhJr95Q4K3Mn15fFBf92iRQMW2fOx6mX3r1NheWL7MXFjnkqdBNEsNQc2XiNikPcH19oLkpZhLyOyRSj6Axx0imrjpU33uf2Ghm5e0L4tISp7lXx2re8YTt+9rBy38YSJDkr+4V18WMptqofH4yWZf0N6QPhyhqDMbgOEWOw45zX3TLSjSl0qJss8hj7JCXSAtzxAhk6gRFvjkqlkSNreKN/hZVlYm/hedpRPmYS9iSXrtee6m0UlGaY6mjtzs7rHx55qdfbv+/du5NejsLnKRT43BSjFWjzCrMuS/P2z3QccVHH/Hsyg/OWm7tFBc+H8ermGg1PjRZAUY9chzG4BhJjcGsdG13k0RkKM5zyuhwmKLGIU3GbZC2mhTfBk1vyEl4jDXxF06wjkEf1cn9lsX5mpv1NIf1rKUC+Mg3GD2O31Ne6ofa84VXvth7doXEU7K3o/no/GRyCNquJ0VLkF8Q+lqfpGmjUcjvlMhc2fUKjQpdrdfVbOO4Byd+dCPjH7dEnvxjZXLSQhkqo6s1LV/DYYD5IlNRvln4u7Q+fmnIN4uiwqHJmlzH5PcNb9Ths4ztz+EZex+5ZQz8fosld8qWq0hv5tSL9Wb5dx//8/MVpdQwdD/Y5BGDO+9GpaURxUL+vXf0irwEs2XX8k7emZ3xHpwpEG37Rz1t2ja2vZ39HakP0cT9qg+Qm3ZJhOimmdQI6yBsg9QkHH19siKlm/Mui/M2h1fle53mT229+4bxxjNhq3XTlttvGm08F7JbTRbjgZMnW/daJdnreH80sIQ7MdyOb82rPNH15k7Uvf+LA21fXp2euYewJ463YQfcl6J1BkP1lGX3Yq7O4Q/Wk9bZRRH5sXqxyFKoLyY/Ui8UWgtbQaQvyATouhyBreqv1dva/rJWzmoQ5Lswoq7O5qMoChKaw+RwNnB4P3A4H4ELX6FOFHWgH2QOoOhgJmhv3MNi38nmrLHZV6+Pt1YDnmlPIGVtGFQ04gA8MqGELIWxTwDcvy4Aa/ufnlUP0v3H99aripDprJdtSTOWepEA/duZ8Vr59qls+b+v9XeAD2uX3g74ZO6lBa5iuSkdKPAoAIJvsfiOg1SYZu6vZ3p+ZW69p6hVDtQzLKtvJN96T2+T8rDJUe76+p3fg+lT139VZfX0f39o99gtr0jz85LpZUCE6jYOybXcFt+xHDGZuzYzmD5dzTY9oevIxf73BTaVpV5Cuh4g0mE1E2K5i+/TkctZ4HuW5BpWA+76I9S2HbfOVSlQQL1cZBxNRgA8zZ/vU8Rsr05RUs9P0dYba2rcU6ym45M9M80sJBAbxVTSq9Smh7zPPxbYKyLEK8xo0ACfUSE6CV5BPv3cBvkMG5FgMirMJyFCZUJCjFerq3lZghldBsXEPzcijG+emRaabS6Zf5mdzExUDZmY2vgw5kF381hc63yxKL99hYioSTFXd3PNNsd8hf0aHUyRkO8OzB/hN6hf8DUOngjCCECDb3KK3hOi4oRmmeVSHB+5mdCn3DkMGXiEJoYFBQ7VhSeCrRVuZtpaROvX5MDaAAAAAA==); }</style></defs><rect x="0" y="0" width="920" height="869" fill="#ffffff"></rect><g stroke-linecap="round" transform="translate(10 50) rotate(0 450 404.5)"><path d="M32 0 C217.45 0, 402.9 0, 868 0 M868 0 C889.33 0, 900 10.67, 900 32 M900 32 C900 249.7, 900 467.41, 900 777 M900 777 C900 798.33, 889.33 809, 868 809 M868 809 C681.17 809, 494.34 809, 32 809 M32 809 C10.67 809, 0 798.33, 0 777 M0 777 C0 517.19, 0 257.39, 0 32 M0 32 C0 10.67, 10.67 0, 32 0" stroke="#3b82f6" stroke-width="1.5" fill="none" stroke-dasharray="8 9"></path></g><g transform="translate(15 55) rotate(0 32 10.799999999999997)"><text x="0" y="16.064" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#3b82f6" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Comm Entity</text></g><g stroke-linecap="round" transform="translate(30 220) rotate(0 420 250)"><path d="M32 0 C261.41 0, 490.83 0, 808 0 M32 0 C215.7 0, 399.41 0, 808 0 M808 0 C829.33 0, 840 10.67, 840 32 M808 0 C829.33 0, 840 10.67, 840 32 M840 32 C840 125.76, 840 219.51, 840 468 M840 32 C840 128.13, 840 224.25, 840 468 M840 468 C840 489.33, 829.33 500, 808 500 M840 468 C840 489.33, 829.33 500, 808 500 M808 500 C513.96 500, 219.92 500, 32 500 M808 500 C638.6 500, 469.2 500, 32 500 M32 500 C10.67 500, 0 489.33, 0 468 M32 500 C10.67 500, 0 489.33, 0 468 M0 468 C0 296.97, 0 125.95, 0 32 M0 468 C0 324.25, 0 180.5, 0 32 M0 32 C0 10.67, 10.67 0, 32 0 M0 32 C0 10.67, 10.67 0, 32 0" stroke="#1e40af" stroke-width="2" fill="none"></path></g><g transform="translate(410 225) rotate(0 40 13.5)"><text x="40" y="20.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e40af" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Comm Engine</text></g><g stroke-linecap="round" transform="translate(70 100) rotate(0 130 40)"><path d="M20 0 C85.62 0, 151.24 0, 240 0 C253.33 0, 260 6.67, 260 20 C260 34.36, 260 48.72, 260 60 C260 73.33, 253.33 80, 240 80 C158.68 80, 77.36 80, 20 80 C6.67 80, 0 73.33, 0 60 C0 47.26, 0 34.52, 0 20 C0 6.67, 6.67 0, 20 0" stroke="none" stroke-width="0" fill="#a5d8ff"></path><path d="M20 0 C68.96 0, 117.92 0, 240 0 M20 0 C84.29 0, 148.58 0, 240 0 M240 0 C253.33 0, 260 6.67, 260 20 M240 0 C253.33 0, 260 6.67, 260 20 M260 20 C260 31.33, 260 42.65, 260 60 M260 20 C260 33.95, 260 47.9, 260 60 M260 60 C260 73.33, 253.33 80, 240 80 M260 60 C260 73.33, 253.33 80, 240 80 M240 80 C191.52 80, 143.03 80, 20 80 M240 80 C190.36 80, 140.72 80, 20 80 M20 80 C6.67 80, 0 73.33, 0 60 M20 80 C6.67 80, 0 73.33, 0 60 M0 60 C0 45.82, 0 31.64, 0 20 M0 60 C0 45.46, 0 30.92, 0 20 M0 20 C0 6.67, 6.67 0, 20 0 M0 20 C0 6.67, 6.67 0, 20 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(168 129.2) rotate(0 32 10.799999999999997)"><text x="32" y="16.064" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Comm Resource</text></g><g stroke-linecap="round" transform="translate(490 100) rotate(0 130 40)"><path d="M20 0 C91.72 0, 163.44 0, 240 0 C253.33 0, 260 6.67, 260 20 C260 35.34, 260 50.69, 260 60 C260 73.33, 253.33 80, 240 80 C170.81 80, 101.62 80, 20 80 C6.67 80, 0 73.33, 0 60 C0 49.57, 0 39.14, 0 20 C0 6.67, 6.67 0, 20 0" stroke="none" stroke-width="0" fill="#d0bfff"></path><path d="M20 0 C103.07 0, 186.14 0, 240 0 M20 0 C102.79 0, 185.58 0, 240 0 M240 0 C253.33 0, 260 6.67, 260 20 M240 0 C253.33 0, 260 6.67, 260 20 M260 20 C260 33.1, 260 46.2, 260 60 M260 20 C260 29.92, 260 39.84, 260 60 M260 60 C260 73.33, 253.33 80, 240 80 M260 60 C260 73.33, 253.33 80, 240 80 M240 80 C156 80, 72.01 80, 20 80 M240 80 C169.73 80, 99.47 80, 20 80 M20 80 C6.67 80, 0 73.33, 0 60 M20 80 C6.67 80, 0 73.33, 0 60 M0 60 C0 48.45, 0 36.91, 0 20 M0 60 C0 49.62, 0 39.23, 0 20 M0 20 C0 6.67, 6.67 0, 20 0 M0 20 C0 6.67, 6.67 0, 20 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(572 129.2) rotate(0 48 10.799999999999997)"><text x="48" y="16.064" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Task Orchestration</text></g><g stroke-linecap="round" transform="translate(70 260) rotate(0 110 30)"><path d="M15 0 C85.42 0, 155.83 0, 205 0 C215 0, 220 5, 220 15 C220 24.79, 220 34.57, 220 45 C220 55, 215 60, 205 60 C134.85 60, 64.7 60, 15 60 C5 60, 0 55, 0 45 C0 35.98, 0 26.97, 0 15 C0 5, 5 0, 15 0" stroke="none" stroke-width="0" fill="#fff3bf"></path><path d="M15 0 C83.33 0, 151.66 0, 205 0 M15 0 C69.43 0, 123.86 0, 205 0 M205 0 C215 0, 220 5, 220 15 M205 0 C215 0, 220 5, 220 15 M220 15 C220 23.52, 220 32.03, 220 45 M220 15 C220 23.54, 220 32.09, 220 45 M220 45 C220 55, 215 60, 205 60 M220 45 C220 55, 215 60, 205 60 M205 60 C152.98 60, 100.97 60, 15 60 M205 60 C148.42 60, 91.85 60, 15 60 M15 60 C5 60, 0 55, 0 45 M15 60 C5 60, 0 55, 0 45 M0 45 C0 38.48, 0 31.95, 0 15 M0 45 C0 35.69, 0 26.37, 0 15 M0 15 C0 5, 5 0, 15 0 M0 15 C0 5, 5 0, 15 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(149.51201629638672 279.2) rotate(0 30.48798370361328 10.800000000000011)"><text x="30.48798370361328" y="16.064" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">thread 0</text></g><g stroke-linecap="round" transform="translate(320 260) rotate(0 110 30)"><path d="M15 0 C74.99 0, 134.99 0, 205 0 C215 0, 220 5, 220 15 C220 25.37, 220 35.74, 220 45 C220 55, 215 60, 205 60 C144.76 60, 84.51 60, 15 60 C5 60, 0 55, 0 45 C0 33.65, 0 22.3, 0 15 C0 5, 5 0, 15 0" stroke="none" stroke-width="0" fill="#fff3bf"></path><path d="M15 0 C58.48 0, 101.97 0, 205 0 M15 0 C67.73 0, 120.46 0, 205 0 M205 0 C215 0, 220 5, 220 15 M205 0 C215 0, 220 5, 220 15 M220 15 C220 25.87, 220 36.74, 220 45 M220 15 C220 23.12, 220 31.24, 220 45 M220 45 C220 55, 215 60, 205 60 M220 45 C220 55, 215 60, 205 60 M205 60 C130.29 60, 55.59 60, 15 60 M205 60 C130.64 60, 56.28 60, 15 60 M15 60 C5 60, 0 55, 0 45 M15 60 C5 60, 0 55, 0 45 M0 45 C0 37.13, 0 29.26, 0 15 M0 45 C0 38.15, 0 31.3, 0 15 M0 15 C0 5, 5 0, 15 0 M0 15 C0 5, 5 0, 15 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(399.2400131225586 279.2) rotate(0 30.759986877441406 10.800000000000011)"><text x="30.759986877441406" y="16.064" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">thread K</text></g><g stroke-linecap="round" transform="translate(570 260) rotate(0 110 30)"><path d="M15 0 C89.84 0, 164.67 0, 205 0 C215 0, 220 5, 220 15 C220 23.87, 220 32.75, 220 45 C220 55, 215 60, 205 60 C147.51 60, 90.01 60, 15 60 C5 60, 0 55, 0 45 C0 35.49, 0 25.98, 0 15 C0 5, 5 0, 15 0" stroke="none" stroke-width="0" fill="#fff3bf"></path><path d="M15 0 C80.42 0, 145.84 0, 205 0 M15 0 C57.6 0, 100.21 0, 205 0 M205 0 C215 0, 220 5, 220 15 M205 0 C215 0, 220 5, 220 15 M220 15 C220 23.52, 220 32.03, 220 45 M220 15 C220 21.73, 220 28.47, 220 45 M220 45 C220 55, 215 60, 205 60 M220 45 C220 55, 215 60, 205 60 M205 60 C136.45 60, 67.9 60, 15 60 M205 60 C162.1 60, 119.21 60, 15 60 M15 60 C5 60, 0 55, 0 45 M15 60 C5 60, 0 55, 0 45 M0 45 C0 36.56, 0 28.13, 0 15 M0 45 C0 35.77, 0 26.53, 0 15 M0 15 C0 5, 5 0, 15 0 M0 15 C0 5, 5 0, 15 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(640.1680297851562 279.2) rotate(0 39.83197021484375 10.800000000000011)"><text x="39.83197021484375" y="16.064" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">thread N-1</text></g><g stroke-opacity="0.4" fill-opacity="0.4" stroke-linecap="round" transform="translate(70 340) rotate(0 110 140)"><path d="M32 0 C66.91 0, 101.81 0, 188 0 C209.33 0, 220 10.67, 220 32 C220 94.1, 220 156.2, 220 248 C220 269.33, 209.33 280, 188 280 C146 280, 104.01 280, 32 280 C10.67 280, 0 269.33, 0 248 C0 165.03, 0 82.05, 0 32 C0 10.67, 10.67 0, 32 0" stroke="none" stroke-width="0" fill="#dbe4ff"></path><path d="M32 0 C63.41 0, 94.81 0, 188 0 M32 0 C91.87 0, 151.74 0, 188 0 M188 0 C209.33 0, 220 10.67, 220 32 M188 0 C209.33 0, 220 10.67, 220 32 M220 32 C220 100.79, 220 169.59, 220 248 M220 32 C220 104.37, 220 176.74, 220 248 M220 248 C220 269.33, 209.33 280, 188 280 M220 248 C220 269.33, 209.33 280, 188 280 M188 280 C132.05 280, 76.1 280, 32 280 M188 280 C128.11 280, 68.21 280, 32 280 M32 280 C10.67 280, 0 269.33, 0 248 M32 280 C10.67 280, 0 269.33, 0 248 M0 248 C0 181.95, 0 115.91, 0 32 M0 248 C0 164.07, 0 80.13, 0 32 M0 32 C0 10.67, 10.67 0, 32 0 M0 32 C0 10.67, 10.67 0, 32 0" stroke="transparent" stroke-width="2" fill="none"></path></g><g stroke-opacity="0.4" fill-opacity="0.4" stroke-linecap="round" transform="translate(320 340) rotate(0 110 140)"><path d="M32 0 C70.69 0, 109.39 0, 188 0 C209.33 0, 220 10.67, 220 32 C220 86.39, 220 140.79, 220 248 C220 269.33, 209.33 280, 188 280 C126.13 280, 64.26 280, 32 280 C10.67 280, 0 269.33, 0 248 C0 192.92, 0 137.84, 0 32 C0 10.67, 10.67 0, 32 0" stroke="none" stroke-width="0" fill="#e5dbff"></path><path d="M32 0 C73.98 0, 115.95 0, 188 0 M32 0 C87.9 0, 143.79 0, 188 0 M188 0 C209.33 0, 220 10.67, 220 32 M188 0 C209.33 0, 220 10.67, 220 32 M220 32 C220 101.65, 220 171.29, 220 248 M220 32 C220 101.91, 220 171.82, 220 248 M220 248 C220 269.33, 209.33 280, 188 280 M220 248 C220 269.33, 209.33 280, 188 280 M188 280 C130.64 280, 73.28 280, 32 280 M188 280 C130.47 280, 72.95 280, 32 280 M32 280 C10.67 280, 0 269.33, 0 248 M32 280 C10.67 280, 0 269.33, 0 248 M0 248 C0 166.14, 0 84.28, 0 32 M0 248 C0 200.97, 0 153.95, 0 32 M0 32 C0 10.67, 10.67 0, 32 0 M0 32 C0 10.67, 10.67 0, 32 0" stroke="transparent" stroke-width="2" fill="none"></path></g><g stroke-opacity="0.4" fill-opacity="0.4" stroke-linecap="round" transform="translate(570 340) rotate(0 110 140)"><path d="M32 0 C89.82 0, 147.64 0, 188 0 C209.33 0, 220 10.67, 220 32 C220 97.29, 220 162.57, 220 248 C220 269.33, 209.33 280, 188 280 C135.21 280, 82.43 280, 32 280 C10.67 280, 0 269.33, 0 248 C0 167.08, 0 86.17, 0 32 C0 10.67, 10.67 0, 32 0" stroke="none" stroke-width="0" fill="#dbe4ff"></path><path d="M32 0 C67.58 0, 103.16 0, 188 0 M32 0 C72.14 0, 112.28 0, 188 0 M188 0 C209.33 0, 220 10.67, 220 32 M188 0 C209.33 0, 220 10.67, 220 32 M220 32 C220 113.18, 220 194.37, 220 248 M220 32 C220 76.6, 220 121.2, 220 248 M220 248 C220 269.33, 209.33 280, 188 280 M220 248 C220 269.33, 209.33 280, 188 280 M188 280 C156 280, 124.01 280, 32 280 M188 280 C130.98 280, 73.95 280, 32 280 M32 280 C10.67 280, 0 269.33, 0 248 M32 280 C10.67 280, 0 269.33, 0 248 M0 248 C0 163.17, 0 78.35, 0 32 M0 248 C0 202.18, 0 156.37, 0 32 M0 32 C0 10.67, 10.67 0, 32 0 M0 32 C0 10.67, 10.67 0, 32 0" stroke="transparent" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(80 360) rotate(0 100 20)"><path d="M10 0 C80.98 0, 151.96 0, 190 0 C196.67 0, 200 3.33, 200 10 C200 15.94, 200 21.89, 200 30 C200 36.67, 196.67 40, 190 40 C143.31 40, 96.63 40, 10 40 C3.33 40, 0 36.67, 0 30 C0 23.59, 0 17.18, 0 10 C0 3.33, 3.33 0, 10 0" stroke="none" stroke-width="0" fill="#ffc9c9"></path><path d="M10 0 C47.38 0, 84.76 0, 190 0 M10 0 C56.85 0, 103.7 0, 190 0 M190 0 C196.67 0, 200 3.33, 200 10 M190 0 C196.67 0, 200 3.33, 200 10 M200 10 C200 14.4, 200 18.81, 200 30 M200 10 C200 15.14, 200 20.28, 200 30 M200 30 C200 36.67, 196.67 40, 190 40 M200 30 C200 36.67, 196.67 40, 190 40 M190 40 C124.85 40, 59.7 40, 10 40 M190 40 C153.18 40, 116.37 40, 10 40 M10 40 C3.33 40, 0 36.67, 0 30 M10 40 C3.33 40, 0 36.67, 0 30 M0 30 C0 23.5, 0 17, 0 10 M0 30 C0 25.58, 0 21.15, 0 10 M0 10 C0 3.33, 3.33 0, 10 0 M0 10 C0 3.33, 3.33 0, 10 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(134.12804412841797 369.2) rotate(0 45.87195587158203 10.800000000000011)"><text x="45.87195587158203" y="16.064" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">LocalReduce</text></g><g stroke-linecap="round" transform="translate(80 430) rotate(0 100 20)"><path d="M10 0 C56.48 0, 102.96 0, 190 0 C196.67 0, 200 3.33, 200 10 C200 14.05, 200 18.09, 200 30 C200 36.67, 196.67 40, 190 40 C140.8 40, 91.61 40, 10 40 C3.33 40, 0 36.67, 0 30 C0 22.7, 0 15.4, 0 10 C0 3.33, 3.33 0, 10 0" stroke="none" stroke-width="0" fill="#d0bfff"></path><path d="M10 0 C50.23 0, 90.45 0, 190 0 M10 0 C78.23 0, 146.46 0, 190 0 M190 0 C196.67 0, 200 3.33, 200 10 M190 0 C196.67 0, 200 3.33, 200 10 M200 10 C200 15.91, 200 21.83, 200 30 M200 10 C200 17.38, 200 24.76, 200 30 M200 30 C200 36.67, 196.67 40, 190 40 M200 30 C200 36.67, 196.67 40, 190 40 M190 40 C146.69 40, 103.39 40, 10 40 M190 40 C131.79 40, 73.58 40, 10 40 M10 40 C3.33 40, 0 36.67, 0 30 M10 40 C3.33 40, 0 36.67, 0 30 M0 30 C0 24.44, 0 18.87, 0 10 M0 30 C0 24.22, 0 18.43, 0 10 M0 10 C0 3.33, 3.33 0, 10 0 M0 10 C0 3.33, 3.33 0, 10 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(114.84005737304688 439.2) rotate(0 65.15994262695312 10.800000000000011)"><text x="65.15994262695312" y="16.064" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">ThreadNotifyWait</text></g><g stroke-linecap="round" transform="translate(80 500) rotate(0 100 20)"><path d="M10 0 C59.54 0, 109.08 0, 190 0 C196.67 0, 200 3.33, 200 10 C200 15.07, 200 20.13, 200 30 C200 36.67, 196.67 40, 190 40 C139.56 40, 89.12 40, 10 40 C3.33 40, 0 36.67, 0 30 C0 25.23, 0 20.47, 0 10 C0 3.33, 3.33 0, 10 0" stroke="none" stroke-width="0" fill="#d0bfff"></path><path d="M10 0 C48.71 0, 87.41 0, 190 0 M10 0 C49.68 0, 89.37 0, 190 0 M190 0 C196.67 0, 200 3.33, 200 10 M190 0 C196.67 0, 200 3.33, 200 10 M200 10 C200 17.58, 200 25.16, 200 30 M200 10 C200 14.37, 200 18.73, 200 30 M200 30 C200 36.67, 196.67 40, 190 40 M200 30 C200 36.67, 196.67 40, 190 40 M190 40 C119.39 40, 48.79 40, 10 40 M190 40 C130.65 40, 71.31 40, 10 40 M10 40 C3.33 40, 0 36.67, 0 30 M10 40 C3.33 40, 0 36.67, 0 30 M0 30 C0 23.7, 0 17.39, 0 10 M0 30 C0 25.64, 0 21.29, 0 10 M0 10 C0 3.33, 3.33 0, 10 0 M0 10 C0 3.33, 3.33 0, 10 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(114.84005737304688 509.20000000000005) rotate(0 65.15994262695312 10.800000000000011)"><text x="65.15994262695312" y="16.064" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">ThreadNotifyWait</text></g><g stroke-linecap="round" transform="translate(330 360) rotate(0 100 20)"><path d="M10 0 C76.53 0, 143.07 0, 190 0 C196.67 0, 200 3.33, 200 10 C200 16.37, 200 22.74, 200 30 C200 36.67, 196.67 40, 190 40 C153.28 40, 116.56 40, 10 40 C3.33 40, 0 36.67, 0 30 C0 24.21, 0 18.41, 0 10 C0 3.33, 3.33 0, 10 0" stroke="none" stroke-width="0" fill="#d0bfff"></path><path d="M10 0 C60.97 0, 111.93 0, 190 0 M10 0 C72.77 0, 135.54 0, 190 0 M190 0 C196.67 0, 200 3.33, 200 10 M190 0 C196.67 0, 200 3.33, 200 10 M200 10 C200 14.41, 200 18.82, 200 30 M200 10 C200 14.51, 200 19.03, 200 30 M200 30 C200 36.67, 196.67 40, 190 40 M200 30 C200 36.67, 196.67 40, 190 40 M190 40 C126.19 40, 62.38 40, 10 40 M190 40 C124.58 40, 59.15 40, 10 40 M10 40 C3.33 40, 0 36.67, 0 30 M10 40 C3.33 40, 0 36.67, 0 30 M0 30 C0 24.03, 0 18.07, 0 10 M0 30 C0 23.42, 0 16.84, 0 10 M0 10 C0 3.33, 3.33 0, 10 0 M0 10 C0 3.33, 3.33 0, 10 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(356.99207305908203 369.2) rotate(0 73.00792694091797 10.800000000000011)"><text x="73.00792694091797" y="16.064" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">ThreadNotifyRecord</text></g><g stroke-linecap="round" transform="translate(330 430) rotate(0 100 20)"><path d="M10 0 C66.61 0, 123.22 0, 190 0 C196.67 0, 200 3.33, 200 10 C200 15.21, 200 20.43, 200 30 C200 36.67, 196.67 40, 190 40 C148.64 40, 107.27 40, 10 40 C3.33 40, 0 36.67, 0 30 C0 24.97, 0 19.93, 0 10 C0 3.33, 3.33 0, 10 0" stroke="none" stroke-width="0" fill="#ffc9c9"></path><path d="M10 0 C68.94 0, 127.88 0, 190 0 M10 0 C54.64 0, 99.27 0, 190 0 M190 0 C196.67 0, 200 3.33, 200 10 M190 0 C196.67 0, 200 3.33, 200 10 M200 10 C200 17.64, 200 25.27, 200 30 M200 10 C200 16.39, 200 22.78, 200 30 M200 30 C200 36.67, 196.67 40, 190 40 M200 30 C200 36.67, 196.67 40, 190 40 M190 40 C138.04 40, 86.09 40, 10 40 M190 40 C143.27 40, 96.55 40, 10 40 M10 40 C3.33 40, 0 36.67, 0 30 M10 40 C3.33 40, 0 36.67, 0 30 M0 30 C0 23.48, 0 16.96, 0 10 M0 30 C0 25.47, 0 20.95, 0 10 M0 10 C0 3.33, 3.33 0, 10 0 M0 10 C0 3.33, 3.33 0, 10 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(381.4080352783203 439.2) rotate(0 48.59196472167969 10.800000000000011)"><text x="48.59196472167969" y="16.064" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">ChannelRead</text></g><g stroke-linecap="round" transform="translate(580 360) rotate(0 100 20)"><path d="M10 0 C76.46 0, 142.92 0, 190 0 C196.67 0, 200 3.33, 200 10 C200 16.01, 200 22.02, 200 30 C200 36.67, 196.67 40, 190 40 C146.5 40, 103 40, 10 40 C3.33 40, 0 36.67, 0 30 C0 25.97, 0 21.95, 0 10 C0 3.33, 3.33 0, 10 0" stroke="none" stroke-width="0" fill="#ffc9c9"></path><path d="M10 0 C61.1 0, 112.21 0, 190 0 M10 0 C61.26 0, 112.53 0, 190 0 M190 0 C196.67 0, 200 3.33, 200 10 M190 0 C196.67 0, 200 3.33, 200 10 M200 10 C200 15.48, 200 20.95, 200 30 M200 10 C200 15.96, 200 21.91, 200 30 M200 30 C200 36.67, 196.67 40, 190 40 M200 30 C200 36.67, 196.67 40, 190 40 M190 40 C150.86 40, 111.73 40, 10 40 M190 40 C134.12 40, 78.24 40, 10 40 M10 40 C3.33 40, 0 36.67, 0 30 M10 40 C3.33 40, 0 36.67, 0 30 M0 30 C0 22.59, 0 15.18, 0 10 M0 30 C0 22.82, 0 15.64, 0 10 M0 10 C0 3.33, 3.33 0, 10 0 M0 10 C0 3.33, 3.33 0, 10 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(629.6400451660156 369.2) rotate(0 50.359954833984375 10.800000000000011)"><text x="50.359954833984375" y="16.064" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">ChannelWrite</text></g><g stroke-linecap="round" transform="translate(580 430) rotate(0 100 20)"><path d="M10 0 C67.07 0, 124.14 0, 190 0 C196.67 0, 200 3.33, 200 10 C200 17.57, 200 25.13, 200 30 C200 36.67, 196.67 40, 190 40 C143.21 40, 96.42 40, 10 40 C3.33 40, 0 36.67, 0 30 C0 23.54, 0 17.08, 0 10 C0 3.33, 3.33 0, 10 0" stroke="none" stroke-width="0" fill="#d0bfff"></path><path d="M10 0 C75.22 0, 140.44 0, 190 0 M10 0 C58.72 0, 107.43 0, 190 0 M190 0 C196.67 0, 200 3.33, 200 10 M190 0 C196.67 0, 200 3.33, 200 10 M200 10 C200 17.86, 200 25.73, 200 30 M200 10 C200 17.83, 200 25.65, 200 30 M200 30 C200 36.67, 196.67 40, 190 40 M200 30 C200 36.67, 196.67 40, 190 40 M190 40 C142.78 40, 95.56 40, 10 40 M190 40 C148.91 40, 107.82 40, 10 40 M10 40 C3.33 40, 0 36.67, 0 30 M10 40 C3.33 40, 0 36.67, 0 30 M0 30 C0 23.68, 0 17.37, 0 10 M0 30 C0 22.33, 0 14.66, 0 10 M0 10 C0 3.33, 3.33 0, 10 0 M0 10 C0 3.33, 3.33 0, 10 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(602.7040786743164 439.2) rotate(0 77.2959213256836 10.800000000000011)"><text x="77.2959213256836" y="16.064" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">ChannelNotifyRecord</text></g><g stroke-linecap="round" transform="translate(580 500) rotate(0 100 20)"><path d="M10 0 C64.47 0, 118.93 0, 190 0 C196.67 0, 200 3.33, 200 10 C200 16.34, 200 22.68, 200 30 C200 36.67, 196.67 40, 190 40 C139.82 40, 89.64 40, 10 40 C3.33 40, 0 36.67, 0 30 C0 24.57, 0 19.14, 0 10 C0 3.33, 3.33 0, 10 0" stroke="none" stroke-width="0" fill="#d0bfff"></path><path d="M10 0 C61.1 0, 112.2 0, 190 0 M10 0 C50.4 0, 90.8 0, 190 0 M190 0 C196.67 0, 200 3.33, 200 10 M190 0 C196.67 0, 200 3.33, 200 10 M200 10 C200 17.22, 200 24.43, 200 30 M200 10 C200 14.52, 200 19.03, 200 30 M200 30 C200 36.67, 196.67 40, 190 40 M200 30 C200 36.67, 196.67 40, 190 40 M190 40 C139.38 40, 88.76 40, 10 40 M190 40 C134.6 40, 79.2 40, 10 40 M10 40 C3.33 40, 0 36.67, 0 30 M10 40 C3.33 40, 0 36.67, 0 30 M0 30 C0 22.12, 0 14.25, 0 10 M0 30 C0 23.48, 0 16.95, 0 10 M0 10 C0 3.33, 3.33 0, 10 0 M0 10 C0 3.33, 3.33 0, 10 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(606.992073059082 509.20000000000005) rotate(0 73.00792694091797 10.800000000000011)"><text x="73.00792694091797" y="16.064" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">ThreadNotifyRecord</text></g><g stroke-linecap="round" transform="translate(50 640) rotate(0 410 35)"><path d="M17.5 0 C228.82 0, 440.15 0, 802.5 0 C814.17 0, 820 5.83, 820 17.5 C820 30.94, 820 44.39, 820 52.5 C820 64.17, 814.17 70, 802.5 70 C564.07 70, 325.65 70, 17.5 70 C5.83 70, 0 64.17, 0 52.5 C0 40.84, 0 29.18, 0 17.5 C0 5.83, 5.83 0, 17.5 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M17.5 0 C267.51 0, 517.52 0, 802.5 0 M17.5 0 C280.5 0, 543.51 0, 802.5 0 M802.5 0 C814.17 0, 820 5.83, 820 17.5 M802.5 0 C814.17 0, 820 5.83, 820 17.5 M820 17.5 C820 30.05, 820 42.61, 820 52.5 M820 17.5 C820 30.94, 820 44.38, 820 52.5 M820 52.5 C820 64.17, 814.17 70, 802.5 70 M820 52.5 C820 64.17, 814.17 70, 802.5 70 M802.5 70 C562.47 70, 322.44 70, 17.5 70 M802.5 70 C497.46 70, 192.42 70, 17.5 70 M17.5 70 C5.83 70, 0 64.17, 0 52.5 M17.5 70 C5.83 70, 0 64.17, 0 52.5 M0 52.5 C0 44.67, 0 36.84, 0 17.5 M0 52.5 C0 40.4, 0 28.3, 0 17.5 M0 17.5 C0 5.83, 5.83 0, 17.5 0 M0 17.5 C0 5.83, 5.83 0, 17.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(343.2240524291992 653.4) rotate(0 116.77594757080078 21.600000000000023)"><text x="116.77594757080078" y="16.064" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Thread Scheduler</text><text x="116.77594757080078" y="37.664" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">STARS, CPU OS, ...</text></g><g stroke-linecap="round" transform="translate(50 760) rotate(0 410 35)"><path d="M17.5 0 C328.84 0, 640.18 0, 802.5 0 C814.17 0, 820 5.83, 820 17.5 C820 26.42, 820 35.35, 820 52.5 C820 64.17, 814.17 70, 802.5 70 C497.06 70, 191.62 70, 17.5 70 C5.83 70, 0 64.17, 0 52.5 C0 38.84, 0 25.18, 0 17.5 C0 5.83, 5.83 0, 17.5 0" stroke="none" stroke-width="0" fill="#c3fae8"></path><path d="M17.5 0 C270.61 0, 523.72 0, 802.5 0 M17.5 0 C271.57 0, 525.64 0, 802.5 0 M802.5 0 C814.17 0, 820 5.83, 820 17.5 M802.5 0 C814.17 0, 820 5.83, 820 17.5 M820 17.5 C820 30.37, 820 43.24, 820 52.5 M820 17.5 C820 30.41, 820 43.31, 820 52.5 M820 52.5 C820 64.17, 814.17 70, 802.5 70 M820 52.5 C820 64.17, 814.17 70, 802.5 70 M802.5 70 C504.99 70, 207.49 70, 17.5 70 M802.5 70 C631.6 70, 460.69 70, 17.5 70 M17.5 70 C5.83 70, 0 64.17, 0 52.5 M17.5 70 C5.83 70, 0 64.17, 0 52.5 M0 52.5 C0 43.82, 0 35.14, 0 17.5 M0 52.5 C0 42.15, 0 31.79, 0 17.5 M0 17.5 C0 5.83, 5.83 0, 17.5 0 M0 17.5 C0 5.83, 5.83 0, 17.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(322.03204345703125 773.4) rotate(0 137.96795654296875 21.600000000000023)"><text x="137.96795654296875" y="16.064" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Comm Hardware</text><text x="137.96795654296875" y="37.664" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">RoCE NIC, SDMA, UB NIC, ...</text></g><g transform="translate(370 10) rotate(0 84 18.900000000000002)"><text x="84" y="28.112000000000002" font-family="Nunito, Segoe UI Emoji" font-size="28px" fill="#1e40af" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Comm Engine Model</text></g><g transform="translate(44.77159606917394 322.71971090310194) rotate(0 24 10.800000000000011)"><text x="0" y="16.064" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#3b82f6" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Data Plane</text></g><g transform="translate(289 410) rotate(0 13.979965209960938 13.5)"><text x="13.979965209960938" y="20.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">......</text></g><g transform="translate(539 410) rotate(0 13.979965209960938 13.5)"><text x="13.979965209960938" y="20.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">......</text></g><g transform="translate(200 195) rotate(0 28 9.450000000000003)"><text x="0" y="14.056000000000001" font-family="Nunito, Segoe UI Emoji" font-size="14px" fill="#3b82f6" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Provide resources</text></g><g transform="translate(640 195) rotate(0 28 9.450000000000003)"><text x="0" y="14.056000000000001" font-family="Nunito, Segoe UI Emoji" font-size="14px" fill="#3b82f6" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Orchestrate tasks</text></g><g transform="translate(281.81818181818176 615.4545454545455) rotate(0 28 9.449999999999989)"><text x="0" y="14.056000000000001" font-family="Nunito, Segoe UI Emoji" font-size="14px" fill="#3b82f6" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Schedule</text></g><g transform="translate(442.28028909689806 732.4428990172935) rotate(0 28 9.449999999999989)"><text x="28" y="14.056000000000001" font-family="Nunito, Segoe UI Emoji" font-size="14px" fill="#3b82f6" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Drive hardware</text></g><g transform="translate(231.81818181818187 405) rotate(0 35 9.449999999999989)"><text x="35" y="14.056000000000001" font-family="Nunito, Segoe UI Emoji" font-size="14px" fill="#7c3aed" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Thread Sync</text></g><g stroke-linecap="round"><g transform="translate(180 180) rotate(0 0 20)"><path d="M0 0 C0 6.67, 0 33.33, 0 40 M0 0 C0 6.67, 0 33.33, 0 40" stroke="#3b82f6" stroke-width="2" fill="none"></path></g><g transform="translate(180 180) rotate(0 0 20)"><path d="M-6.84 21.21 C-4.39 27.95, -1.93 34.69, 0 40 M-6.84 21.21 C-4.21 28.42, -1.59 35.64, 0 40" stroke="#3b82f6" stroke-width="2" fill="none"></path></g><g transform="translate(180 180) rotate(0 0 20)"><path d="M6.84 21.21 C4.39 27.95, 1.93 34.69, 0 40 M6.84 21.21 C4.21 28.42, 1.59 35.64, 0 40" stroke="#3b82f6" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(620 180) rotate(0 0 20)"><path d="M0 0 C0 6.67, 0 33.33, 0 40 M0 0 C0 6.67, 0 33.33, 0 40" stroke="#3b82f6" stroke-width="2" fill="none"></path></g><g transform="translate(620 180) rotate(0 0 20)"><path d="M-6.84 21.21 C-4.33 28.12, -1.81 35.03, 0 40 M-6.84 21.21 C-4.32 28.14, -1.8 35.07, 0 40" stroke="#3b82f6" stroke-width="2" fill="none"></path></g><g transform="translate(620 180) rotate(0 0 20)"><path d="M6.84 21.21 C4.33 28.12, 1.81 35.03, 0 40 M6.84 21.21 C4.32 28.14, 1.8 35.07, 0 40" stroke="#3b82f6" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(180 620) rotate(0 0 10)"><path d="M0 0 C0 3.33, 0 16.67, 0 20" stroke="#3b82f6" stroke-width="1.5" fill="none" stroke-dasharray="1.5 7"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(430 620) rotate(0 0 10)"><path d="M0 0 C0 3.33, 0 16.67, 0 20" stroke="#3b82f6" stroke-width="1.5" fill="none" stroke-dasharray="1.5 7"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(680 620) rotate(0 0 10)"><path d="M0 0 C0 3.33, 0 16.67, 0 20" stroke="#3b82f6" stroke-width="1.5" fill="none" stroke-dasharray="1.5 7"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(430 710) rotate(0 0 25)"><path d="M0 0 C0 8.33, 0 41.67, 0 50 M0 0 C0 8.33, 0 41.67, 0 50" stroke="#3b82f6" stroke-width="2" fill="none"></path></g><g transform="translate(430 710) rotate(0 0 25)"><path d="M-8.55 26.51 C-5.2 35.72, -1.84 44.94, 0 50 M-8.55 26.51 C-5.73 34.25, -2.91 42, 0 50" stroke="#3b82f6" stroke-width="2" fill="none"></path></g><g transform="translate(430 710) rotate(0 0 25)"><path d="M8.55 26.51 C5.2 35.72, 1.84 44.94, 0 50 M8.55 26.51 C5.73 34.25, 2.91 42, 0 50" stroke="#3b82f6" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(330 380) rotate(0 -25 35.90909090909091)"><path d="M0 0 C-8.33 11.97, -41.67 59.85, -50 71.82" stroke="#7c3aed" stroke-width="2" fill="none" stroke-dasharray="8 9.5"></path></g><g transform="translate(330 380) rotate(0 -25 35.90909090909091)"><path d="M-50 71.82 L-47.44 57.04 L-37.03 64.28 L-50 71.82" stroke="none" stroke-width="0" fill="#7c3aed" fill-rule="evenodd"></path><path d="M-50 71.82 C-49.09 66.58, -48.18 61.34, -47.44 57.04 M-47.44 57.04 C-43.65 59.67, -39.87 62.31, -37.03 64.28 M-37.03 64.28 C-42.12 67.24, -47.22 70.2, -50 71.82 M-50 71.82 C-50 71.82, -50 71.82, -50 71.82" stroke="#7c3aed" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(578.1818181818182 520) rotate(0 -149.09090909090912 0)"><path d="M0 0 C-49.7 0, -248.48 0, -298.18 0" stroke="#7c3aed" stroke-width="2" fill="none" stroke-dasharray="8 9.5"></path></g><g transform="translate(578.1818181818182 520) rotate(0 -149.09090909090912 0)"><path d="M-298.18 0 L-284.59 -6.34 L-284.59 6.34 L-298.18 0" stroke="none" stroke-width="0" fill="#7c3aed" fill-rule="evenodd"></path><path d="M-298.18 0 C-294.26 -1.83, -290.33 -3.66, -284.59 -6.34 M-284.59 -6.34 C-284.59 -3.05, -284.59 0.24, -284.59 6.34 M-284.59 6.34 C-289.01 4.28, -293.43 2.22, -298.18 0 M-298.18 0 C-298.18 0, -298.18 0, -298.18 0" stroke="#7c3aed" stroke-width="2" fill="none"></path></g></g><mask></mask></svg> | ||
| @@ -0,0 +1,2 @@ | |||
| 1 | +<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1420.4957614271625 757.3169055241666" width="1420.4957614271625" height="757.3169055241666"><!-- svg-source:excalidraw --><metadata><!-- payload-type:application/vnd.excalidraw+json --><!-- payload-version:2 --><!-- payload-start -->eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1dW29cdTAwMWLHXHUwMDE1fvevXHUwMDEw1Fd7M/dLgKKQZceWXHUwMDFku46V1IWbQFgth9JaJJdZrmwpQYCgKIJcdTAwMDRcdTAwMDWKXHUwMDE0XHUwMDA1WqBFa7hA+5bkKS1cdTAwMTBcdTAwMDQt0N9cdTAwMTJf8pS/0DMri3tfcqklRSOkXHUwMDAwgpxZzs7lfOc7l5nVh1x1MDAxN9bW1qPjoVl/fW3dXHUwMDFjeW7P74Tuo/WLtvyhXHRHfjCAKlx1MDAxMn9cdTAwMWZcdTAwMDWHoVx1MDAxN1+5XHUwMDFmRcPR66+91nfDXHUwMDAzXHUwMDEzXHJ7rmech/7o0O2NosOOXHUwMDFmOF7Qf82PTH/0M/t+2+2bn1x1MDAwZYN+J1xuneQml0zHj4Lw5F6mZ/pmXHUwMDEwjaD1X8H3tbVcdTAwMGbjd6jxO/aOrr/TPelWXFx42uXQeJE72OuZpOpcYsqZdjhihCouiaKS83HtMdReosqhWGjEOWFYXGKB2bj+kd+J9uFcdTAwMWHMXHUwMDEwXHUwMDFhXHUwMDE37lx1MDAxYn9vP4JSkVxceHLX19eSq0ZRXHUwMDE4XHUwMDFjmM2gXHUwMDA3Y4Ku/URcdGW0SDq263pcdTAwMDd7YXA46CTXdFVXd93kmq7f621Hx3HLMN8wUeu59u+ddjBXXvUruOHe/sCMRpm+XHUwMDA2Q9fzIztcdTAwMTkyKbSdXHUwMDFibnXiNXgv6VJcYqu3ZVx1MDAxN2Fw2OuNi/1Bx1x1MDAxY8UrgzI3XHUwMDFidF7eLHP1yFx1MDAxONtcdTAwMDJGmFCWrEZcImFYyHzp7WBcdTAwMTBLXHUwMDFiZ0hcdTAwMTPNKEnuPbpcdTAwMDLyXHUwMDEyxU12QeZMMse2XHUwMDAzV/OylJanjPhE5ihcdTAwMWH3Pi9tO3HtuPKji+Vtnfyix/a9K96Dh73RtaPt3tb7R8HW5SDb9OlN3TBcZlx1MDAxZU3bbn//aO/Wz8ODXHUwMDBmPLMhXHUwMDFlkHDzg0fD29O1+/JTspKHw457MmlYKqQ1lZoqJcb1PX9wkF+4XuBcdTAwMWQk83wh1eEygO5kJrR8mmOAcslcdTAwMWSpXHUwMDE4VVpcdTAwMDPQSFx1MDAxZZ90XCI+KZNcdTAwMGWjWmhJXHUwMDA0XHUwMDE3qVx1MDAwNsZY5U2wio39q8VqXHUwMDE0uoPR0FxyQbJmwStpXHSvXHUwMDE4nVx1MDAxZLC/aIJYKlx1MDAxMW2IWCpcdTAwMTBcdTAwMDCdi1lcdTAwMDBbJ66CqNRKT1x1MDAxNtdEXHUwMDEwrVx1MDAwMMLQN7aePfnk2d/+tfbu4IdvP71cdTAwMDVTsj1cZkKz9r9/r905fjtcYr19+/FtM1x1MDAxOFx1MDAwNeFcdTAwMWK94NFcdTAwMGbffpZa62BcdTAwMTBt+1x1MDAxZthcdTAwMDFcdTAwMTKUKX3D7fs9uzhcInPHjZ6/Z2dq3YPBmXA9PV2RXHUwMDBmNDi+oO93OmlcdTAwMGXzoFHXXHUwMDFmmHCrjPyC0N/zXHUwMDA3bu/tNkblXHUwMDFlRsFdMzpcdTAwMTlXXHUwMDE0XHUwMDFlmvT8muunaMJcdTAwMGXlNehcdTAwMGaGo6nJmSNHgFx1MDAxNGvKXHTWlGiVXHUwMDAxv2RcdTAwMGXRXHUwMDFjXHUwMDE2m8Cic6pcdTAwMTMhXHUwMDFiUzPVypGCKUWYolxms6SBMfh1Qo9TgF9L7JF6ot5cdTAwMTVcdTAwMWTWJa848ElcdTAwMDPc21x1MDAxNyrDPcGF0lPcY6w1IF8tkqpB8ppcdTAwMTH1XHKqNnrk8N7mff/4+lvkuPvOXHUwMDBla4Go52VcdTAwMDC8XHUwMDA1VqTU0f137lxutTd8cEtcXNu4IVpo9/aVnnvz/Vx1MDAwN0a9ubft6+231I3t0S9bMyxcdTAwMTRGhLZjWIxcdTAwMTd4XG6zQnBcblZcdTAwMDHhXHUwMDFhVFx1MDAwM1wiiOisatFcdTAwMTNVi6ZcdTAwMGVcYrGSXHUwMDE0MaFkiVWhXHUwMDFhKZZcdTAwMWaTVUGaWFx1MDAxNZhyqUu1XHUwMDBiUfnSU+1CXHUwMDEw2ItEsSW0K77/yydPP//0+4///N1/nzz/8k9Pv/h8485WzMZP//nr655cdTAwMDdM37trOoeeXHUwMDAx7n13sFx1MDAwZiXO/vMvlsK4yFB33rQ4+8DasS86QVx1MDAxZrrcwMTIXHUwMDAwn6SIrN7BJzQpbMdw6OxcdTAwMWHW7b7i2KZNoC1cdTAwMTBTpVx1MDAwZUOlv4DBkGNC6JTkz91uOJGovOkwmdqYsuTRXHUwMDBltaX7MFxyu6mcWGNUJtYlUi2bXGL1j4m0KG9cItmKY1kq2ZVcdTAwMTYxKFxiXHUwMDAyy6ZmkeuFMdbTx4+ff/nk+eefLISOomBYyUV5NV9HRyW9bpNrdvp7/Vx1MDAxMlRWXHUwMDEwjqBcdTAwMGWYi1pRLZDQQiSTXHUwMDEzXHUwMDAzlWFcdTAwMDeBXHUwMDE0YEk1Z4TgouXJynCLVdts5HVccurK84w3t1x1MDAwMdqNXHUwMDA2oCVIK1FqaVaC1v6EYS3UTLA9XHUwMDEzXHUwMDFkWaFr5M6+MvHhwlx1MDAwMKcgPCy0XHUwMDAz5r71xYjQSOZQpZHDU6hcIlx1MDAwNVCBM+FcdTAwMDAklWRESFx1MDAwZU4pKWJs5dBVw6yJR2fzOrxcZmeCVuGMcVxmP6KKzVx1MDAwMrP5smOWYXI+z2bQ718xdn2Ox17Pjlx1MDAwN4VL49OVUliBTFtcdTAwMTlkO5xcdTAwMGJGQTA12XJcIlx1MDAxZM0wkogzgLZOXHUwMDA07JRstdRKM0RcdTAwMDSohVT1imxn0Fx1MDAwMpebKFx1MDAwMa5JeXq3MqojwFx1MDAxY1x1MDAwMp+RLdD1s8K2qJjxZJJlQEy0JYcyXHUwMDE52TTuJMKOoFx1MDAxOGuOuE5nUU7IXHUwMDE1OyyNolwiuWriXGKAXHUwMDAxR1pWpGBX3FqNqkbcXG5GTGlcdTAwMGW2iLUxrCS2jlx1MDAwNlo+bn322z88++z3z1x1MDAxZf/jxVd/z3HOXXdwcC10h/vXTPSme1xmI0qoXHUwMDA3lv5gZ89WLlxyy2ZJK0+vbY+zVec2NNPna7VmjnVqMeJKMI1zioIhXHUwMDA3tFx1MDAwNGhcdTAwMDBFKKWarOg2Lp1VMWw20Fx1MDAwYlx1MDAxNClRdGOhhlba3JhTobmaUTHMxreJzDVi3XvH98nBpqTDgedRdcy2XHUwMDA219mt882oTmZzISjlOFxyzTO7zON5m4LTMVx1MDAwMlZGUttcdTAwMThcdTAwMTRcdTAwMTNIkCxWwWOm9VgljMbWM5Fcblxca65pyeaKXHUwMDE1rVeid7dcdHrhVYxcdTAwMWNb9Ioq9IJcdTAwMTmAhV2+pWP1sTP54uvfPPsmnyXc3HdcdTAwMDdcdTAwMDPT2/DeP/RDk1wiOzNaXHUwMDFhNi9jxkqX+YyjbIfLd92RmZrFcylRsO1cdTAwMGLYr0iJkiZETbraMFZP1Fx1MDAxZK/rmZmIeomgzpognStUupdcblx1MDAxNyPTY6KWoMY5W2hO1FxuVPOMKEVcdTAwMWFcdTAwMGKdluDZKS/pwVx1MDAxNGQncU6mVXGfsCqT6FU6tEqom6RDqVxyypcn+itcdFxmXHUwMDEzilx1MDAxOFx1MDAxMpzPtENwrlxm9vTxN8+ffHyi4c89XHUwMDExmlXteVx1MDAxYSrvanuk0sg9XHUwMDE0zGGMXHUwMDBiSVx1MDAxNMZcdTAwMTLes3v5OWZcdTAwMGW3m3zBf2SYymLmU8gy71C2TTq7u13ZQbPgc4m8Q9Yk88mQpFx1MDAxNVx1MDAxYnEq3UPCiGZqkYnPU3lblGt4XHUwMDBlfNbEgSNCOqBcdTAwMWYlh2WAXjCZRVx1MDAxM9dcdTAwMGWqRVx1MDAxM1x1MDAwMTjajVxiRFxigfAqLNtcdTAwMTRfTcKyjFx1MDAxMlS6XHUwMDFmiKDqTayYXHSNXGJfwsDsXHSflHg2Qb//0rXZXGZcctz1pWdcdTAwMDPFS+XAXHUwMDE1mavcfTvrXGJb5Nlh6PenJlrJgUolXHUwMDEwLcZcdTAwMWGUey62Y4lcdTAwMTZcbjXHXHUwMDFhgVx1MDAxMlx1MDAxN0X3bkFE68ku6qhXnWibZD2t9VO6xVxipzRt3lx1MDAxMFZcXFBOyFx1MDAwMsOwY4lrRLWvzDmR3PCm4FqgUXvOVGFFqD3xkeda5ehaQFx1MDAxMYRcdTAwMWOoVYhrpFxioqvtRU0g1sTVXHUwMDA0W4iVbi7CutLVJPasOXAtW9pg6e9cdTAwMWW/+OqLPFx1MDAwZt1cdTAwMGL9XGb/WIn2I//hslx1MDAxMW2WuipcdTAwMDKlZ1x1MDAxYmE7RFu/QzKnvLKEy7QjWPJcdTAwMTiJ7PZDilx1MDAxY6HAV2BMckUpTW2UXHUwMDFjJz5cdTAwMDV3lFx1MDAwMGFhXHUwMDAyg+GHUsKaXHUwMDA0o1x1MDAxMHeoXHUwMDA2x5lorLlSsklwiiHleuejMDruaN8sVmPcaKAxpJaM2sN+pf6vzpemlIbE1J5haVlpaLDaaFx1MDAxM6dyXFw8XGb8PO0nn9aSuY6/jD+/d7H06kvIIVxmjV+YXHUwMDEwqdJccmDuINCY4ICCoUmhx3Rii9VCPpdcdTAwMDaLeElcdTAwMWEsXHUwMDE4XHUwMDFjPXdcdTAwMTTZjYx+XHUwMDA0i3HHTmRBXlwiN4wug4z5gz2oS1xmoNMn0pSdwI9cdTAwMTF0lLSYWVx1MDAwZofDvGamwEF26zEvXHUwMDFiOOhr7zBcdTAwMDNcdTAwMTlcdTAwMGJcdTAwMGZ3aEteXHUwMDE2jM2zdTPoTO5p2dbP+v4ybacz+buYlVx1MDAxN0Rk9iXOPJB40jeswt03blx1MDAwMfAwzHRdXjOb3m7wKMZJhlx1MDAxMuJcdTAwMDFum71cdEbyqTbJjPKkQ7mJyUFcdTAwMGLmXHUwMDAyO1rbLcuEUFwilECSpurfyzRcYmMoNFx1MDAxN1x1MDAwYnZsO7xcdTAwMTTsJF0x1Vxyalxm67j/W6PtofF8t1dQIdCbQmVccmPWXHUwMDFmZZ8rY4I0KoUlXHUwMDExUiOOMUpvXHUwMDBlXHUwMDFmUyZVXHUwMDBlTKBiRCFCQFx1MDAxZqgmT3r5cVHm7Vx1MDAwNpRcdC4pXHUwMDA3PaVcbuRoK3n1nlx1MDAwNMXBf1K67VPZdiexTibgvFx1MDAxOLNGXCLtqyiLKzpK9zR9urxZPy31cKZcdTAwMTlPvbMzd3pcdTAwMTHUU1xc0bT2zd8wX1ejmNXtXHUwMDFkfufq1Zv3RiF21c2Dm1x1MDAwN7t39FSZciFcdTAwMWOiXHUwMDE145QyXHUwMDBlllOiMGO9rFx1MDAxZKxcdTAwMTBYy9zmXGZAQVx1MDAxN1x1MDAxZJmyLHriXHUwMDAyL4PWrVxmXHUwMDFldlx1MDAwMou2hWrdu1xytG68xVx1MDAxZXFe5qjI1Lzn44ea2iPzaLZcdTAwMDDiXFyjXHUwMDFi3/3nry++/mNcdTAwMWKBip7pRjVhippcdTAwMDR6pr/54ES+g1PHXHUwMDE5SF2coT4nWWc1gTFIXHUwMDFkndphnX1sXHIjfNJcdTAwMGVrhVx1MDAxOViW4FxcgXnOZOr3SVx1MDAxY5I6goLRRYDGJGiCVZShXG6891x1MDAxYUX+KeYw4SQtpOPzxTXPu1x1MDAxMFx1MDAxYWlcItuOMoDlLVHq4VvnZjOlr1x1MDAwNunlXGJcZn6NXHUwMDE5XHUwMDA1XHUwMDAzXG5cdTAwMWObST+/VCXOc2iugItFmG8lW01cdTAwMWK56Dw9XHUwMDAyXFzw0Fx1MDAxN2PZXHUwMDE10q1cdTAwMTOHoGDhmLCeLU89ISFeXCJcdTAwMWJm0FxmYymYXHUwMDA0JVxiio6XXHUwMDA2ipbO1ms/zFAj4FNFXHUwMDE56qR9Uuvjz3NcdTAwMGYx1J6orFxyMXDkYEpAVlxix0qpbNJcdTAwMGVLNPnxkcyRUoO2JNZcdTAwMTHSoiTCIJSjrGLnTFx1MDAxMY1TT1x1MDAxNliR5VqGLO9PT5YgklpcdTAwMDD+k+lOPSOgOotcdTAwMDcut6aMtJ7F01x1MDAxNLz2Js+2WFx1MDAwNFUyXHUwMDA3g1SCgyZcdTAwMTnHSInSUGuG26qleS5ccuaBsVxitpw9hIBzXHUwMDExhFx1MDAwNcU8MudC63tcZu6fXHUwMDEwXHUwMDA0W02sJCjjQvBcdTAwMWSDLlx1MDAxM1xigVmHwNQk6tWIgMyBXHUwMDE1qyV5KlasXHUwMDE360ntL4xcdTAwMTfrzybOlVx1MDAxN5l9hlx1MDAxNVx1MDAwNYNBU8pcdTAwMDRIW0myWoD1oFx1MDAxNVxcw1x1MDAxOchcIifJJStiXFzLXHUwMDEwozs9MdrHXHUwMDEzKVigUmKszFRrXHUwMDFlO56tP1xmdSl5kThKN6KxamGeR3tcdTAwMDVYrGixpMOter2rxHTyqlx1MDAxMedpuLFetic1vzBqrN+IOikrXHIj4JRJQVx1MDAwNUPZ7MdcdTAwMTTUXGLussNcdTAwMDVcdTAwMDeVi1x0s3tFi8xcYi6Kw6Q9Olx1MDAwMjeS6Wfkr5hxLcOMTY7I21x1MDAxOKm0iatcdTAwMTJqpLRcdTAwMTB1TZ66SjCyJ9La5UbG7H81SfqyXHUwMDFj3EhcdTAwMWQsMFx1MDAwNWAyxZRcdTAwMTJkXCKXVUrzXHUwMDFjmivAYsWMJVx1MDAxZC5uqK3vNriKmkslQGVcdCRFZlx1MDAwN58lRqRcdTAwMDVlimr7v1HAa8Rnj1xiv6LEWC3M01x1MDAxMGOtZE9qfVx1MDAxZbx44WUr6+5wuFx1MDAxZIFuXHUwMDFhy1x1MDAxNChjv5NLsp6URcauKE9cdTAwMTXdXG465urA3e3l9dT6Q988ulxc9l/q4pc92Vx1MDAxMUuEJVx1MDAxZWNX7MOPLnz0f1x1MDAwYp7CkiJ9<!-- payload-end --></metadata><defs><style class="style-fonts"> | ||
| 2 | + @font-face { font-family: Nunito; src: url(data:font/woff2;base64,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); }</style></defs><rect x="0" y="0" width="1420.4957614271625" height="757.3169055241666" fill="#ffffff"></rect><g stroke-opacity="0.7" fill-opacity="0.7" stroke-linecap="round" transform="translate(10.000000000000057 10) rotate(0 700 32)"><path d="M0 0 L1400 0 L1400 64 L0 64" stroke="none" stroke-width="0" fill="#f8f9fa"></path><path d="M0 0 C491.52 0, 983.04 0, 1400 0 M0 0 C531.51 0, 1063.02 0, 1400 0 M1400 0 C1400 23.43, 1400 46.85, 1400 64 M1400 0 C1400 15.27, 1400 30.53, 1400 64 M1400 64 C862.97 64, 325.95 64, 0 64 M1400 64 C1034.19 64, 668.39 64, 0 64 M0 64 C0 46.46, 0 28.92, 0 0 M0 64 C0 41.63, 0 19.27, 0 0" stroke="#868e96" stroke-width="1" fill="none"></path></g><g transform="translate(536.2801513671875 15) rotate(0 173.7198486328125 27)"><text x="173.7198486328125" y="20.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">AI Framework </text><text x="173.7198486328125" y="47.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">(MindSpore · PyTorch · TensorFlow)</text></g><g stroke-linecap="round" transform="translate(11.105854949095487 122.61284280222058) rotate(0 699.3824412417075 45.5)"><path d="M0 0 L1398.76 0 L1398.76 91 L0 91" stroke="none" stroke-width="0" fill="#b6d4f2"></path><path d="M0 0 C552.61 0, 1105.22 0, 1398.76 0 M0 0 C404.13 0, 808.26 0, 1398.76 0 M1398.76 0 C1398.76 31.39, 1398.76 62.78, 1398.76 91 M1398.76 0 C1398.76 22.58, 1398.76 45.15, 1398.76 91 M1398.76 91 C841.69 91, 284.62 91, 0 91 M1398.76 91 C1038.56 91, 678.36 91, 0 91 M0 91 C0 55.53, 0 20.05, 0 0 M0 91 C0 72.37, 0 53.75, 0 0" stroke="#1971c2" stroke-width="2" fill="none"></path></g><g transform="translate(613.9283596673654 127.61284280222058) rotate(0 96.5599365234375 40.5)"><text x="96.5599365234375" y="20.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Coll Comm Op API</text><text x="96.5599365234375" y="47.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">(e.g. HcclAllReduce)</text><text x="96.5599365234375" y="74.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">hccl.h</text></g><g stroke-linecap="round" transform="translate(10.495761427162506 253.3169055241666) rotate(0 700 115)"><path d="M0 0 L1400 0 L1400 230 L0 230" stroke="none" stroke-width="0" fill="#dbe4ff"></path><path d="M0 0 C303.89 0, 607.77 0, 1400 0 M0 0 C480.97 0, 961.94 0, 1400 0 M1400 0 C1400 53.91, 1400 107.82, 1400 230 M1400 0 C1400 58.16, 1400 116.32, 1400 230 M1400 230 C972.16 230, 544.33 230, 0 230 M1400 230 C902.13 230, 404.25 230, 0 230 M0 230 C0 150.03, 0 70.06, 0 0 M0 230 C0 153.57, 0 77.14, 0 0" stroke="#1971c2" stroke-width="2" fill="none"></path></g><g transform="translate(640.4957614271625 258.3169055241666) rotate(0 70 13.5)"><text x="70" y="20.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Coll Communicator Mgr</text></g><g stroke-linecap="round" transform="translate(24.371745387859164 289.3977229195888) rotate(0 220 90)"><path d="M0 0 L440 0 L440 180 L0 180" stroke="none" stroke-width="0" fill="#cfe0f7"></path><path d="M0 0 C105.18 0, 210.37 0, 440 0 M0 0 C175.2 0, 350.4 0, 440 0 M440 0 C440 58.29, 440 116.58, 440 180 M440 0 C440 46.38, 440 92.76, 440 180 M440 180 C346.31 180, 252.62 180, 0 180 M440 180 C328.36 180, 216.71 180, 0 180 M0 180 C0 125, 0 70, 0 0 M0 180 C0 133.22, 0 86.44, 0 0" stroke="#1971c2" stroke-width="1" fill="none"></path></g><g transform="translate(129.9518082540701 338.8977229195888) rotate(0 114.41993713378906 40.5)"><text x="114.41993713378906" y="20.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Communicator API</text><text x="114.41993713378906" y="47.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">(e.g. HcclCommDestroy)</text><text x="114.41993713378906" y="74.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">hccl_comm.h</text></g><g stroke-linecap="round" transform="translate(488.43683197459177 290.2967995505895) rotate(0 220 90)"><path d="M0 0 L440 0 L440 180 L0 180" stroke="none" stroke-width="0" fill="#cfe0f7"></path><path d="M0 0 C114.86 0, 229.72 0, 440 0 M0 0 C111.24 0, 222.48 0, 440 0 M440 0 C440 38.39, 440 76.78, 440 180 M440 0 C440 47.24, 440 94.48, 440 180 M440 180 C299.08 180, 158.16 180, 0 180 M440 180 C285.19 180, 130.37 180, 0 180 M0 180 C0 132.58, 0 85.17, 0 0 M0 180 C0 110.25, 0 40.5, 0 0" stroke="#1971c2" stroke-width="1" fill="none"></path></g><g transform="translate(562.1269564863105 339.7967995505895) rotate(0 146.30987548828125 40.5)"><text x="146.30987548828125" y="20.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Topology Query API</text><text x="146.30987548828125" y="47.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">(e.g. HcclRankGraphGetLayers)</text><text x="146.30987548828125" y="74.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">hccl_rank_graph.h</text></g><g stroke-linecap="round" transform="translate(954.5653720136543 289.21156234750583) rotate(0 220 90)"><path d="M0 0 L440 0 L440 180 L0 180" stroke="none" stroke-width="0" fill="#cfe0f7"></path><path d="M0 0 C124.54 0, 249.07 0, 440 0 M0 0 C135.28 0, 270.56 0, 440 0 M440 0 C440 54.49, 440 108.98, 440 180 M440 0 C440 48.1, 440 96.2, 440 180 M440 180 C339.85 180, 239.71 180, 0 180 M440 180 C330.02 180, 220.04 180, 0 180 M0 180 C0 140.17, 0 100.34, 0 0 M0 180 C0 123.28, 0 66.57, 0 0" stroke="#1971c2" stroke-width="1" fill="none"></path></g><g transform="translate(1052.5754580732246 338.71156234750583) rotate(0 121.98991394042969 40.5)"><text x="121.98991394042969" y="20.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Domain Resource API</text><text x="121.98991394042969" y="47.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">(e.g. HcclChannelAcquire)</text><text x="121.98991394042969" y="74.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">hccl_res.h</text></g><g stroke-linecap="round" transform="translate(10.495761427162506 527.3169055241666) rotate(0 700 110)"><path d="M0 0 L1400 0 L1400 220 L0 220" stroke="none" stroke-width="0" fill="#dcfce7"></path><path d="M0 0 C427.04 0, 854.08 0, 1400 0 M0 0 C506.92 0, 1013.84 0, 1400 0 M1400 0 C1400 86.28, 1400 172.56, 1400 220 M1400 0 C1400 59.84, 1400 119.68, 1400 220 M1400 220 C931.08 220, 462.17 220, 0 220 M1400 220 C912.7 220, 425.4 220, 0 220 M0 220 C0 136.59, 0 53.17, 0 0 M0 220 C0 166.61, 0 113.21, 0 0" stroke="#2f9e44" stroke-width="2" fill="none"></path></g><g transform="translate(670.4957614271625 532.3169055241666) rotate(0 40 13.5)"><text x="40" y="20.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Base Comm</text></g><g stroke-linecap="round" transform="translate(24.941434238935358 562.8498951383043) rotate(0 335 85)"><path d="M0 0 L670 0 L670 170 L0 170" stroke="none" stroke-width="0" fill="#bbf7d0"></path><path d="M0 0 C219.1 0, 438.21 0, 670 0 M0 0 C145.2 0, 290.4 0, 670 0 M670 0 C670 47.88, 670 95.76, 670 170 M670 0 C670 47.05, 670 94.11, 670 170 M670 170 C507.68 170, 345.35 170, 0 170 M670 170 C505.06 170, 340.12 170, 0 170 M0 170 C0 112.71, 0 55.41, 0 0 M0 170 C0 107.05, 0 44.1, 0 0" stroke="#2f9e44" stroke-width="1" fill="none"></path></g><g transform="translate(227.56152090885723 607.3498951383043) rotate(0 132.37991333007812 40.5)"><text x="132.37991333007812" y="20.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Comm Resource API</text><text x="132.37991333007812" y="47.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">(e.g. HcommChannelCreate)</text><text x="132.37991333007812" y="74.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">hcomm_res.h</text></g><g stroke-linecap="round" transform="translate(715.0724826185688 562.7238574284635) rotate(0 335 85)"><path d="M0 0 L670 0 L670 170 L0 170" stroke="none" stroke-width="0" fill="#c7f0d8"></path><path d="M0 0 C233.84 0, 467.68 0, 670 0 M0 0 C181.81 0, 363.61 0, 670 0 M670 0 C670 63.08, 670 126.17, 670 170 M670 0 C670 47.87, 670 95.74, 670 170 M670 170 C435.76 170, 201.52 170, 0 170 M670 170 C439.32 170, 208.65 170, 0 170 M0 170 C0 119.87, 0 69.74, 0 0 M0 170 C0 119.36, 0 68.71, 0 0" stroke="#2f9e44" stroke-width="1" fill="none"></path></g><g transform="translate(949.8125796644672 607.2238574284635) rotate(0 100.25990295410156 40.5)"><text x="100.25990295410156" y="20.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Comm Primitive API</text><text x="100.25990295410156" y="47.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">(e.g. HcommWrite)</text><text x="100.25990295410156" y="74.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">hcomm_primitives.h</text></g><g stroke-linecap="round"><g transform="translate(710.1400000000001 79) rotate(0 -232.93412730607048 102.69886145979439)"><path d="M0 0 C-0.08 2.6, -0.17 5.2, -0.24 7.5 M-0.24 7.5 C-0.24 12.5, -2.74 15, -7.74 15 M-7.74 15 C-182.47 15, -357.19 15, -449.87 15 M-449.87 15 C-460.53 15, -465.87 20.34, -465.87 31 M-465.87 31 C-465.87 88.19, -465.87 145.37, -465.87 205.4" stroke="#408ace" stroke-width="2.5" fill="none" stroke-dasharray="8 10"></path></g><g transform="translate(710.1400000000001 79) rotate(0 -232.93412730607048 102.69886145979439)"><path d="M-474.42 181.91 C-471.46 190.04, -468.49 198.18, -465.87 205.4" stroke="#408ace" stroke-width="2.5" fill="none"></path></g><g transform="translate(710.1400000000001 79) rotate(0 -232.93412730607048 102.69886145979439)"><path d="M-457.32 181.91 C-460.28 190.04, -463.24 198.18, -465.87 205.4" stroke="#408ace" stroke-width="2.5" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(710.1400000000001 79) rotate(0 0.24408633952555192 19.306421401110292)"><path d="M0 0 C0.14 10.97, 0.28 21.94, 0.49 38.61" stroke="#408ace" stroke-width="2.5" fill="none" stroke-dasharray="8 10"></path></g><g transform="translate(710.1400000000001 79) rotate(0 0.24408633952555192 19.306421401110292)"><path d="M-6.34 20.55 C-4.4 25.68, -2.46 30.81, 0.49 38.61" stroke="#408ace" stroke-width="2.5" fill="none"></path></g><g transform="translate(710.1400000000001 79) rotate(0 0.24408633952555192 19.306421401110292)"><path d="M6.86 20.39 C5.05 25.56, 3.24 30.74, 0.49 38.61" stroke="#408ace" stroke-width="2.5" fill="none"></path></g></g><mask></mask><g transform="translate(726.7942147723919 87.4973010901797) rotate(0 20 12.5)"><text x="0" y="19.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#408ace" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Dependency</text></g><g stroke-linecap="round"><g transform="translate(1174.4653720136544 474.21156234750583) rotate(0 -407.3119688873595 41.819166395399236)"><path d="M0 0 C0 4.89, 0 9.79, 0 12.75 M0 12.75 C0 21.26, -4.25 25.51, -12.75 25.51 M-12.75 25.51 C-209.82 25.51, -406.89 25.51, -798.62 25.51 M-798.62 25.51 C-809.29 25.51, -814.62 30.84, -814.62 41.51 M-814.62 41.51 C-814.62 53.44, -814.62 65.37, -814.62 83.64" stroke="#408ace" stroke-width="2.5" fill="none" stroke-dasharray="8 10"></path></g><g transform="translate(1174.4653720136544 474.21156234750583) rotate(0 -407.3119688873595 41.819166395399236)"><path d="M-823.17 60.15 C-819.89 69.16, -816.61 78.18, -814.62 83.64" stroke="#408ace" stroke-width="2.5" fill="none"></path></g><g transform="translate(1174.4653720136544 474.21156234750583) rotate(0 -407.3119688873595 41.819166395399236)"><path d="M-806.07 60.15 C-809.35 69.16, -812.64 78.18, -814.62 83.64" stroke="#408ace" stroke-width="2.5" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(710.6281726790512 218.6128428022206) rotate(0 -67.38999710390982 34.4077377414561)"><path d="M0 0 C0 4.76, 0 9.53, 0 12.07 M0 12.07 C0 20.12, -4.02 24.14, -12.07 24.14 M-12.07 24.14 C-48.21 24.14, -84.35 24.14, -118.78 24.14 M-118.78 24.14 C-129.45 24.14, -134.78 29.48, -134.78 40.14 M-134.78 40.14 C-134.78 47.57, -134.78 55, -134.78 68.82" stroke="#408ace" stroke-width="2.5" fill="none" stroke-dasharray="8 10"></path></g><g transform="translate(710.6281726790512 218.6128428022206) rotate(0 -67.38999710390982 34.4077377414561)"><path d="M-142.42 47.83 C-139.4 56.11, -136.39 64.39, -134.78 68.82" stroke="#408ace" stroke-width="2.5" fill="none"></path></g><g transform="translate(710.6281726790512 218.6128428022206) rotate(0 -67.38999710390982 34.4077377414561)"><path d="M-127.14 47.83 C-130.16 56.11, -133.17 64.39, -134.78 68.82" stroke="#408ace" stroke-width="2.5" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(710.6281726790512 218.6128428022206) rotate(0 231.91859966730158 32.79935977264263)"><path d="M0 0 C0 2.4, 0 4.8, 0 11.45 M0 11.45 C0 19.08, 3.82 22.89, 11.45 22.89 M11.45 22.89 C181.44 22.89, 351.42 22.89, 447.84 22.89 M447.84 22.89 C458.5 22.89, 463.84 28.23, 463.84 38.89 M463.84 38.89 C463.84 49.13, 463.84 59.37, 463.84 65.6" stroke="#408ace" stroke-width="2.5" fill="none" stroke-dasharray="8 10"></path></g><g transform="translate(710.6281726790512 218.6128428022206) rotate(0 231.91859966730158 32.79935977264263)"><path d="M456.53 45.53 C458.06 49.74, 459.6 53.95, 463.84 65.6" stroke="#408ace" stroke-width="2.5" fill="none"></path></g><g transform="translate(710.6281726790512 218.6128428022206) rotate(0 231.91859966730158 32.79935977264263)"><path d="M471.14 45.53 C469.61 49.74, 468.08 53.95, 463.84 65.6" stroke="#408ace" stroke-width="2.5" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(710.3882961908029 218.6128428022206) rotate(0 294.7829775621187 171.23654596286076)"><path d="M0 0 C0 2.57, 0 5.14, 0 11.58 M0 11.58 C0 19.3, 3.86 23.16, 11.58 23.16 M11.58 23.16 C166.11 23.16, 320.64 23.16, 573.57 23.16 M573.57 23.16 C584.23 23.16, 589.57 28.49, 589.57 39.16 M589.57 39.16 C589.57 108.55, 589.57 177.94, 589.57 342.47" stroke="#408ace" stroke-width="2.5" fill="none" stroke-dasharray="8 10"></path></g><g transform="translate(710.3882961908029 218.6128428022206) rotate(0 294.7829775621187 171.23654596286076)"><path d="M581.02 318.98 C582.91 324.2, 584.81 329.41, 589.57 342.47" stroke="#408ace" stroke-width="2.5" fill="none"></path></g><g transform="translate(710.3882961908029 218.6128428022206) rotate(0 294.7829775621187 171.23654596286076)"><path d="M598.12 318.98 C596.22 324.2, 594.32 329.41, 589.57 342.47" stroke="#408ace" stroke-width="2.5" fill="none"></path></g></g><mask></mask></svg> | ||
| @@ -0,0 +1,2 @@ | |||
| 1 | +<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 820 328.6994984864953" width="820" height="328.6994984864953"><!-- svg-source:excalidraw --><metadata><!-- payload-type:application/vnd.excalidraw+json --><!-- payload-version:2 --><!-- payload-start -->eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1dS29cdTAwMWPHXHUwMDExvvtXXHUwMDEwzMFcdTAwMTdx3NXvNlx1MDAxMFx1MDAwNKRIkVx1MDAxMvWkKEt2YFxiw91ZcsjlLrU7K4oyXHUwMDA0+JKcXHUwMDFjwEBcdTAwMGVcdTAwMDFyXGKQQ47JKVx1MDAwN1+C/Fx1MDAxOTmA/0WqZ6mdnp2e2Vx1MDAwN4dcdTAwMTRlLlxyS9ye2Z6e7vrqq6quan332dLScnJ2XHUwMDEyLX+5tFx1MDAxY71phO242Vx1MDAwYk+Xb9n211GvXHUwMDFmdzt4iaaf+91Br5HeeZAkJ/0vv/jiOOxcdTAwMWRFyUk7bETB67g/XGLb/WTQjLtBo3v8RZxEx/3f2T9cdTAwMWaGx9FvT7rHzaRcdTAwMTdkXHUwMDBmWYmacdLtXHKfXHUwMDE1taPjqJP0sfff4+elpe/SP/FK3LRP7EWN5P5L7PaYQPqN9NqHkdurYWe/XHUwMDFkZZfeYLsgo49n+Y+ncTM5wCbmtFx1MDAxZETx/kFi31ZnjcNev1xcylr6Sa97XHUwMDE03e62cej46N9QIVm0lz14L2xcdTAwMWPt97qDTjO7p7lcdTAwMTeFLWdwrbjdfpqcpT3jtOJ8LI/1//x8gDDWXvYtfOD+QSfq93Nj7Z6EjTix71x1MDAwZSRrtaM7udtM5/rbbEw9XFylu3ayO4N2e9RcdTAwMWN3mpGdy+WQOGOMXCJ7IyWUaqNByNGVTGbYeNvDbieVXHUwMDFloExwYFxusm/F/XVcdTAwMTSAJO20hUJcdTAwMTRls2kncmNcXDhcXFx1MDAwMXGEJInefFx1MDAxMFx1MDAxMjpcdTAwMWFsTlDsXHUwMDFky6NcdTAwMGLvzn/LJmFw0lxmh8NcdTAwMDCliVGcKq24XHUwMDE5XW/HnaPxXHUwMDE5andcdTAwMWJHnpGnXCJwvlwi9v60/d0tn3B7x51cdTAwMWZzTq5Bm7xgi4JgK+qRa1x1MDAxZbB6XHUwMDA1O+mFnf5J2MPFuSrhhstcdTAwMTFuKFxiN3ZKPWJccqpUrrVcdTAwMDSpXHUwMDAxXHUwMDE4nUeuq2RQUEL4PDKYilx1MDAwZb7eL9//9f1///7zv/72/j9/zl6024v3407Y3q28q9XtJE/jt8M3zLXeXHSP47adf5l74Go73rcztdzAd4t6y+58JTFq/9Fcckn3JLvawFx1MDAxZcO4XHUwMDEz9e5WKHx892jrgzxDwDLBXHUwMDBmXHUwMDA3SXcn6lx1MDAwZlx1MDAwN5r0XHUwMDA2c1x1MDAwMXH40OSgR1xim5pldJ5lwEMzQD00I2dhXHUwMDE5kCHjYTXLRLolXCLzibNcZi1cdTAwMDJcdTAwMTE0JZIpyl1Jci1cdTAwMTO37Vx1MDAwM1x1MDAxYZVAvc00z75UK8mkMsKnXCKZW1W9hb3e6f2XnW5cdTAwMTJcdTAwMTPl71xy7+ieXlfOXHUwMDFhm4YqzlwiKmBoWVGhcZhcbiBcdTAwMGZcdTAwMWFpXHUwMDAyWoCNXHUwMDE0XHUwMDAx48xwzSQqQaWhXGJcIlxugaxcdTAwMTdGv1x1MDAxZU5jPk7zgajUVONcdTAwMDBGXHUwMDEy5lxmpSZGY9w1XHUwMDFh52C03YNeXHUwMDE0NpdIOZtcdTAwMTXvcJlM5lovzGTHcbPp8oKXzMZ55arIXGaImJrM6JjPhMxcdTAwMTVoMEQjbDljXFxkJkAluVx1MDAwMVx1MDAxNYEwjKOhL4SgSs1ied5cdTAwMTiy40WEXHUwMDFhqpXA/70uVaFxXHUwMDA0VI5TzVxcTNXNdkDktWQ7IbXEv66K7dxpqGA7XHUwMDE0+Cq2U1x1MDAxNEElNJHcUGI0Z1x1MDAwNVAtqG/YOiewhI/6vJAqdec00p7RStXszV1AXse4XHUwMDBmJnJcdTAwMWZcXCvuy9HQJXOfV9GMKZk8YFx0XHUwMDBmjPuTrVAqkppcdTAwMDWUK8GlkFJrQYqI5SQg7k92x1xisSTA76NcYlx1MDAwMFx1MDAxN5IopmdjxVZL7slrXHUwMDE3j7kkZpRFXHUwMDAwa5w0Q7ifXHUwMDE5S2HM0XtcdTAwMDStSGa3fGxcdTAwMTifdONx4s1+W8omNP0w+v3bW967S6Uu/XZR3rL+XG7M2k/CXrKGS1x1MDAxMHf2cXRcdTAwMTl9f1xizlfYsqkuaVxmclx1MDAwMmFcdTAwMTc/PMFcdTAwMTZx3jCyXHKWo05zhlx1MDAwN7mKY8ZcdTAwMDel77Rq4X6AXG5xfIFwXHUwMDE47rVxvdBcdTAwMGX7ye3u8XGc4Mo/tqs23sHMXHUwMDE2RH+wh6wylb8seUBQK1x1MDAxOWE4NWNcdTAwMDZcdTAwMDRSP7KTICDQvCZcXOpiXHUwMDAwXHUwMDE4aIaTzCrXgcmJS0Zuk/WPTH9uiP7RXHUwMDA1/cNcZlx1MDAxOK3dgFKmfpxoy5j6oVx1MDAwNp1cdTAwMWZcdPPtdVR40MhF6IxdxIr4+cdcdTAwMWbe//S9XHUwMDFi8/35j3/Axv/981x1MDAxZuWGxVRfcm1ccp5rvcyIcf7dL9+13kmD00CKYC7djZy4XHUwMDFkXHSL7cipXHUwMDExalxuXGJcdTAwMTVcdTAwMTQ9Jiq1XHUwMDE3oWVcdTAwMDBVhOGMuVZFjZ7zuYyAQ1/jSn90YbLnvJNcdTAwMWG0lPh7m9lzltSSy1xcOmRG3itMQ1x1MDAwNe9cdKZcdTAwMDJgkiC3aWmA54nPt9MpXHUwMDAyRZUxUlNcdFxutPYgaDZP+UZtfK56PGXH2nA2Pku3WoBcdTAwMTOuuXFjyzWFiSVwzeZcdTAwMTFQ38bnajmtldx2iU7zpK3PXCK7XFxcdTAwMWSleXJcdTAwMTBKKE0tKK1OLK55MmyU0ZQrrl1RmsRpTFx1MDAxOC3lnD7vlJzGpuK0iSR0dZuVhXFXkJBCXHUwMDEyQlx1MDAwZlx1MDAxZlx1MDAxZCRl0MzOx4J8XHUwMDFjxFx1MDAwMy2ZMZpcdTAwMDMjXHUwMDFhPbZcdTAwMDVcdTAwMDfNXCL3t31cdTAwMWNU2JS0zaV+XHUwMDE2aKU0mlx1MDAwMPPt91dykDWU6uKgtek4aO06cVx1MDAxML0yXHUwMDBlgodn5Mi8Pnh6dHR6eufZ0cpOLD3JXHUwMDA1Zf5cdTAwMTVcdTAwMWLbuiTFjFx1MDAwMldYXHUwMDE3iTiVoFxcL4JSXHUwMDE4SVx1MDAxOUhnvjJoinJoglx1MDAxNNrIObNcYqroaH1cdTAwMDVaiUjM9lx1MDAxM3FcdTAwMWE+XttcdTAwMTK7W1u9qXjpVlW3q3RrbbfR3Ni/XHUwMDAz249cdTAwMWXcO+ztJI+363K60NWknLiIulx1MDAwNL6rnpgq74tX7ltcIolBbpekXHUwMDAwsMW+5bB1TtBtXHUwMDE0Qcc0pVJw4UtGdUyRcdAxaVx1MDAxOGrAmrc9pN2upnXsXn5cIpk7XHUwMDEzKOlKnDK7XHUwMDA1XHUwMDAynrSDMqeMLniwRkje8SSkMnSuQHidMlGaTIda0XDO5SV5ZamUlGTVfOxII6NUsLny/WZ28samYYKTt+C6j8d1mz6vr7CPbyFVXHUwMDFheUTPjFx1MDAwMue6ZqevPpb7hHJ0ijxzyeRWbWZXJetIXHUwMDAygVKGXHUwMDE5Ynd7lMlXQ4EsJudcdTAwMTBEOpeEKEEpXGKhlWeXQMiAaEZcdTAwMTVcIppcdTAwMTOOJtdcZsC9Ubk59zxhSs1cYnOpzUnNoYXdhFxmvqBcdTAwMTkjdcdsJNdgYK6NrVpzc1bKpc7+XHUwMDE05C3rr8CoU+bmVFurS1nuXGZcdTAwMGWNMyWF5IBcdTAwMGJgXHUwMDE0V+DcNcymgfOGXHUwMDE503ZeRd9cdTAwMDBsrj9cdTAwMTnwweDZq827XHUwMDAz+ea46Vx1MDAxYlx1MDAwM1x0XGIgbVx1MDAxMsFR2WqFszTNXHUwMDE4rldGz06a0UOnqtpEVsE31mhcZkklmGL5qDKlgcH5QFxmUVwiwEieqfpFSk8taut+QW0plDt0rotp9ZZccspcdTAwMTODtVx1MDAxMrZcIq3uolx1MDAxOI46i11ot/P9T3/6+cdcdTAwMWbcQPIvf/n3pJSeqb7060/pWXtCd97y5lpHrJxtr1x1MDAxZq0/2n6zezi1z02FXGKMjYxqQ5gkXHUwMDBlXHUwMDExptgmMmDWUGGo65Hviq5cdTAwMDTgXHUwMDFk0m7aIV1wY9xcdTAwMDLvXHUwMDEx0tlsvkSroYmKblxitp8sl655wckw2kjNkPp8xooo3VSlhFx1MDAxYWBcYvvaK0o3XHUwMDFlXHUwMDFmtrtNbu4/uPfqyeGrr1dcdTAwMGY2N+N6tleFoVTPlCdYXHUwMDAxkepxVlXDSFxiuFE48ZRcdTAwMTOFTJ9HXHUwMDA3wFx1MDAwNHRcdTAwMThcdTAwMTFcYiZcdTAwMTBZXHUwMDA2519y4qHBXHUwMDE5XHUwMDFk7Vx1MDAxYlx1MDAwNY6d6cFhcIU0Z8xcdTAwMTdsZuVHXHUwMDFmaGBcdTAwMWNcdTAwMTSvO9o8u/RcdTAwMTYocehlP+wmcevsOnjaXHUwMDEzaMZcdTAwMWYkXHUwMDE4XHUwMDFmfjnhXHUwMDE1SLJcdTAwMDLOrVx1MDAxZXvz8lGrIVx1MDAxNH/1zeG97nNydvRsKkNcdTAwMTbhSDT6WMJcYvRssplK0Ww4XqWMXHSgXG6X0Vx1MDAxM3vm6PiA0IJhXHUwMDFmqIhryJaAyP53Q+D8dFx1MDAwNq5cdTAwMTNGa7QrvXhcdTAwMDZRcNezbFxugfhcdTAwMDNKa7ZxJWGMwYWyKVxcROxEjW6vWVx1MDAwN6zbUSupwUatgu/4YOtcdTAwMDHxXbV52Dp7s7JCn1x1MDAxZmty0Dh8/Dy6M1x1MDAxNSdzXHUwMDFivVZoXHShycqlXHUwMDAzwiGKVYA+OaBcdTAwMTBIULh2XHUwMDFlb5SRgNmSXGJBXHUwMDA1M0TSTE8vYDxcdTAwMDWMd2eAMTe4QFZf+mBcZqUwpkTZ8iBSe3xcdTAwMWN9XHUwMDFjpWuD8fMwTj5cdTAwMTFcdTAwMTDnh1pcdTAwMGaE91bDO1x1MDAxYlx1MDAwZlx1MDAxZn1NN5+93H7w9tHqizuwM1xyhFx1MDAwNTqNioORXG5cZlFcdTAwMDBqZiZmPFBouymubb49z+w7N7ykXHUwMDE5uj5cdTAwMTLVgFx1MDAxNGjCL+Dsh/OzXHUwMDE54FxmaGODIN5CXHUwMDE1XFzOUlZGXHUwMDFkgFY21H1cdTAwMWNcdTAwMGK6tNKNOMxcdTAwMDHn21x1MDAwN2GnXHUwMDEztSfTMlx1MDAwYlxmKjNuXHUwMDE4T0PPjkvxXHUwMDExXHUwMDExXjn6ekC+vXl0tH2ve6DO7iUru/fF4YO16NFUu9SEXHUwMDA1Ulx1MDAxYm0xntZDjGGcXCKCuWJcdTAwMDRsXHUwMDE5qOcgXHRgiGAjtOKoXG44U1x1MDAwYpaeXHTWX81cdTAwMDBryVxirodcdTAwMGbTxaLRrPxcZpeV1J62jJC2XHUwMDE1orVB+ppTdMVY64Fv9abWxMxkwZFFhaZCsFxcnsgw/GVcdTAwMDLKXHUwMDAxXHUwMDAxbsuoXHUwMDA0cfaFRvEvsFx1MDAxMEZcdTAwMGWXRlFcdTAwMDY+S3vG4PCNyd567tmrpoZcdTAwMTHlP0dcdTAwMDLptZR9KTBAbNVfVfP4+YuTt4N2/7ZcdTAwMWGYs8ZcdTAwMDH0vtp6kCXH5Fx1MDAwNOyK0pgr+zVcdTAwMWLxi1x1MDAxNlxyedR5tTU4a1x1MDAxY4W78YuHdWWKoSVi9GVnilVPeJXFLVmgKVNgU8bQtlx1MDAxZUMy5ZOQrND+XHUwMDAxY7BcdTAwMDfGXHUwMDE0Ot5cdTAwMTePZN+olLFcdTAwMTfFlDEhXHUwMDA0MblcdTAwMTQwXHUwMDA3zU6Z4TialVx1MDAxMoqS2kPWcnjUSlxyxFuVIe255eOFtCdw41WlSFx1MDAxM5i+VEhcdTAwMTFcdTAwMWHYskrChZBGOzXGZ0M/XHUwMDBi/WpcIlxyUI3S5ZaiuVY1Klx1MDAwM6tcYqimklx1MDAxYVx1MDAwZpC1XGLwiiBoe0t00cXiXHUwMDA0RFx1MDAwZqK/Llwimlx1MDAxMYmOYdFcck51Y3nIWtg6PSXnS8uo4rtRXjFcdTAwMDFxcVa+lINcdTAwMWOkXHUwMDA0p/jtktOr3WmoTK9mXHUwMDAxY1pcdTAwMThBuTTowI5hzEzCmFLpri/jqN1tnq8nJWLBleXI+saXXl2oXHUwMDE3SiexNOKkXHUwMDE1YcBdLNaUX21cdTAwMDVcdTAwMTbmXHUwMDEx2Fx1MDAwMkl+Plx1MDAwNUt+fiU0ObmcdpylLplcdTAwMWHvv3zdbD3p3tvs8N1+b9usXHUwMDBm3lx1MDAxZXlcdTAwMDLLZVx1MDAxY1x0XHUwMDEwcC1ccjWEcqFUPslcdTAwMWHd0IBcdTAwMThjz1x1MDAxZtMglfRcdTAwMTTF21xuXG40cVxyQ341wJTycORcIqepXHUwMDFjwOFy6aJcdTAwMTeQzaVWzJ4m68G34aVWsFx1MDAwMS7s9kGNh1x1MDAxZnlcdMFcdTAwMTHK3dvrW7u9lVg/fvFC7j94tbF9V+59mq5nXHUwMDA19PxvOVxya1JcdTAwMTIw60VQ9GrcXFyoIejkRNBcdTAwMTFcdTAwMWVcdTAwMDCANlQhqVx1MDAxYcEuXpR0o0C3Nz3oXHUwMDE4RcCVnEeqdfk/XHUwMDEzY4QyNuhbN6dShVx1MDAwNF9cdTAwMDOnXp9kqVx0XHUwMDA0Vlx1MDAxOVx1MDAwNa47XHUwMDAyXFyteiqrlbhcZlA72/xG62yObdIym/hrXHUwMDBiYWyxtlx1MDAwMFmEtFx1MDAxMFx1MDAwMVc2XHUwMDAxgFxue3ZcdTAwMDBjXHUwMDFlXHUwMDFlJVx1MDAwMYqVREHgjNpTa8SieqlcZuHuXHUwMDE4R9VLnID0n7nPWSl7XCJ1XHUwMDFhitZN7eVLUpj5kFxca/lSudylXy9KXFzWYYFsp6xfmqV2yFx1MDAxZcykcfpxdFx1MDAxNj7GuetC9UvVSic3XHUwMDA2iVx1MDAxY21cdTAwMDNAuFqCXG5VXHUwMDFjglx0gNl/XHUwMDAzg6OXK1x1MDAxNaK/MKTrU87kXHJMVOk1JU1gj5Y2IJlcIsrJMfxcdTAwMTBEY1x1MDAwNnmQouDYu1xueo1cdTAwMDRaXHUwMDEzsFn1VNrpoVx1MDAxZVOF0YCitUM13qWYXHUwMDEwsFBrJWotKqg1TVx1MDAxMFx1MDAxYozTgv6yqouWnlx1MDAxY6JcdTAwMDRQZk9zrFmrMYQqzFx1MDAxNaSquyizTOzSy0WJu7ha83r/jibBMaE9XGJUoZ4ghlJq6lNn3tLuvCblbHigPbpcdTAwMTaMcjPNoz+K2vrsfOqXw5OTp1x0StfotVx1MDAxMTRx89xG/SDvw7YkSlx1MDAwZoZ3mlx1MDAxZXSb0UYn3GuPS9ry6zg6XfNcdTAwMDTaW+mP9SXTXHSw+iGyI/vu3Wfv/lx1MDAwZtyw2oIifQ==<!-- payload-end --></metadata><defs><style class="style-fonts"> | ||
| 2 | + @font-face { font-family: Nunito; src: url(data:font/woff2;base64,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); }</style></defs><rect x="0" y="0" width="820" height="328.6994984864953" fill="#ffffff"></rect><g stroke-linecap="round" transform="translate(10 38.699498486495315) rotate(0 175 140)"><path d="M0 0 L350 0 L350 280 L0 280" stroke="none" stroke-width="0" fill="#dbeafe"></path><path d="M0 0 C110.27 0, 220.54 0, 350 0 M0 0 C74.79 0, 149.57 0, 350 0 M350 0 C350 65.38, 350 130.77, 350 280 M350 0 C350 56.89, 350 113.78, 350 280 M350 280 C263.4 280, 176.8 280, 0 280 M350 280 C276.3 280, 202.6 280, 0 280 M0 280 C0 169.94, 0 59.88, 0 0 M0 280 C0 212.58, 0 145.15, 0 0" stroke="#2563eb" stroke-width="1" fill="none"></path></g><g transform="translate(149 43.699498486495315) rotate(0 36 12.149999999999999)"><text x="36" y="18.072000000000003" font-family="Nunito, Segoe UI Emoji" font-size="18px" fill="#2563eb" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Comm Entity</text></g><g stroke-linecap="round" transform="translate(40 138.69949848649532) rotate(0 60 30)"><path d="M0 0 L120 0 L120 60 L0 60" stroke="none" stroke-width="0" fill="#e8f5e9"></path><path d="M0 0 C32.47 0, 64.93 0, 120 0 M0 0 C28.38 0, 56.76 0, 120 0 M120 0 C120 16.38, 120 32.75, 120 60 M120 0 C120 16.52, 120 33.03, 120 60 M120 60 C91.88 60, 63.75 60, 0 60 M120 60 C77.56 60, 35.12 60, 0 60 M0 60 C0 47.71, 0 35.42, 0 0 M0 60 C0 39.35, 0 18.69, 0 0" stroke="#16a34a" stroke-width="1" fill="none"></path></g><g transform="translate(67.3280258178711 157.8994984864953) rotate(0 32.671974182128906 10.799999999999997)"><text x="32.671974182128906" y="16.064" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#16a34a" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Thread 0</text></g><g stroke-linecap="round" transform="translate(210 109.5185843008299) rotate(0 60 62.79672067776386)"><path d="M0 0 L120 0 L120 125.59 L0 125.59" stroke="none" stroke-width="0" fill="#e8f5e9"></path><path d="M0 0 C33.21 0, 66.42 0, 120 0 M0 0 C29.86 0, 59.72 0, 120 0 M120 0 C120 42.82, 120 85.64, 120 125.59 M120 0 C120 35.74, 120 71.48, 120 125.59 M120 125.59 C93.93 125.59, 67.86 125.59, 0 125.59 M120 125.59 C88.68 125.59, 57.37 125.59, 0 125.59 M0 125.59 C0 83.92, 0 42.25, 0 0 M0 125.59 C0 80.93, 0 36.26, 0 0" stroke="#16a34a" stroke-width="1" fill="none"></path></g><g transform="translate(237.3280258178711 161.51530497859375) rotate(0 32.671974182128906 10.799999999999997)"><text x="32.671974182128906" y="16.064" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#16a34a" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Thread 1</text></g><g stroke-linecap="round"><g transform="translate(164.99999999999997 171.94704505338035) rotate(0 20.000000000000014 0.23298757280369387)"><path d="M0 0 C8.66 0.1, 17.33 0.2, 40 0.47 M0 0 C15.75 0.18, 31.5 0.37, 40 0.47" stroke="#ff6b6b" stroke-width="1" fill="none"></path></g><g transform="translate(164.99999999999997 171.94704505338035) rotate(0 20.000000000000014 0.23298757280369387)"><path d="M21.13 7.09 C25.21 5.65, 29.3 4.22, 40 0.47 M21.13 7.09 C28.56 4.48, 35.99 1.87, 40 0.47" stroke="#ff6b6b" stroke-width="1" fill="none"></path></g><g transform="translate(164.99999999999997 171.94704505338035) rotate(0 20.000000000000014 0.23298757280369387)"><path d="M21.29 -6.59 C25.34 -5.06, 29.39 -3.54, 40 0.47 M21.29 -6.59 C28.65 -3.81, 36.02 -1.03, 40 0.47" stroke="#ff6b6b" stroke-width="1" fill="none"></path></g></g><mask></mask><g transform="translate(124.020495942911 10) rotate(0 63 9.450000000000003)"><text x="63" y="14.056000000000001" font-family="Nunito, Segoe UI Emoji" font-size="14px" fill="#666666" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Sync within Entity</text></g><g stroke-linecap="round" transform="translate(460 38.699498486495315) rotate(0 75 140)"><path d="M0 0 L150 0 L150 280 L0 280" stroke="none" stroke-width="0" fill="#dbeafe"></path><path d="M0 0 C37.96 0, 75.91 0, 150 0 M0 0 C59.92 0, 119.84 0, 150 0 M150 0 C150 64.22, 150 128.43, 150 280 M150 0 C150 66.92, 150 133.85, 150 280 M150 280 C108.82 280, 67.63 280, 0 280 M150 280 C110.04 280, 70.09 280, 0 280 M0 280 C0 183.54, 0 87.08, 0 0 M0 280 C0 208.77, 0 137.53, 0 0" stroke="#2563eb" stroke-width="1" fill="none"></path></g><g transform="translate(497.13600158691406 43.699498486495315) rotate(0 37.86399841308594 10.799999999999997)"><text x="37.86399841308594" y="16.064" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#2563eb" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Comm Entity A</text></g><g stroke-linecap="round" transform="translate(660 38.699498486495315) rotate(0 75 140)"><path d="M0 0 L150 0 L150 280 L0 280" stroke="none" stroke-width="0" fill="#dbeafe"></path><path d="M0 0 C35.03 0, 70.05 0, 150 0 M0 0 C30.48 0, 60.95 0, 150 0 M150 0 C150 69.28, 150 138.56, 150 280 M150 0 C150 58.96, 150 117.92, 150 280 M150 280 C91.04 280, 32.08 280, 0 280 M150 280 C113.88 280, 77.76 280, 0 280 M0 280 C0 219.81, 0 159.63, 0 0 M0 280 C0 179.4, 0 78.79, 0 0" stroke="#2563eb" stroke-width="1" fill="none"></path></g><g transform="translate(697.568000793457 43.699498486495315) rotate(0 37.43199920654297 10.799999999999997)"><text x="37.43199920654297" y="16.064" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#2563eb" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Comm Entity B</text></g><g stroke-linecap="round" transform="translate(490 90.69949848649532) rotate(0 50 30)"><path d="M0 0 L100 0 L100 60 L0 60" stroke="none" stroke-width="0" fill="#e8f5e9"></path><path d="M0 0 C39.86 0, 79.72 0, 100 0 M0 0 C21.07 0, 42.14 0, 100 0 M100 0 C100 19.58, 100 39.16, 100 60 M100 0 C100 19.27, 100 38.53, 100 60 M100 60 C73.7 60, 47.41 60, 0 60 M100 60 C69.3 60, 38.6 60, 0 60 M0 60 C0 38.09, 0 16.18, 0 0 M0 60 C0 40.32, 0 20.64, 0 0" stroke="#16a34a" stroke-width="1" fill="none"></path></g><g transform="translate(507.3280258178711 109.8994984864953) rotate(0 32.671974182128906 10.799999999999997)"><text x="32.671974182128906" y="16.064" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#16a34a" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Thread 0</text></g><g stroke-linecap="round" transform="translate(680 90.69949848649532) rotate(0 50 30)"><path d="M0 0 L100 0 L100 60 L0 60" stroke="none" stroke-width="0" fill="#e8f5e9"></path><path d="M0 0 C34.09 0, 68.19 0, 100 0 M0 0 C28.46 0, 56.91 0, 100 0 M100 0 C100 13.03, 100 26.07, 100 60 M100 0 C100 15.66, 100 31.32, 100 60 M100 60 C66.82 60, 33.64 60, 0 60 M100 60 C64.44 60, 28.87 60, 0 60 M0 60 C0 42.36, 0 24.72, 0 0 M0 60 C0 40.1, 0 20.2, 0 0" stroke="#16a34a" stroke-width="1" fill="none"></path></g><g transform="translate(697.3280258178711 109.8994984864953) rotate(0 32.671974182128906 10.799999999999997)"><text x="32.671974182128906" y="16.064" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#16a34a" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Thread 1</text></g><g stroke-linecap="round"><g transform="translate(561.7793902684799 151.69949848649532) rotate(0 -0.1623003761077939 28.04163697202327)"><path d="M0 0 C-0.08 13.82, -0.16 27.64, -0.32 56.08 M0 0 C-0.11 19.39, -0.22 38.78, -0.32 56.08" stroke="#ff6b6b" stroke-width="1" fill="none"></path></g><g transform="translate(561.7793902684799 151.69949848649532) rotate(0 -0.1623003761077939 28.04163697202327)"><path d="M-8.74 32.54 C-6.67 38.34, -4.59 44.14, -0.32 56.08 M-8.74 32.54 C-5.83 40.68, -2.92 48.82, -0.32 56.08" stroke="#ff6b6b" stroke-width="1" fill="none"></path></g><g transform="translate(561.7793902684799 151.69949848649532) rotate(0 -0.1623003761077939 28.04163697202327)"><path d="M8.36 32.64 C6.22 38.42, 4.08 44.19, -0.32 56.08 M8.36 32.64 C5.36 40.74, 2.36 48.85, -0.32 56.08" stroke="#ff6b6b" stroke-width="1" fill="none"></path></g></g><mask></mask><g transform="translate(580.0186326753737 11.60074530701496) rotate(0 63 9.450000000000003)"><text x="63" y="14.056000000000001" font-family="Nunito, Segoe UI Emoji" font-size="14px" fill="#666666" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Sync between Entities</text></g><g stroke-linecap="round" transform="translate(215.9166089036068 195.0842918808002) rotate(0 53.34933230249595 15.799999999999997)"><path d="M0 0 C42.25 0, 84.5 0, 106.7 0 M0 0 C41.5 0, 83.01 0, 106.7 0 M106.7 0 C106.7 7.46, 106.7 14.92, 106.7 31.6 M106.7 0 C106.7 12.47, 106.7 24.94, 106.7 31.6 M106.7 31.6 C69.7 31.6, 32.7 31.6, 0 31.6 M106.7 31.6 C85.09 31.6, 63.49 31.6, 0 31.6 M0 31.6 C0 20.57, 0 9.55, 0 0 M0 31.6 C0 19.71, 0 7.82, 0 0" stroke="#fc807e" stroke-width="1" fill="none"></path></g><g transform="translate(221.49798924077072 200.0842918808002) rotate(0 47.76795196533203 10.799999999999997)"><text x="47.76795196533203" y="16.064" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#fc807e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">ThreadNotify</text></g><g transform="translate(25.508819595522596 283.2018336136735) rotate(0 73.00792694091797 10.800000000000011)"><text x="0" y="16.064" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">ThreadNotifyRecord</text></g><g transform="translate(205.3476838904694 285.9866076482734) rotate(0 65.15994262695312 10.800000000000011)"><text x="0" y="16.064" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">ThreadNotifyWait</text></g><g transform="translate(466.74196719071176 283.2018336136735) rotate(0 67.39068740007735 9.41601330882898)"><text x="0" y="14.00544794379897" font-family="Nunito, Segoe UI Emoji" font-size="13.949649346413317px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">ChannelNotifyRecord</text></g><g transform="translate(663.6898719026148 281.4842285911796) rotate(0 69.44793701171875 10.800000000000011)"><text x="0" y="16.064" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">ChannelNotifyWait</text></g><g stroke-linecap="round" transform="translate(514.835825535781 207.9413698913457) rotate(0 45.947858848615624 15.799999999999997)"><path d="M0 0 L91.9 0 L91.9 31.6 L0 31.6" stroke="none" stroke-width="0" fill="#e8f5e9"></path><path d="M0 0 C30.21 0, 60.41 0, 91.9 0 M0 0 C20.07 0, 40.14 0, 91.9 0 M91.9 0 C91.9 10.01, 91.9 20.02, 91.9 31.6 M91.9 0 C91.9 12.21, 91.9 24.43, 91.9 31.6 M91.9 31.6 C59.64 31.6, 27.39 31.6, 0 31.6 M91.9 31.6 C55.14 31.6, 18.39 31.6, 0 31.6 M0 31.6 C0 19.47, 0 7.34, 0 0 M0 31.6 C0 22.34, 0 13.08, 0 0" stroke="#16a34a" stroke-width="1" fill="none"></path></g><g transform="translate(523.8237158175021 212.9413698913457) rotate(0 36.95996856689453 10.799999999999997)"><text x="36.95996856689453" y="16.064" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#16a34a" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Channel 0</text></g><g stroke-linecap="round" transform="translate(662.8247045569883 183.44018977199545) rotate(0 69.28185791413148 42.63125293833576)"><path d="M0 0 L138.56 0 L138.56 85.26 L0 85.26" stroke="none" stroke-width="0" fill="#e8f5e9"></path><path d="M0 0 C37.82 0, 75.63 0, 138.56 0 M0 0 C38.14 0, 76.29 0, 138.56 0 M138.56 0 C138.56 19.98, 138.56 39.96, 138.56 85.26 M138.56 0 C138.56 30.16, 138.56 60.31, 138.56 85.26 M138.56 85.26 C110.18 85.26, 81.8 85.26, 0 85.26 M138.56 85.26 C90.87 85.26, 43.17 85.26, 0 85.26 M0 85.26 C0 61.39, 0 37.52, 0 0 M0 85.26 C0 64.59, 0 43.92, 0 0" stroke="#16a34a" stroke-width="1" fill="none"></path></g><g transform="translate(693.3385952469987 188.44018977199545) rotate(0 38.767967224121094 10.799999999999997)"><text x="38.767967224121094" y="16.064" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#16a34a" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Channel 0'</text></g><g stroke-linecap="round" transform="translate(671.4869290245779 219.79901206817186) rotate(0 60.945469419568894 15.800000000000011)"><path d="M0 0 C28.4 0, 56.79 0, 121.89 0 M0 0 C42.15 0, 84.31 0, 121.89 0 M121.89 0 C121.89 7.01, 121.89 14.03, 121.89 31.6 M121.89 0 C121.89 9.37, 121.89 18.73, 121.89 31.6 M121.89 31.6 C87.53 31.6, 53.17 31.6, 0 31.6 M121.89 31.6 C86.15 31.6, 50.41 31.6, 0 31.6 M0 31.6 C0 19.63, 0 7.66, 0 0 M0 31.6 C0 20.97, 0 10.33, 0 0" stroke="#fc807e" stroke-width="1" fill="none"></path></g><g transform="translate(680.376452094049 224.79901206817186) rotate(0 52.055946350097656 10.800000000000011)"><text x="52.055946350097656" y="16.064" font-family="Nunito, Segoe UI Emoji" font-size="16px" fill="#fc807e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">ChannelNotify</text></g><g stroke-linecap="round"><g transform="translate(606.873793356986 225.39571658934696) rotate(0 27.739847127362168 0.09783902160003777)"><path d="M0 0 C15.51 0.05, 31.02 0.11, 55.48 0.2 M0 0 C16.37 0.06, 32.74 0.12, 55.48 0.2" stroke="#ff6b6b" stroke-width="1" fill="none"></path></g><g transform="translate(606.873793356986 225.39571658934696) rotate(0 27.739847127362168 0.09783902160003777)"><path d="M31.96 8.66 C38.53 6.3, 45.11 3.93, 55.48 0.2 M31.96 8.66 C38.9 6.17, 45.84 3.67, 55.48 0.2" stroke="#ff6b6b" stroke-width="1" fill="none"></path></g><g transform="translate(606.873793356986 225.39571658934696) rotate(0 27.739847127362168 0.09783902160003777)"><path d="M32.02 -8.44 C38.58 -6.02, 45.14 -3.61, 55.48 0.2 M32.02 -8.44 C38.94 -5.89, 45.86 -3.34, 55.48 0.2" stroke="#ff6b6b" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(729.5145916370732 183.09837082264121) rotate(0 -0.44005145631433606 -16.106764145867757)"><path d="M0 0 C-0.33 -12.04, -0.66 -24.08, -0.88 -32.21 M0 0 C-0.35 -12.71, -0.69 -25.41, -0.88 -32.21" stroke="#ff6b6b" stroke-width="1" fill="none"></path></g><g transform="translate(729.5145916370732 183.09837082264121) rotate(0 -0.44005145631433606 -16.106764145867757)"><path d="M5.04 -17.23 C2.83 -22.83, 0.62 -28.43, -0.88 -32.21 M5.04 -17.23 C2.71 -23.14, 0.37 -29.05, -0.88 -32.21" stroke="#ff6b6b" stroke-width="1" fill="none"></path></g><g transform="translate(729.5145916370732 183.09837082264121) rotate(0 -0.44005145631433606 -16.106764145867757)"><path d="M-5.98 -16.93 C-4.07 -22.64, -2.17 -28.35, -0.88 -32.21 M-5.98 -16.93 C-3.97 -22.96, -1.96 -28.99, -0.88 -32.21" stroke="#ff6b6b" stroke-width="1" fill="none"></path></g></g><mask></mask></svg> | ||
Rdocs/zh/architecture/figures/cann-hccl-architecture.png→docs/en/architecture/figures/hccl_architecture.png+2-2
| @@ -1,3 +1,3 @@ | |||
| 1 | version https://git-lfs.github.com/spec/v1 | 1 | version https://git-lfs.github.com/spec/v1 |
| 2 | -oid sha256:f78b9d8c76cd1cdd597084cfbfbefd6ba51244514286e128b43c7c6f19651dd3 | 2 | +oid sha256:675d5dd7ded5e8659a13ad117439179a45411ec878ccaaafa0669eb356626d5f |
| 3 | -size 267360 | 3 | +size 29322 |
| @@ -0,0 +1,15 @@ | |||
| 1 | +# System Overview | ||
| 2 | + | ||
| 3 | +## Architecture Layers | ||
| 4 | + | ||
| 5 | + | ||
| 6 | + | ||
| 7 | +## Core Modules | ||
| 8 | + | ||
| 9 | +| Module | Path | Responsibility | | ||
| 10 | +|------|------|------| | ||
| 11 | +| | | | | ||
| 12 | + | ||
| 13 | +## Data Flow | ||
| 14 | + | ||
| 15 | +## Module Dependencies | ||
| @@ -23,13 +23,13 @@ The software dependencies required for compiling this project are listed below. | |||
| 23 | 23 | ||
| 24 | 1. **Install the driver and firmware (runtime dependency)** | 24 | 1. **Install the driver and firmware (runtime dependency)** |
| 25 | 25 | ||
| 26 | - For downloading and installing the driver and firmware, refer to the "Prepare Software Package" and "Install NPU Driver and Firmware" sections in the [CANN Software Installation Guide](https://www.hiascend.com/document/redirect/CannCommunityInstWizard). The driver and firmware are runtime dependencies. If you are only compiling the source code of this project, they do not need to be installed. | 26 | + For downloading and installing the driver and firmware, refer to the "Prepare Software Package" and "Install NPU Driver and Firmware" sections in the [CANN Software Installation](https://www.hiascend.com/document/redirect/CannCommunityInstWizard). The driver and firmware are runtime dependencies. If you are only compiling the source code of this project, they do not need to be installed. |
| 27 | 27 | ||
| 28 | 2. **Install the CANN software package** | 28 | 2. **Install the CANN software package** |
| 29 | 29 | ||
| 30 | - **Scenario 1: Experience or develop based on the master version** | 30 | - **Scenario 1: Experience or develop based on the master version** |
| 31 | 31 | ||
| 32 | - Click the [download link](https://ascend.devcloud.huaweicloud.com/artifactory/cann-run-mirror/software/master/), select the latest version, and download the corresponding package based on the product model and environment architecture. The installation commands are as follows. For more guidance, refer to the [CANN Software Installation Guide](https://www.hiascend.com/document/redirect/CannCommunityInstWizard). | 32 | + Click the [download link](https://ascend.devcloud.huaweicloud.com/artifactory/cann-run-mirror/software/master/), select the latest version, and download the corresponding package based on the product model and environment architecture. The installation commands are as follows. For more guidance, refer to the [CANN Software Installation](https://www.hiascend.com/document/redirect/CannCommunityInstWizard). |
| 33 | 33 | ||
| 34 | 1. Install the CANN Toolkit development kit package. | 34 | 1. Install the CANN Toolkit development kit package. |
| 35 | 35 | ||
| @@ -0,0 +1,3 @@ | |||
| 1 | +version https://git-lfs.github.com/spec/v1 | ||
| 2 | +oid sha256:fbf860500e23721ef205e558abb12aefbfe4a907d45364817c1f38ced34a4568 | ||
| 3 | +size 30851 | ||
| @@ -0,0 +1,3 @@ | |||
| 1 | +version https://git-lfs.github.com/spec/v1 | ||
| 2 | +oid sha256:3aeaaebf5eddf465ec302a99fe8d6e328ab3e809abe7f0983707d5580f113aaf | ||
| 3 | +size 16794 | ||
| @@ -0,0 +1,3 @@ | |||
| 1 | +version https://git-lfs.github.com/spec/v1 | ||
| 2 | +oid sha256:421d7d9d407f4fdbc64e1d6dbd2e06b64a15adaaa64bb10d3d4b5daef196a307 | ||
| 3 | +size 17550 | ||
| @@ -0,0 +1,3 @@ | |||
| 1 | +version https://git-lfs.github.com/spec/v1 | ||
| 2 | +oid sha256:14f97bef1821be1a41835ffb6fe7b9234a2c2945d45505fa0883eee7d946a48b | ||
| 3 | +size 47167 | ||
| @@ -0,0 +1,3 @@ | |||
| 1 | +version https://git-lfs.github.com/spec/v1 | ||
| 2 | +oid sha256:ddce730be15e00e39e6b92e2c2d8bfdb7d14729d02cda3cd6c7763cae2feab1d | ||
| 3 | +size 26831 | ||
| @@ -104,7 +104,7 @@ typedef struct HcclCommConfigDef { | |||
| 104 | - 该配置仅支持对称组网、推理特性。 | 104 | - 该配置仅支持对称组网、推理特性。 |
| 105 | - 该配置项支持的算子及约束限制参见配置“3”。 | 105 | - 该配置项支持的算子及约束限制参见配置“3”。 |
| 106 | 106 | ||
| 107 | - - 5:通信算子在CCU(Collective Communication Unit,集合通信加速单元)展开,使用CcuBuffer进行内存转写。Ascend 950PR不支持此配置。 | 107 | + - 5:通信算子在CCU(Collective Communication Unit,集合通信加速单元)展开,使用CcuBuffer进行内存读写。Ascend 950PR不支持此配置。 |
| 108 | 108 | ||
| 109 | 此模式下,当CCU与多个远端通信时,使用CcuBuffer作为中转,用于节省内存读写带宽,CcuBuffer的特点是大小较小,但速度较快。当CCU资源不足时,系统会自动切换为“2:AI CPU模式”。 | 109 | 此模式下,当CCU与多个远端通信时,使用CcuBuffer作为中转,用于节省内存读写带宽,CcuBuffer的特点是大小较小,但速度较快。当CCU资源不足时,系统会自动切换为“2:AI CPU模式”。 |
| 110 | 110 | ||
Mdocs/zh/api_ref/comm_opdev/control_plane_api/ccu_kernel_launch_execution/HcommCcuGetMemToken.md+1-1
| @@ -15,7 +15,7 @@ | |||
| 15 | - Atlas训练系列产品:不支持 | 15 | - Atlas训练系列产品:不支持 |
| 16 | <!-- end id4 --> | 16 | <!-- end id4 --> |
| 17 | <!-- npu="310p" id5 --> | 17 | <!-- npu="310p" id5 --> |
| 18 | -- Atlas 推理系列产品:不支持 | 18 | +- Atlas推理系列产品:不支持 |
| 19 | <!-- end id5 --> | 19 | <!-- end id5 --> |
| 20 | 20 | ||
| 21 | ## 功能说明 | 21 | ## 功能说明 |
| @@ -12,10 +12,10 @@ | |||
| 12 | - Atlas A2系列产品:不支持 | 12 | - Atlas A2系列产品:不支持 |
| 13 | <!-- end id3 --> | 13 | <!-- end id3 --> |
| 14 | <!-- npu="910" id4 --> | 14 | <!-- npu="910" id4 --> |
| 15 | -- Atlas 训练系列产品:不支持 | 15 | +- Atlas训练系列产品:不支持 |
| 16 | <!-- end id4 --> | 16 | <!-- end id4 --> |
| 17 | <!-- npu="310p" id5 --> | 17 | <!-- npu="310p" id5 --> |
| 18 | -- Atlas 推理系列产品:不支持 | 18 | +- Atlas推理系列产品:不支持 |
| 19 | <!-- end id5 --> | 19 | <!-- end id5 --> |
| 20 | 20 | ||
| 21 | ## 功能说明 | 21 | ## 功能说明 |
| @@ -30,7 +30,7 @@ flowchart LR | |||
| 30 | | **应用场景** | 大模型训练(数据/模型/专家并行)与推理(TP/PP/EP)的集合通信 | | 30 | | **应用场景** | 大模型训练(数据/模型/专家并行)与推理(TP/PP/EP)的集合通信 | |
| 31 | 31 | ||
| 32 | HCCL 在 CANN 软件栈中的位置——介于 AI 框架与硬件驱动之间,承上启下: | 32 | HCCL 在 CANN 软件栈中的位置——介于 AI 框架与硬件驱动之间,承上启下: |
| 33 | - | 33 | + |
| 34 | 34 | ||
| 35 | --- | 35 | --- |
| 36 | 36 | ||
| @@ -97,7 +97,9 @@ RankGraph 使用图(Graph)对通信域内不同 Rank 间的连接关系进 | |||
| 97 | | **通信模型** | 单边操作、双边操作(需两端配合) | 单边操作(只需一端发起) | | 97 | | **通信模型** | 单边操作、双边操作(需两端配合) | 单边操作(只需一端发起) | |
| 98 | | **适用协议** | RoCE、UB | UB_MEM、HCCS | | 98 | | **适用协议** | RoCE、UB | UB_MEM、HCCS | |
| 99 | 99 | ||
| 100 | -  | 100 | + |
| 101 | + | ||
| 102 | + | ||
| 101 | 103 | ||
| 102 | > 选择哪种语义取决于底层协议与场景需求 | 104 | > 选择哪种语义取决于底层协议与场景需求 |
| 103 | 105 | ||
| @@ -0,0 +1,3 @@ | |||
| 1 | +version https://git-lfs.github.com/spec/v1 | ||
| 2 | +oid sha256:517af14b0d7708b82eb070d32323519ef7e63cfcbd29581d60c8dd57f91a33dc | ||
| 3 | +size 48464 | ||
| @@ -23,13 +23,13 @@ | |||
| 23 | 23 | ||
| 24 | 1. **安装驱动与固件(运行态依赖)** | 24 | 1. **安装驱动与固件(运行态依赖)** |
| 25 | 25 | ||
| 26 | - 驱动与固件的下载和安装操作请参考《[CANN软件安装指南](https://www.hiascend.com/document/redirect/CannCommunityInstWizard)》中“准备软件包”和“安装NPU驱动和固件”章节。驱动与固件是运行态依赖,若仅编译本项目源码,可以不安装。 | 26 | + 驱动与固件的下载和安装操作请参考《[CANN软件安装](https://www.hiascend.com/document/redirect/CannCommunityInstWizard)》中“准备软件包”和“安装NPU驱动和固件”章节。驱动与固件是运行态依赖,若仅编译本项目源码,可以不安装。 |
| 27 | 27 | ||
| 28 | 2. **安装CANN软件包** | 28 | 2. **安装CANN软件包** |
| 29 | 29 | ||
| 30 | - **场景1:体验master版本能力或基于master版本进行开发** | 30 | - **场景1:体验master版本能力或基于master版本进行开发** |
| 31 | 31 | ||
| 32 | - 请单击[下载链接](https://ascend.devcloud.huaweicloud.com/artifactory/cann-run-mirror/software/master/),选择最新时间版本,并根据产品型号和环境架构下载对应软件包。安装命令如下,更多指导参考《[CANN软件安装指南](https://www.hiascend.com/document/redirect/CannCommunityInstWizard)》。 | 32 | + 请单击[下载链接](https://ascend.devcloud.huaweicloud.com/artifactory/cann-run-mirror/software/master/),选择最新时间版本,并根据产品型号和环境架构下载对应软件包。安装命令如下,更多指导参考《[CANN软件安装](https://www.hiascend.com/document/redirect/CannCommunityInstWizard)》。 |
| 33 | 33 | ||
| 34 | 1. 安装CANN Toolkit开发套件包。 | 34 | 1. 安装CANN Toolkit开发套件包。 |
| 35 | 35 | ||
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | 1. 安装驱动固件与CANN软件包。 | 3 | 1. 安装驱动固件与CANN软件包。 |
| 4 | 4 | ||
| 5 | - HCCL通信算子的开发使用依赖CANN软件包,CANN软件包的详细安装步骤请参考《[CANN 软件安装指南](https://hiascend.com/document/redirect/CannCommunityInstSoftware)》。 | 5 | + HCCL通信算子的开发使用依赖CANN软件包,CANN软件包的详细安装步骤请参考《[CANN软件安装](https://hiascend.com/document/redirect/CannCommunityInstSoftware)》。 |
| 6 | 6 | ||
| 7 | 2. 设置环境变量。 | 7 | 2. 设置环境变量。 |
| 8 | 8 | ||
| @@ -26,14 +26,14 @@ | |||
| 26 | 26 | ||
| 27 | 本样例支持以下产品,集群拓扑为单机 2 卡: | 27 | 本样例支持以下产品,集群拓扑为单机 2 卡: |
| 28 | 28 | ||
| 29 | -- Ascend 950PR/Ascend 950DT | 29 | +- Ascend 950PR&950DT系列产品 |
| 30 | 30 | ||
| 31 | 本样例支持以下产品,集群拓扑为单机 8 卡: | 31 | 本样例支持以下产品,集群拓扑为单机 8 卡: |
| 32 | 32 | ||
| 33 | -- Atlas A3 训练系列产品/Atlas A3 推理系列产品 | 33 | +- Atlas A3系列产品 |
| 34 | -- Atlas A2 训练系列产品 | 34 | +- Atlas A2系列产品 |
| 35 | -- Atlas 训练系列产品 | 35 | +- Atlas训练系列产品 |
| 36 | -- Atlas 推理系列产品 | 36 | +- Atlas推理系列产品 |
| 37 | 37 | ||
| 38 | ### 软件依赖 | 38 | ### 软件依赖 |
| 39 | 39 | ||
| @@ -73,7 +73,7 @@ make | |||
| 73 | make test N=${RANK_SIZE} | 73 | make test N=${RANK_SIZE} |
| 74 | ``` | 74 | ``` |
| 75 | 75 | ||
| 76 | -其中,`RANK_SIZE` 为集群设备数量。针对Ascend 950PR/Ascend 950DT, `RANK_SIZE` 为 2,其他系列产品为8。 | 76 | +其中,`RANK_SIZE` 为集群设备数量。针对Ascend 950PR&950DT系列产品, `RANK_SIZE` 为 2,其他系列产品为8。 |
| 77 | 77 | ||
| 78 | > 注意:可通过设置 `HCCL_OP_EXPANSION_MODE` 环境变量配置通信算子的展开模式,不同产品型号支持的范围可参考[环境变量列表](https://hiascend.com/document/redirect/CannCommunityEnvRef) 中该环境变量的使用方法。 | 78 | > 注意:可通过设置 `HCCL_OP_EXPANSION_MODE` 环境变量配置通信算子的展开模式,不同产品型号支持的范围可参考[环境变量列表](https://hiascend.com/document/redirect/CannCommunityEnvRef) 中该环境变量的使用方法。 |
| 79 | > | 79 | > |
| @@ -26,12 +26,12 @@ This sample demonstrates how to use the `HcclCommInitRootInfoConfig()` API to in | |||
| 26 | 26 | ||
| 27 | This sample supports the following products with a single-node 2-card cluster topology: | 27 | This sample supports the following products with a single-node 2-card cluster topology: |
| 28 | 28 | ||
| 29 | -- Ascend 950PR/Ascend 950DT | 29 | +- Ascend 950PR&950DT products |
| 30 | 30 | ||
| 31 | This sample supports the following products with a single-node 8-card cluster topology: | 31 | This sample supports the following products with a single-node 8-card cluster topology: |
| 32 | 32 | ||
| 33 | -- Atlas A3 training products/Atlas A3 inference products | 33 | +- Atlas A3 products |
| 34 | -- Atlas A2 training products | 34 | +- Atlas A2 products |
| 35 | - Atlas training products | 35 | - Atlas training products |
| 36 | - Atlas inference products | 36 | - Atlas inference products |
| 37 | 37 | ||
| @@ -73,7 +73,7 @@ make | |||
| 73 | make test N=${RANK_SIZE} | 73 | make test N=${RANK_SIZE} |
| 74 | ``` | 74 | ``` |
| 75 | 75 | ||
| 76 | -`RANK_SIZE` is the number of cluster devices. For Ascend 950PR/Ascend 950DT, `RANK_SIZE` is 2. For other product series, it is 8. | 76 | +`RANK_SIZE` is the number of cluster devices. For Ascend 950PR&950DT products, `RANK_SIZE` is 2. For other product series, it is 8. |
| 77 | 77 | ||
| 78 | > Note: You can set the `HCCL_OP_EXPANSION_MODE` environment variable to configure the expansion mode of communication operators. For the range supported by different product models, refer to the usage of this environment variable in the [Environment Variable List](https://hiascend.com/document/redirect/CannCommunityEnvRef). | 78 | > Note: You can set the `HCCL_OP_EXPANSION_MODE` environment variable to configure the expansion mode of communication operators. For the range supported by different product models, refer to the usage of this environment variable in the [Environment Variable List](https://hiascend.com/document/redirect/CannCommunityEnvRef). |
| 79 | > | 79 | > |
| @@ -22,14 +22,14 @@ | |||
| 22 | 22 | ||
| 23 | 本样例支持以下产品,集群拓扑为单机 2 卡: | 23 | 本样例支持以下产品,集群拓扑为单机 2 卡: |
| 24 | 24 | ||
| 25 | -- Ascend 950PR/Ascend 950DT | 25 | +- Ascend 950PR&950DT系列产品 |
| 26 | 26 | ||
| 27 | 本样例支持以下产品,集群拓扑为单机 8 卡: | 27 | 本样例支持以下产品,集群拓扑为单机 8 卡: |
| 28 | 28 | ||
| 29 | -- Atlas A3 训练系列产品/Atlas A3 推理系列产品 | 29 | +- Atlas A3系列产品 |
| 30 | -- Atlas A2 训练系列产品 | 30 | +- Atlas A2系列产品 |
| 31 | -- Atlas 训练系列产品 | 31 | +- Atlas训练系列产品 |
| 32 | -- Atlas 推理系列产品 | 32 | +- Atlas推理系列产品 |
| 33 | 33 | ||
| 34 | ### 软件依赖 | 34 | ### 软件依赖 |
| 35 | 35 | ||
| @@ -69,7 +69,7 @@ make | |||
| 69 | make test N=${RANK_SIZE} | 69 | make test N=${RANK_SIZE} |
| 70 | ``` | 70 | ``` |
| 71 | 71 | ||
| 72 | -其中,`RANK_SIZE` 为集群设备数量。针对Ascend 950PR/Ascend 950DT, `RANK_SIZE` 为 2,其他系列产品为8。 | 72 | +其中,`RANK_SIZE` 为集群设备数量。针对Ascend 950PR&950DT系列产品, `RANK_SIZE` 为 2,其他系列产品为8。 |
| 73 | 73 | ||
| 74 | > 注意:可通过设置 `HCCL_OP_EXPANSION_MODE` 环境变量配置通信算子的展开模式,不同产品型号支持的范围可参考[环境变量列表](https://hiascend.com/document/redirect/CannCommunityEnvRef) 中该环境变量的使用方法。 | 74 | > 注意:可通过设置 `HCCL_OP_EXPANSION_MODE` 环境变量配置通信算子的展开模式,不同产品型号支持的范围可参考[环境变量列表](https://hiascend.com/document/redirect/CannCommunityEnvRef) 中该环境变量的使用方法。 |
| 75 | > | 75 | > |
| @@ -22,12 +22,12 @@ This sample demonstrates how to use the `HcclCommInitClusterInfoConfig()` API to | |||
| 22 | 22 | ||
| 23 | This sample supports the following products with a single-node 2-card cluster topology: | 23 | This sample supports the following products with a single-node 2-card cluster topology: |
| 24 | 24 | ||
| 25 | -- Ascend 950PR/Ascend 950DT | 25 | +- Ascend 950PR&950DT products |
| 26 | 26 | ||
| 27 | This sample supports the following products with a single-node 8-card cluster topology: | 27 | This sample supports the following products with a single-node 8-card cluster topology: |
| 28 | 28 | ||
| 29 | -- Atlas A3 training products/Atlas A3 inference products | 29 | +- Atlas A3 products |
| 30 | -- Atlas A2 training products | 30 | +- Atlas A2 products |
| 31 | - Atlas training products | 31 | - Atlas training products |
| 32 | - Atlas inference products | 32 | - Atlas inference products |
| 33 | 33 | ||
| @@ -69,7 +69,7 @@ make | |||
| 69 | make test N=${RANK_SIZE} | 69 | make test N=${RANK_SIZE} |
| 70 | ``` | 70 | ``` |
| 71 | 71 | ||
| 72 | -`RANK_SIZE` is the number of cluster devices. For Ascend 950PR/Ascend 950DT, `RANK_SIZE` is 2. For other product series, it is 8. | 72 | +`RANK_SIZE` is the number of cluster devices. For Ascend 950PR&950DT products, `RANK_SIZE` is 2. For other product series, it is 8. |
| 73 | 73 | ||
| 74 | > Note: You can set the `HCCL_OP_EXPANSION_MODE` environment variable to configure the expansion mode of communication operators. For the range supported by different product models, refer to the usage of this environment variable in the [Environment Variable List](https://hiascend.com/document/redirect/CannCommunityEnvRef). | 74 | > Note: You can set the `HCCL_OP_EXPANSION_MODE` environment variable to configure the expansion mode of communication operators. For the range supported by different product models, refer to the usage of this environment variable in the [Environment Variable List](https://hiascend.com/document/redirect/CannCommunityEnvRef). |
| 75 | > | 75 | > |
| @@ -26,11 +26,11 @@ | |||
| 26 | 26 | ||
| 27 | 本样例支持以下产品: | 27 | 本样例支持以下产品: |
| 28 | 28 | ||
| 29 | -- Ascend 950PR/Ascend 950DT | 29 | +- Ascend 950PR&950DT系列产品 |
| 30 | -- Atlas A3 训练系列产品/Atlas A3 推理系列产品 | 30 | +- Atlas A3系列产品 |
| 31 | -- Atlas A2 训练系列产品 | 31 | +- Atlas A2系列产品 |
| 32 | -- Atlas 训练系列产品 | 32 | +- Atlas训练系列产品 |
| 33 | -- Atlas 推理系列产品 | 33 | +- Atlas推理系列产品 |
| 34 | 34 | ||
| 35 | ### 软件依赖 | 35 | ### 软件依赖 |
| 36 | 36 | ||
| @@ -26,9 +26,9 @@ This sample demonstrates how to use the `HcclCommInitRootInfoConfig()` API to in | |||
| 26 | 26 | ||
| 27 | This sample supports the following products: | 27 | This sample supports the following products: |
| 28 | 28 | ||
| 29 | -- Ascend 950PR/Ascend 950DT | 29 | +- Ascend 950PR&950DT products |
| 30 | -- Atlas A3 training products/Atlas A3 inference products | 30 | +- Atlas A3 products |
| 31 | -- Atlas A2 training products | 31 | +- Atlas A2 products |
| 32 | - Atlas training products | 32 | - Atlas training products |
| 33 | - Atlas inference products | 33 | - Atlas inference products |
| 34 | 34 | ||