Hexagon_V65_Programmers_Reference_Manual(4)

Hexagon_V65_Programmers_Reference_Manual(4)

  • 4 数据处理
    • 4.1 数据类型
      • 4.1.1 定点数据
      • 4.1.2 浮点数据
      • 复数数据
      • 4.1.4 矢量数据
    • 4.2 指令选项
      • 4.2.1 分数缩放
      • 4.2.2 饱和
      • 4.2.3 算术舍入
      • 收敛舍入
      • 4.2.5 除法和平方根的缩放

4 数据处理

Hexagon 处理器为处理标量和矢量数据提供了丰富的操作集。

本章概述了以下 Hexagon 处理器指令类提供的操作:

  • XTYPE – 通用数据操作
  • ALU32 – 32 位数据的算术/逻辑运算
注意 有关这些指令类的详细说明,请参见第 11 章。

4.1 数据类型

Hexagon 处理器提供用于处理以下数据类型的操作:

  • 定点数据
  • 浮点数据
  • 复数数据
  • 矢量数据

4.1.1 定点数据

Hexagon 处理器提供处理 8 位、16 位、32 位或 64 位定点数据的操作。 数据可以是整数或小数,也可以是有符号或无符号格式。

4.1.2 浮点数据

Hexagon 处理器提供处理 32 位浮点数的操作。 这些数字以 IEEE 单精度浮点格式存储。

根据 IEEE 标准,某些浮点值被定义为表示正无穷或负无穷,以及非数字 (NaN),它表示没有数学意义的值。

浮点数可以保存在通用寄存器中。

复数数据

Hexagon 处理器提供处理 32 位或 64 位复数数据的操作。

复数包括有符号实部和有符号虚部。 给定两个复数 (a+bi) 和 (c+di),复数乘法运算在一条指令中计算实部 (ac-bd) 和虚部 (ad+bc)。

复数可以打包在一个通用寄存器或寄存器对中。 打包后,虚数部分占据寄存器或寄存器对的最高有效部分。

4.1.4 矢量数据

Hexagon 处理器提供处理 64 位矢量数据的操作。

矢量数据类型将多个数据项(字节、半字或字)打包到 64 位寄存器中。 矢量数据操作在视频和图像处理中很常见。
八个 8 位字节可以打包到一个 64 位寄存器中。

图 4-1 显示了向量字节操作的示例。
Hexagon_V65_Programmers_Reference_Manual(4)_第1张图片
图 4-1 向量字节操作

四个 16 位半字值可以打包在一个 64 位寄存器对中。
图 4-2 显示了向量半字操作的示例。
Hexagon_V65_Programmers_Reference_Manual(4)_第2张图片
图 4-2 向量半字操作

两个 32 位字值可以打包在一个 64 位寄存器对中。
图 4-3 显示了向量字操作的示例。
Hexagon_V65_Programmers_Reference_Manual(4)_第3张图片
图 4-3 向量字操作

4.2 指令选项

一些指令支持可选的缩放、饱和度和舍入。 没有控制这些选项的模式位 - 相反,它们被明确指定为指令名称的一部分。 本节介绍了这些选项。

4.2.1 分数缩放

在小数数据格式中,数据被视为定点小数值,其范围由字长和小数点位置确定。
通过添加 :<<1 说明符在指令中指定分数缩放。 例如:

R3:2 = cmpy(R0,R1):<<1:sat

当两个小数相乘时,必须对乘积进行缩放以恢复原始的小数数据格式。 Hexagon 处理器允许在指令中为 0 和 1 的移位指定乘积的分数缩放。对于 Q1.15 数字应该进行 1 的移位,而对于整数乘法应该进行 0 的移位。

4.2.2 饱和

某些指令以饱和形式提供。 如果饱和算术指令的结果小于最小值,则将结果设置为最小值。 类似地,如果运算的结果大于最大值,则将结果设置为最大值。

通过添加 :sat 说明符在指令中指定饱和度。 例如:
R2 = abs(R1):sat

每当饱和操作饱和到最大值或最小值时,用户状态寄存器(第 2.2.3 节)中的 OVF 位就会置位。 它一直保持设置,直到被控制寄存器传输到 USR 明确清除。 对于向量类型的饱和操作,如果向量的任何单个元素饱和,则设置 OVF。

4.2.3 算术舍入

某些有符号乘法指令支持可选的算术舍入(也称为偏置舍入)。 算术舍入运算采用双精度小数值并将 0x8000 添加到低 16 位(最低有效 16 位半字)。

通过添加 :rnd 说明符在指令中指定舍入。 例如:
R2 = mpy(R1.h,R2.h):rnd

注意 算术舍入会累积数值误差,尤其是当要舍入的数字恰好为 0.5 时。  当除以 2 或平均时,这种情况最常发生。

收敛舍入

为了解决算术舍入中的误差累积问题(第 4.2.3 节),Hexagon 处理器包含四个指令,这些指令通过收敛舍入选项支持正负平均。

这些说明的工作方式如下:

  1. 分别计算 AVG 和 NAVG 的 (A+B) 或 (AB)。
  2. 根据结果的两个最低有效位,添加一个舍入常数,如下所示:
  • 如果两个 LSB 为 00,则加 0
  • 如果两个LSB都是01,加0
  • 如果两个LSB为10,则加0
  • 如果两个 LSB 为 11,则加 1
  1. 将结果右移一位。

4.2.5 除法和平方根的缩放

在 Hexagon 处理器上,浮点除法和平方根运算是使用库函数在软件中实现的。 为了能够有效地执行这些操作,处理器支持乘法累加指令的特殊变体。 这些被命名为比例 FMA。

缩放 FMA 支持对浮点融合乘加指令生成的乘积进行可选缩放。

通过添加 :scale 说明符和谓词寄存器操作数在指令中指定缩放。 例如:
R3 += sfmpy(R0,R1,P2):scale
对于单精度,比例因子是 2 到谓词寄存器内容指定的幂(被视为 8 位二进制补码值)。 对于双精度,谓词寄存器值在用作 2 的幂之前加倍。

注意 Scale FMA 指令不应在除法和平方根库例程之外使用。  不保证 Hexagon 处理器的未来版本将使用相同的语义实现这些指令。  未来的版本仅假定缩放 FMA 的兼容性仅限于除法和平方根库例程的需要。

你可能感兴趣的:(简介,sdk,异构计算相关,c语言,dsp开发)