Cast(多类型转float)
产品支持情况
产品 |
是否支持 |
|---|---|
Atlas 350 加速卡 |
√ |
√ |
|
√ |
|
x |
|
x |
|
x |
|
x |
功能说明
将输入数据转换为float类型。
函数原型
- bfloat16_t类型转换为float类型
1__aicore__ inline float Cast(const bfloat16_t& bVal)
- 支持多种数据类型转换为float类型
1 2 3 4 5 6 7
template <typename T, typename U = float, typename = Std::enable_if_t< (Std::is_same<T, bfloat16_t>::value || Std::is_same<T, hifloat8_t>::value || Std::is_same<T, fp8_e5m2_t>::value || Std::is_same<T, fp8_e4m3fn_t>::value || Std::is_same<T, fp4x2_e1m2_t>::value || Std::is_same<T, fp4x2_e2m1_t>::value), void>> __aicore__ constexpr inline U Cast(T bVal)
参数说明
参数名 |
描述 |
|---|---|
T |
操作数数据类型。 Atlas 350 加速卡,支持的数据类型为:fp4x2_e2m1_t、fp4x2_e1m2_t、hifloat8_t、fp8_e5m2_t、fp8_e4m3fn_t、bfloat16_t。 fp4x2_e1m2_t和fp4x2_e2m1_t类型为了满足1byte数据大小,构造时由两个四位标量数据拼接生成。转换时,被转换的是fp4x2_e1m2_t和fp4x2_e2m1_t标量数据中低位4bit的值,即[0:3]位。 |
U |
返回值数据类型,仅支持float。 |
参数名称 |
输入/输出 |
含义 |
|---|---|---|
bVal |
输入 |
待转换的标量数据。 |
返回值说明
转换后的float类型标量数据。
约束说明
无
调用示例
1 2 3 4 | // 将srcLocal的第一个元素通过Cast转换成float类型,并将结果赋值给fValue float fValue = AscendC::Cast(srcLocal.GetValue(0)); // 将标量fValue 填充到dstLocal的前 32 个位置 AscendC::Duplicate(dstLocal, fValue, 32); |
结果示例如下:
1 2 3 4 | 输入数据(srcLocal): [21.3750, 74.0000, 57.2500, ..., 2.4062, 72.5000, 67.5000] 输出数据(dstLocal): [21.375 21.375 21.375 ... 21.375 21.375 21.375] |
1 2 3 4 5 6 | // 如下是一个输入类型fp4x2_e1m2_t的示例: float fValue = AscendC::Cast<T, float>(srcLocal.GetValue(0)); AscendC::Duplicate(dstLocal, fValue, bufferSize); // 输入数据(srcLocal)(二进制表达): [0b10001111 0b10001111 0b10001111 ...] // 输出数据(dstLocal): [-1.75 -1.75 -1.75 ...] |
父主题: 标量计算