如何使用API定义一个向量呢

描述

数据类型是我们使用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)。

API

为什么向量的总位宽只有这四种呢?这是因为AI Engine内部的向量寄存器位宽也只有这四种,如下图所示。从这个角度而言,尽管C++是高抽象度的编程语言,但针对AI Engine,在编程时仍要考虑AI Engine的架构,编程的过程有点像在C++里写汇编语言。由于向量寄存器的个数是有限的,故向量寄存器属于稀缺资源,如果设计中定义的向量个数超过了向量寄存器的个数,工具会将其映射到AI Engine内的存储器,这时读/写存储器就会有额外的Latency消耗。

API

如何使用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】欢迎添加关注!文章转载请注明出处。

  审核编辑:彭菁
 
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分