下载
中文
注册

Transpose

支持的产品型号

Atlas 训练系列产品

Atlas A2训练系列产品/Atlas 800I A2推理产品

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。

说明:

BFLOAT16适用于如下产品型号:

Atlas A2训练系列产品/Atlas 800I A2推理产品

y

输出

转置后输出tensor。数据类型和数据格式同x。

perm

输入

指定维度的排列顺序,支持aclIntArray*、aclTensor*类型。最多支持8维转置。数据类型支持INT32、INT64。数据格式支持ND。

executor

输入

op执行器,包含了算子计算流程。

返回值说明

转置成功,返回转置后的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, 4};

auto perm = executor->AllocIntArray(valuePerm, dims);
selfContiguous = l0op::Transpose(selfContiguous, perm, uniqueExecutor.get());