aclCreateTensor
函数功能
创建aclTensor。
函数原型
aclTensor *aclCreateTensor(const int64_t *viewDims, uint64_t viewDimsNum, aclDataType dataType, const int64_t *stride, int64_t offset, aclFormat format, const int64_t *storageDims, uint64_t storageDimsNum, void *tensorData)
参数说明
- aclDataType、aclFormat定义由AscendCL提供,具体参见aclDataType、aclFormat。
- 关于aclTensor的StorageShape和ViewShape:
- ViewShape表示aclTensor的逻辑shape,是Tensor在实际使用时需要用到的大小。
- StorageShape表示aclTensor的实际物理排布shape,是Tensor在内存上实际存在的大小。
举例如下:
- StorageShape为[10, 20]:表示该aclTensor在内存上是按照[10, 20]排布的。
- ViewShape为[2, 5, 20]:在算子使用时,表示该aclTensor可被视为一块[2, 5, 20]的数据使用。
参数名 |
输入/输出 |
说明 |
---|---|---|
viewDims |
输入 |
tensor的ViewShape维度值。 |
viewDimsNum |
输入 |
tensor的ViewShape维度数。 |
dataType |
输入 |
tensor的数据类型。 |
stride |
输入 |
tensor的各个维度取下一个值的步长,取值不支持负数。 |
offset |
输入 |
tensor首元素相对于storage的偏移。 |
format |
输入 |
tensor的数据排布格式。 |
storageDims |
输入 |
tensor的StorageShape维度值。 |
storageDimsNum |
输入 |
tensor的StorageShape维度数。 |
tensorData |
输入 |
tensor在Device侧的存储地址。 |
返回值说明
成功则返回创建好的aclTensor,否则返回nullptr。
参考资源
aclTensor的定义与torch.Tensor相似,由一块连续或非连续的内存地址和一系列描述信息(如stride、offset等)组成。Tensor根据shape、stride、offset信息,可自由取出内存中的数据,也可获得非连续的内存(如图1中y)。
调用示例
- 以图1为例,x tensor创建过程如下:
aclTensor *CteateXTensor() { int64_t viewDims = {2, 4}; int64_t stride = {4, 1}; // 第1维步长4,第2维步长1 int64_t storageDims = {2, 4}; return aclCreateTensor(viewDims, 2, ACL_FLOAT16, stride, 0, ACL_FORMAT_ND, storageDims, 2, nullptr); }
- 以图1为例,x对应的转置x^T tensor创建过程如下:
aclTensor *CreateXTransposedTensor() { int64_t viewDims = {4, 2}; int64_t stride = {1, 4}; // 转置跨度通过stride表示 int64_t storageDims = {2, 4}; return aclCreateTensor(viewDims, 2, ACL_FLOAT16, stride, 0, ACL_FORMAT_ND, storageDims, 2, nullptr); }
父主题: 基础接口