Skip to content

HF32

特性说明

HF32的核心功能体现为:用户在输入矩阵A和B都为fp32数据类型的场景下,当配置开启HF32开关后,fp32数据在执行矩阵乘法运算前会被转换并舍入为HF32(half-fp32)格式。这种做法可使Mmadfp32->fp32)接口的计算性能提升至原来的两倍,但会带来一定的精度损失。需要注意的是,尽管中间计算使用HF32格式,最终的运算结果仍以fp32格式输出,以保证后续处理的兼容性。

注意: 启用HF32会引入精度损失,fp32输入数据会在矩阵乘法运算前转换并舍入为HF32格式。

舍入模式说明:fp32HF32转换过程中的舍入模式由SetHF32TransMode接口配置。当HF32模式开启且设置TransModeHF32TransMode::NEAREST_ZERO时,则FP32将以向零靠近的方式四舍五入为HF32;若设置TransModeHF32TransMode::NEAREST_EVEN时,则FP32将以最接近偶数的方式四舍五入为HF32

图1 HF32数值精度示意图

HF32数值精度示意图

注意,针对Ascend 950PR/Ascend 950DT产品,其HF32格式的尾数位为10位,示意图如图2所示:

图2 Ascend 950PR/Ascend 950DT产品HF32数值精度示意图

Ascend 950PR/Ascend 950DT产品HF32数值精度示意图

约束说明

  • HF32适用于输入矩阵A和B均为fp32数据类型的Mmadfp32->fp32)场景。
  • 使用HF32模式前,需要通过SetHF32Mode开启HF32模式;fp32至HF32转换过程中的舍入模式由SetHF32TransMode配置。

使用示例

使用SetHF32Mode开启或关闭HF32模式,使用SetHF32TransMode配置舍入模式。

C++
using namespace AscendC::Te;

// 开启HF32模式
AscendC::SetHF32Mode(AscendC::HF32Mode::ENABLE);
// 设置转换模式为向零靠近的方式处理
AscendC::SetHF32TransMode(AscendC::HF32TransMode::NEAREST_ZERO);
// Mmad计算代码
MmadParams params(m, n, k, 0, true);
auto atom = MakeMmad(MmadOperation{}, MmadTraitDefault{}).with(params);
Mmad(atom, l0C, l0A, l0B);

// 关闭HF32模式
AscendC::SetHF32Mode(AscendC::HF32Mode::DISABLE);
AscendC::SetHF32TransMode(AscendC::HF32TransMode::NEAREST_EVEN);

免责声明:本站内容由 asc-devkit 仓 master 分支自动编译生成,属于持续开发版本,可能存在缺陷,仅供预览与参考。如需稳定及商用资料,请查阅官方 昇腾社区