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.
- 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.
- A boundary output node is a node that does not have any successor nodes in the DPU kernel topology.
- 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".