CANN算子库Transpose API
Transpose
【免费下载链接】docs该仓库用于维护cann公共文档项目地址: https://gitcode.com/cann/docs
产品支持情况
- Ascend 950PR/Ascend 950DT :不支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品 :支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品 :支持
- Atlas 200I/500 A2 推理产品 :不支持
- Atlas 推理系列产品 :支持
- Atlas 训练系列产品 :支持
功能说明
该函数不改变tensor数据的值,而是对tensor进行转置操作。
通过Transpose算子,可以改变tensor在不同维度上的排列顺序,实现对tensor的维度重排。
具体的是将用户传入的输入tensor x的shape按指定维度的排列顺序perm进行转置并输出。
函数原型
输入和输出为不同地址
const aclTensor *Transpose(const aclTensor *x, const aclTensor *y, const aclTensor *perm, aclOpExecutor *executor)输入和输出同一地址
const aclTensor *Transpose(const aclTensor *x, const aclIntArray *perm, aclOpExecutor *executor)
参数说明
| 参数 | 输入/输出 | 说明 |
|---|---|---|
| x | 输入/输出 | 原始输入tensor。输入tensor x需是连续内存数据。数据类型支持FLOAT16、FLOAT、INT8、INT16、INT32、INT64、UINT8、UINT16、UINT32、UINT64、BOOL、BFLOAT16。数据格式支持ND。 |
| y | 输出 | 转置后输出tensor。数据类型和数据格式同x。 |
| perm | 输入 | 整型数组,代表输入tensor x的维度,支持aclIntArray*、aclTensor*类型。最多支持8维转置,取值需在[0, x的维度数量-1]范围内。数据类型支持INT32、INT64。数据格式支持ND。 |
| executor | 输入 | op执行器,包含了算子计算流程。 |
说明:BFLOAT16仅适用于如下产品
- Atlas A2 训练系列产品/Atlas A2 推理系列产品
- Atlas A3 训练系列产品/Atlas A3 推理系列产品
返回值说明
转置成功,返回转置后的tensor;转置失败,返回nullptr。
约束说明
- 最多支持8维转置,即输入x和perm的dim至多为8。
- 输入x和perm的dim维度需要一致。
调用示例
// 标准写法,创建OpExecutor,参数检查 auto uniqueExecutor = CREATE_EXECUTOR(); CHECK_RET(uniqueExecutor.get() != nullptr, ACLNN_ERR_INNER_CREATE_EXECUTOR); // 标准写法,将输入self转换成连续的tensor auto selfContiguous = l0op::Contiguous(self, uniqueExecutor.get()); CHECK_RET(selfContiguous != nullptr, ACLNN_ERR_INNER_NULLPTR); int64_t dims = selfContiguous->GetViewShape().GetDimNum(); int64_t valuePerm[dims] = {0, 2, 1, 3}; // 表示对原始4维的中间2维做转置,即交换1轴和2轴 auto perm = executor->AllocIntArray(valuePerm, dims); selfContiguous = l0op::Transpose(selfContiguous, perm, uniqueExecutor.get());【免费下载链接】docs该仓库用于维护cann公共文档项目地址: https://gitcode.com/cann/docs
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
