A DPU node is considered a basic element of a network model deployed on the DPU. Each DPU node is associated with input, output, and some parameters. Every DPU node has a unique name to allow APIs exported by Vitis AI to access its information.
There are three types of nodes: boundary input node, boundary output node, and internal node.
- Boundary input node
- A boundary input node is a node that does not have any precursor in the DPU kernel topology; it is usually the first node in a kernel. Sometimes there might be multiple boundary input nodes in a kernel.
- Boundary output node
- A boundary output node is a node that does not have any successor nodes in the DPU kernel topology.
- Internal node
- All other nodes that are not both boundary input nodes and boundary output nodes are considered as internal nodes.
After compilation, VAI_C gives information about the kernel and its
boundary input/output nodes. The following figure shows an example after compiling
Inception-v1. For DPU kernel 0, conv1_7x7_s2
is the
boundary input node, and loss3_classifier
is the
boundary output node.
When using dpuGetInputTensor*/dpuSetInputTensor*
, the nodeName
parameter is required to specify the boundary input node. When a
nodeName
that does not correspond to a valid
boundary input node is used, Vitis AI returns an
error message like:
[DNNDK] Node "xxx" is not a Boundary Input Node for Kernel inception_v1_0.
[DNNDK] Refer to DNNDK user guide for more info about "Boundary Input Node".
Similarly, when using dpuGetOutputTensor*/dpuSetOutputTensor*
, an error similar to the following
is generated when a “nodeName” that does not correspond to a valid boundary output node
is used:
[DNNDK] Node "xxx" is not a Boundary Output Node for Kernel inception_v1_0.
[DNNDK] Please refer to DNNDK user guide for more info about "Boundary Output Node".