矢量数据类型 - 2023.2 简体中文

Vitis 高层次综合用户指南 (UG1399)

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 简体中文

通过提供矢量数据类型即可对单指令流多数据流 (SIMD) 类型的运算轻松进行建模与综合。许多运算符都重载,以便为矢量类型提供 SIMD 行为。AMD Vitis™ HLS 库可提供 hls::vector<T, N> 类型的参考实现,用于表示单指令流多数据流 (SIMD) 矢量,其定义如下。

  • T:表示矢量保存的元素类型,可以是用户定义的类型,该类型必须提供常用的算术运算。
  • N:矢量包含的元素数量,必须为正整数。
  • T 的位宽和 N 均为 2 的幂整数时,即可实现最佳性能。

Vitis HLS 提供了模板类型 hls::vector,可用于定义 SIMD 操作数。在并行执行这些运算的综合期间,使用此类型执行的所有运算都映射到硬件。这些运算可在 II=1 的流水打拍循环内执行。以下示例显示了如何定义和使用含 8 个整数元素的矢量:

typedef  hls::vector<int, 8> t_int8Vec; 
t_int8Vec intVectorA, intVectorB;
.
.
.
void processVecStream(hls::stream<t_int8Vec> &inVecStream1,hls::stream<t_int8Vec> &inVecStream2, hls::stream<int8Vec> &outVecStream)
{
    for(int i=0;i<32;i++)
    {
        #pragma HLS pipeline II=1
        t_int8Vec aVec = inVecStream1.read();
        t_int8Vec bBec = inVecStream2.read();
        //performs a vector operation on 8 integers in parallel
        t_int8Vec cVec = aVec * bVec;
        outVecStream.write(cVec);
    }
}

如需了解更多信息,请参阅 HLS 矢量库。请参阅 GitHub 上的 Vitis-HLS-Introductory-Examples/Modeling/using_vectors 以获取示例。