带指定舍入模式的逐元素类型转换。
对每个元素 [object Object] 在有效区域内:
其中 [object Object] 是舍入策略(参见 [object Object])。
同步形式:
[object Object]
[object Object]
[object Object]
声明于 [object Object] 和 [object Object]:
[object Object]
[object Object]
[object Object]和[object Object]必须在形状/有效区域方面兼容,如实现所要求的。- 对于给定的
[object Object],转换[object Object]必须被目标支持。 - 实现说明 (Atlas A2/A3 训练系列产品/Atlas A2/A3 推理系列产品/Ascend 950PR/Ascend 950DT):
- 一种形式接受显式的
[object Object],指定的饱和行为会直接传递给实现。 - 另一种形式不显式给出
[object Object];此时实现会针对具体类型对选择目标定义的默认饱和行为。 - 在CPU实现中,目前仅实现了不显式传入
[object Object]的形式。
- 一种形式接受显式的
- 临时Tile:
- C++ API提供显式传入
[object Object]Tile的重载。在Atlas A2/A3 训练系列产品/Atlas A2/A3 推理系列产品上,当[object Object]用于[object Object]、[object Object]或[object Object]时,PyTorch兼容的非饱和窄化路径会使用该临时Tile。其他转换不需要tmp空间。 - 实现会将
[object Object]转换为[object Object]使用;因此应按字节数来规划tmp Tile大小,而不是按[object Object]的类型理解。 - 下列公式给出按实现使用的32字节向量块粒度向上取整后的最小分配大小。若
[object Object],不会发起需要tmp的转换,所需tmp大小为[object Object]。 - 公共参数:
[object Object]。[object Object]。[object Object],单位为源元素个数。[object Object],[object Object],[object Object]。
[object Object],非饱和 ([object Object]):- 临时结果是第一步
[object Object]转换产生的[object Object]Tile。 - 由于
[object Object]源行受Tile约束保证32字节对齐,[object Object]是以32字节块为单位的源repeat stride。 - 对齐的主区域中,一次调用处理一行,最多处理
[object Object]个repeat,每个repeat为[object Object]个元素: - 尾部区域中,一次调用最多处理
[object Object]行,并使用源行stride。由于向量repeat stride以块为单位,空间范围按32字节块计算: $$ \text{tmpTailBytes} = \begin{cases} 32 \times \left((\min(R, 255) - 1) \times \frac{SS}{8} + \left\lceil\frac{C \bmod 64}{8}\right\rceil\right), & C \bmod 64 > 0 \ 0, & C \bmod 64 = 0 \end{cases} $$ - 该路径所需的最小tmp大小为:
- 对主区域而言,一个紧凑的完整repeat上界是
[object Object]字节;但当[object Object]较大时,尾部会按源行stride写入,所需空间可能更大。
- 临时结果是第一步
[object Object],非饱和 ([object Object]):- 实现按行处理,每行拆分为不超过
[object Object]个元素的子块,并在每个子块之间复用同一段临时缓冲区。对于[object Object],令: - 该路径所需的最小tmp大小为:
- 对任意非空Tile,该路径的形状无关上界为
[object Object]字节。
- 实现按行处理,每行拆分为不超过
[object Object],非饱和 ([object Object]):- 实现同样按不超过
[object Object]个元素的子块处理,并复用同一段256字节临时区域。第一步最多将[object Object]个[object Object]写入字节[object Object];完成[object Object]窄化后,字节[object Object]保存[object Object]值,字节[object Object]被复用为scratch。 [object Object]会前进[object Object]字节,因此它指向同一256字节临时区域的上半部分,不需要额外再分配256字节。- 该路径所需的最小tmp大小为:
- 对任意非空Tile,该路径的形状无关上界为
[object Object]字节。
- 实现同样按不超过
- 覆盖所有tmp-backed TCVT转换的总体最小值:
- 由于
[object Object],对于同一形状,能覆盖所有会使用tmp的TCVT转换路径的最小tmp大小为: - 如果Tile非空,并且half路径使用形状无关的紧凑上界即可,也可写为:
- 由于
- 对于不需要PyTorch兼容tmp-backed路径的转换,或者原生饱和行为已经满足需求时,可以继续使用不带
[object Object]的重载。
- C++ API提供显式传入
说明:
- 关键差异:Atlas A2/A3 训练系列产品/Atlas A2/A3 推理系列产品支持I32 -> FP16(half,deq路径),Ascend 950PR/Ascend 950DT不支持I32 -> FP16。
- Ascend 950PR/Ascend 950DT上不支持FP16 -> FP8_E4M3和FP16 -> FP8_E5M2。
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]