数据类型是我们使用C++编程时必须明确的一项内容。针对AI Engine,这一点尤为重要。因为不同的数据类型所支持的运算是不同的。对于标量类型,AI Engine支持标准的8位、16位和32位有符号/无符号整型数据类型,同时也支持32位单精度浮点类型(float)。对于向量类型,AI Engine支持特定的向量,所谓特定是指其长度(元素个数)和宽度(数据位宽)是固定的几种,这源于AI Engine自身的架构。 AI Engine所支持的向量类型如下表所示。不难看出,向量的总位宽无外乎128/256/512/1024-bit这四种。例如,对于int8,宽度为8,长度最小为16(对应总位宽为128),最大为128(对应总位宽为1024)。对于cint32(c是complex的首字母,表示复数),宽度为64,长度最小为2(对应总位宽为128),最大为16(对应总位宽1024)。
为什么向量的总位宽只有这四种呢?这是因为AI Engine内部的向量寄存器位宽也只有这四种,如下图所示。从这个角度而言,尽管C++是高抽象度的编程语言,但针对AI Engine,在编程时仍要考虑AI Engine的架构,编程的过程有点像在C++里写汇编语言。由于向量寄存器的个数是有限的,故向量寄存器属于稀缺资源,如果设计中定义的向量个数超过了向量寄存器的个数,工具会将其映射到AI Engine内的存储器,这时读/写存储器就会有额外的Latency消耗。
如何使用API定义一个向量呢?我们看一个简单的例子: aie::vector《int32, 16》 这里定义了一个宽度为32,长度为16的向量,如下图所示。共16个索引,每个索引对应一个int32整型数据。
AIE(14)—AI Engine API简介
AIE(13)—标量/向量处理单元
AIE(12)—AI Engine架构概览
AIE(11)—评估graph性能
AIE(10)—使用Trace View
AIE(9)—创建包含PL/PS/AIE的Vitis工程(2)
AIE(8)—创建包含PL/PS/AIE的Vitis工程(1)
AIE(7)—理解Runtime Ratio
AIE(6)—用Vitis Analyzer查看AIE编译结果
AIE(5)—针对AI Engine进行编译
AIE(4)—AIE编译器和X86模拟器
AIE(3)—理解AIE编程中的Kernel
AIE(2)—理解AIE编程中的graph
AIE(1)—创建一个简单的AIE工程
揭秘AIE
Vivado ML到底哪些方面利用了机器学习
布线后的设计调试方法
Vivado下如何定制Strategy?
Vivado BDC 怎么用?
SystemVerilog仿真如何生成随机数
Verilog仿真如何生成随机数
为什么VitisHLS报告中Latency显示-?
利用综合技术缓解布线拥塞
Vivado下的管脚分配可以这么做
Vivado Block Design Container
Vivado跟路径相关的错误信息
使用带HBM芯片的注意事项
Vivado Intelligent Design Run(2)
Vivado Intelligent Design Run (1)
Abstract Shell流程分析(2)
Abstract Shell流程分析(1)
Vivado下封装IP基本知识
原文标题:AIE(15)—AI Engine中的数据类型(1)
文章出处:【微信公众号:TeacherGaoFPGAHub】欢迎添加关注!文章转载请注明出处。
全部0条评论
快来发表一下你的评论吧 !