购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.2 数据类型

MXMACA C++语言支持所有的C++类型,包括以下几种类型:基础类型(空类型、布尔型、字符型、整型、浮点型)、指针类型、数组类型、枚举类型、联合体类型、结构体类型、类类型、函数类型。另外,针对浮点型,MXMACA C++语言新增了IEEE 754标准规定的半精度类型half、half2,和为深度学习提供的bfloat16、bfloat162类型。

4.2.1 C++语言基础类型

C++语言为程序员提供了种类丰富的内置数据类型和用户自定义的数据类型,其中最主要的是七种C++语言的基本数据类型,见表4-1。

表4-1 C++语言的基本数据类型

一些基本的数据类型(如signed、unsigned、short、long)可以使用一个或多个类型的限定符来进行修饰。每个基本的数据类型都有相应的对齐要求,见表4-2。

表4-2 基本数据类型及对齐要求

续表

4.2.2 half类型

half类型是一种遵循IEEE 754标准的新的16位浮点格式。其中,16位half格式被称为binary16,指数位为5位,其可以表示的值的范围为-65504~65504,大于1的最小值为1+1/1024。

IEEE 754标准规定了binary16的格式规范(见图4-1)。

● 符号位(Sign Bit):1比特。

● 指数位宽(Exponent Width):5比特。

● 尾数精度(Significand Precision):11比特(有10比特被显式存储)。

图4-1 半精度格式示意图

根据IEEE 754标准,当指数位不全为0时,即假定隐藏的起始位为1。于是,尾数显示为10比特,但总精度为11比特。

half2类型是half类型的向量形式。half2类型由2个half类型构成,每个half类型实例占用16比特内存空间,故half2类型实例共占用32比特内存空间。

4.2.3 bfloat类型

bfloat16类型是一种半精度的浮点数格式,可以通过截断float的后16比特得到。从编码角度来说,除了尾数比float少16比特,bfloat16和float并无差别,可以被视为用精度换内存的float。

bfloat16类型的内存结构如图4-2所示。

● 符号位(Sign Bit):1比特。

● 指数位宽(Exponent Width):8比特。

● 尾数精度(Significand Precision):8比特(有7比特被显式存储)。

在MXMACA中,bfloat16类型的实现名称为maca_bfloat16,可在包含头文件maca_bfloat16.h的CPP项目中使用。

图4-2 bfloat16格式示意图

bfloat162是bfloat16的向量形式。bfloat162类型由2个bfloat16类型构成,每个bfloat16类型实例占用16比特内存空间,故bfloat162类型实例共占用32比特内存空间。 LdXIShEBTxFUui9UUo7DJWYVFk5TRkv9HO3LNh3IX1N7qWvlTggkb0oT3XCxlEL+

点击中间区域
呼出菜单
上一章
目录
下一章
×