aclnnNpuFormatCast
产品支持情况
产品 | 是否支持 |
---|---|
[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object] | √ |
[object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object] | √ |
[object Object]Atlas 200I/500 A2 推理产品[object Object] | × |
[object Object]Atlas 推理系列产品 [object Object] | × |
[object Object]Atlas 训练系列产品[object Object] | × |
功能说明
- 算子功能:
- Atlas A2系列产品、Atlas A3系列产品:
- 计算流程:
aclnnNpuFormatCastCalculateSizeAndFormat
根据输入张量srcTensor、数据类型additionalDtype
和目标张量的数据格式dstFormat计算出转换后目标张量dstTensor的shape和实际数据格式,用于构造dstTensor,然后调用aclnnNpuFormatCast
把srcTensor转换为实际数据格式的目标张量dstTensor。
函数原型
必须先调用aclnnNpuFormatCastCalculateSizeAndFormat
计算出dstTensor的shape和实际数据格式,再调用undefined。 两段式接口先调用aclnnNpuFormatCastGetWorkSpaceSize
接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用aclnnNpuFormatCast
接口执行计算。
aclnnStatus aclnnNpuFormatCastCalculateSizeAndFormat(const aclTensor* srcTensor, const int dstFormat, const int additionalDtype, int64_t** dstShape, uint64_t* dstShapeSize, int* actualFormat)
aclnnStatus aclnnNpuFormatCastGetWorkspaceSize(const aclTensor* srcTensor, aclTensor* dstTensor,uint64_t* workspaceSize, aclOpExecutor** executor)
aclnnStatus aclnnNpuFormatCast(void* workspace, uint64_t workspaceSize, aclOpExecutor* executor, aclrtStream stream)
aclnnNpuFormatCastCalculateSizeAndFormat
参数说明
Atlas A2系列产品、Atlas A3系列产品:
- srcTensor(aclTensor*, 计算输入):输入的数据支持连续和非连续的Tensor,支持ND、NZ、NCDHW、NDC1HWC0、FRACTAL_Z_3D。支持的数据类型为INT8, UINT8, FLOAT, FLOAT16, BF16, INT32, UINT32。当数据格式为ND时,支持的shape维度为[2, 6]。
- dstFormat(int, 计算输入):dstTensor的数据格式。支持的数据格式为ND、NZ、NCDHW、NDC1HWC0、FRACTAL_Z_3D。
- additionalDtype(int, 计算输入):转换为FRACTAL_NZundefined时,推断C0大小所使用的基本数据类型。注意:该参数仅支持传入-1,并且默认采用srcTensor的数据类型。
- dstShape(int64_t**, 出参):用于输出dstTensor的shape数组的指针。该指针指向的内存由本接口申请,调用者释放。
- dstShapeSize(uint64_t*, 出参):用于输出dstTensor的shape数组大小的指针。
- actualFormat(int*, 出参):用于输出dstTensor实际数据格式的指针。
返回值:
aclnnStatus:返回状态码,具体参见undefined。
[object Object]
aclnnNpuFormatCastGetWorkspaceSize
参数说明
- Atlas A2系列产品、Atlas A3系列产品:
- srcTensor(aclTensor*, 计算输入):输入的数据只支持连续的Tensor,数据格式支持ND、NZ、NCDHW、NDC1HWC0、FRACTAL_Z_3D。不支持undefined,支持的数据类型:INT8, UINT8, FLOAT, FLOAT16, BF16, INT32, UINT32。ND支持的shape维度:[2, 6]。
- dstTensor(aclTensor*, 计算输入):转换后的目标数据,只支持连续的Tensor。数据格式支持ND、NZ、NCDHW、NDC1HWC0、FRACTAL_Z_3D。数据类型支持INT8, UINT8, FLOAT, FLOAT16, BF16, INT32, UINT32。NZ支持的shape维度:[4, 8],实际为srcTensor的shape维度加2。
- workspaceSize(uint64_t*, 出参):需要在Device侧申请的workspace的大小。
- executor(aclOpExecutor**, 出参):包含算子计算流程的op执行器。
- Atlas A2系列产品、Atlas A3系列产品:
返回值:
aclnnStatus:返回状态码,具体参见undefined。
[object Object]
aclnnNpuFormatCast
参数说明
- workspace(void*, 入参):在Device侧申请的workspace内存地址。
- workspaceSize(uint_64, 入参):在Device侧申请的workspace大小,由第一段接口aclnnNpuFormatCastGetWorkspaceSize获取。
- executor(aclOpExecutor*, 入参):包含算子计算流程的op执行器。
- stream(aclrtStream, 入参):指定执行任务的Stream。
返回值:
aclnnStatus:返回状态码,具体参见undefined。
约束说明
输入和输出支持以下数据类型组合:
Atlas A2系列产品、Atlas A3系列产品:
aclnnNpuFormatCastCalculateSizeAndFormat接口参数:
srcTensor dstFormat additionalDtype actualFormat INT8, UINT8, FLOAT, FLOAT16, BF16, INT32, UINT32 ACL_FORMAT_FRACTAL_NZ(29) -1 ACL_FORMAT_FRACTAL_NZ(29) INT8, UINT8, FLOAT, FLOAT16, BF16, INT32, UINT32 ACL_FORMAT_ND(2) -1 ACL_FORMAT_ND(2) INT8, UINT8, FLOAT, FLOAT16, BF16, INT32, UINT32 ACL_FORMAT_NCDHW(30) -1 ACL_FORMAT_NCDHW(30) INT8, UINT8, FLOAT, FLOAT16, BF16, INT32, UINT32 ACL_FORMAT_NDC1HWC0(32) -1 ACL_FORMAT_NDC1HWC0(32) INT8, UINT8, FLOAT, FLOAT16, BF16, INT32, UINT32 ACL_FRACTAL_Z_3D(33) -1 ACL_FRACTAL_Z_3D(33) aclnnNpuFormatCastGetWorkspaceSize接口:
srcTensor dstTensor数据类型 dstTensor数据格式 INT8, UINT8, FLOAT, FLOAT16, BF16, INT32, UINT32 INT8, UINT8, FLOAT, FLOAT16, BF16, INT32, UINT32 ACL_FORMAT_FRACTAL_NZ(29) INT8, UINT8, FLOAT, FLOAT16, BF16, INT32, UINT32 INT8, UINT8, FLOAT, FLOAT16, BF16, INT32, UINT32 ACL_FORMAT_ND(2) INT8, UINT8, FLOAT, FLOAT16, BF16, INT32, UINT32 INT8, UINT8, FLOAT, FLOAT16, BF16, INT32, UINT32 ACL_FORMAT_NCDHW(30) INT8, UINT8, FLOAT, FLOAT16, BF16, INT32, UINT32 INT8, UINT8, FLOAT, FLOAT16, BF16, INT32, UINT32 ACL_FORMAT_NDC1HWC0(32) INT8, UINT8, FLOAT, FLOAT16, BF16, INT32, UINT32 INT8, UINT8, FLOAT, FLOAT16, BF16, INT32, UINT32 ACL_FRACTAL_Z_3D(33) C0计算方法:
srcTensor的基础类型 C0 ACL_FLOAT(0)、ACL_INT32(3)、ACL_UINT32(8) 8 ACL_FLOAT16(1)、ACL_BF16(27) 16 ACL_INT8(2)、ACL_UINT8(4) 32
当前不支持的特殊场景:
- srcTensor的数据类型和additionalDtype相同,且类型为FLOAT16或BFLOAT16时, 若维度表示为[k, n], 则k为1场景暂不支持。
- 不支持调用当前接口转昇腾亲和undefinedFRACTAL_NZ后, 进行任何能修改tensor的操作, 如contiguous、pad、slice等;
- 当srcTensor的shape后两维任意一维度shape等于1场景,也不允许转昇腾亲和undefinedFRACTAL_NZ后再进行任何修改tensor的操作, 包括transpose。
调用示例
示例代码如下,仅供参考,具体编译和执行过程请参考undefined。
- Atlas A2系列产品、Atlas A3系列产品:
示例代码如下,仅供参考,具体编译和执行过程请参考undefined。[object Object]