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
loss3_classifier is the boundary output
nodeName parameter is required to specify the boundary input node.
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
[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".