HF32
特性说明
HF32的核心功能体现为:用户在输入矩阵A和B都为fp32数据类型的场景下,当配置开启HF32开关后,fp32数据在执行矩阵乘法运算前会被转换并舍入为HF32(half-fp32)格式。这种做法可使Mmad(fp32->fp32)接口的计算性能提升至原来的两倍,但会带来一定的精度损失。需要注意的是,尽管中间计算使用HF32格式,最终的运算结果仍以fp32格式输出,以保证后续处理的兼容性。
注意: 启用HF32会引入精度损失,
fp32输入数据会在矩阵乘法运算前转换并舍入为HF32格式。
舍入模式说明:fp32至HF32转换过程中的舍入模式由SetHF32TransMode接口配置。当HF32模式开启且设置TransMode为HF32TransMode::NEAREST_ZERO时,则FP32将以向零靠近的方式四舍五入为HF32;若设置TransMode为HF32TransMode::NEAREST_EVEN时,则FP32将以最接近偶数的方式四舍五入为HF32。

约束说明
- HF32适用于输入矩阵A和B均为
fp32数据类型的Mmad(fp32->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);
