• <xmp id="om0om">
  • <table id="om0om"><noscript id="om0om"></noscript></table>
  • Compute Graph Framework SDK Reference  5.8
    All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
    Data Pipeline

    Node

    For the framework each processing step's functionality is a black box called node. It is an atomic algorithmic unit of execution.

    In order to compose pipelines out of these building blocks they must provide their interface in a uniform way. That interface describes the input data as well as the output data which allows connecting multiple nodes to form a pipeline.

    Port

    An endpoint for input / output data is called a port. Each port has a name to uniquely identify them within a node and is strictly typed to check to which other endpoints it can be connected.

    Pass

    For the efficient utilization of compute resources the execution of a node is broken into individual passes. Each pass is running on a single compute resource, e.g. a CPU core, GPU, DLA. A pass is an atomic unit of execution from a scheduling point of view. Commonly the logic of a pass is not implemented in the node itself but in a DriveWorks modules instead.

    By default all passes of a node are executed sequentially. For custom dependencies between passes within a node see non-sequential passes.

    Node Interface

    Channel

    A connection between two endpoints is called a channel. The channel represents the data flow from the source (commonly an output port of one node) to the destination (commonly an input port of another node). A channel can be configured to use different transport protocols depending on the use case and application layout. Zero-copy transport is supported where possible:

    • In-process shared memory
    • Cross process shared memory
    • Cross Engine (NvSciBuffer)
    • Ethernet-based (Sockets)
    Single Process
    Multi Process
    Multi SoC

    Directed Acyclic Graph (DAG)

    The dataflow forms a directed graph where the CGF nodes are the vertices and the CGF channels are the edges. Each edge represents a data dependency.

    The execution of nodes needs to happen in topological order to ensure data dependencies are fulfilled. For a topological ordering to exist the graph must be acyclic.

    Since in real world application circular data flows are not uncommon, some edges need to be annotated as not being considered a data dependency to break the cycles. The resulting DAG describes the computational pipeline.

    dot_reverse_edge.png
    "Reverse" Edge forming a Cycle

    Graphlet Hierarchy

    The complexity of a DAG naturally scales with the complexity of the application. As such the number of vertices and edges increases. To decompose such a complex graph it can be described as a hierarchy of subgraphs.

    Each subgraph is called a graphlet and commonly encapsulates a functional unit. This not only keeps the complexity of each graphlet manageable but also enables reusing such graphlet - either within the same application or in other applications.

    dot_graphlet_hierarchy.png
    Graphlet Hierarchy

    Component

    From the outside a graphlet is a black box - similar to a node. A graphlet has the same interface: input / output ports and the processing steps are defined by the computational pipeline / the subgraph (rather than node passes). As such a graphlet can not only contain nodes but also other graphlets as vertices of the subgraph. The term component refers to either a node or a graphlet.

    人人超碰97caoporen国产