默认情况下,连接器会从内核构建单个硬件实例。如果主机程序将多次执行相同内核,比如,为了满足数据处理的需求,那么它必须按顺序在硬件加速器上执行该内核。这可能会影响整体应用性能。但通过自定义内核链接阶段,您即可从单一内核例化多个硬件计算单元 (CU)。这样可以改善性能,因为主机程序现在可以执行多次重叠的内核调用,通过逐一分开运行各计算单元来并发执行内核。
链接期间,可通过在 v++
配置文件中使用 connectivity.nk
选项来创建单一内核的多个 CU。编辑配置文件以包含所需选项,并在 v++
命令行中通过 --config
选项来指定该配置文件,如 v++ 命令 中所述。
例如,对于
vadd
内核,可在配置文件中实现两个硬件实例,如下所示:[connectivity]
#nk=<kernel name>:<number>:<cu_name>,<cu_name>...
nk=vadd:2
其中:
-
<kernel_name>
- 指定要多次例化的内核名称。
-
<number>
- 要在硬件中实现的内核实例或 CU 的数量。
-
<cu_name>,<cu_name>...
- 为指定数量的实例指定实例名称。这是可选项,如果不指定 CU 名称,则默认设为 kernel_1。内核实例之间以逗号分隔。
随后,在
v++
命令行上指定配置文件:v++ --config vadd_config.cfg ...
以下示例显示了
xclbin
二进制文件中的 vadd
内核的 3 个 CU,分别名为 vadd_X
、vadd_Y
和 vadd_Z
:[connectivity]
nk=vadd:3:vadd_X,vadd_Y,vadd_Z