Slice【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit产品支持情况Ascend 950PR/Ascend 950DT支持Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持Atlas 200I/500 A2 推理产品不支持Atlas 推理系列产品AI Core不支持Atlas 推理系列产品Vector Core不支持Atlas 训练系列产品不支持功能说明需要包含的头文件为#include tensor_api/tensor.h。Slice用于从张量指定坐标处切出一个子张量。根据输入的起始坐标coord和切片描述信息info计算新的起始存储位置并构造对应的子张量子张量保持与原张量相同的存储位置类型。函数原型template typename Tensor, typename Coord, typename Info __aicore__ inline constexpr decltype(auto) Slice(Tensor tensor, const Coord coord, const Info info)参数说明表1模板参数说明参数名类型描述Tensor输入张量类型通常为GlobalTensor...或LocalTensor...。Coord输入坐标类型通常为Coord...元组类型。Info输入切片描述类型可以为Shape类型或Layout类型。传入Shape时表示按给定形状截取子张量传入Layout时表示按Layout中的Shape信息截取子张量并保持原有布局模式和Stride结构。表2参数说明参数名类型描述tensor输入待切片的张量对象。coord输入切片起始坐标。info输入切片描述信息。可以传入Shape或Layout。返回值说明返回从coord指定位置开始的子张量对象。返回结果包含新的Layout信息Engine指向切片后的起始位置。约束说明coord的tuple结构必须与当前Tensor的Layout.Shape()结构一致。当info为Shape时info必须是二维Shape当前Tensor的Layout必须为二维或四维。当info为Layout时info必须与当前Tensor的Layout的维度相同。调用示例using namespace AscendC::Te; constexpr uint64_t gmAddr 128; // 示例1按Shape切片 auto layout1 MakeLayout(MakeShape(10, 20), MakeStride(20, 1)); auto tensor1 MakeTensor(MakeMemPtrLocation::GM, float(gmAddr), layout1); auto sub1 Slice(tensor1, MakeCoord(2, 4), MakeShape(4, 8)); // 起始坐标为(2, 4)子张量形状为(4, 8) // 示例2按Layout切片 auto layout2 MakeLayout(MakeShape(10, 20), MakeStride(20, 1)); auto tensor2 MakeTensor(MakeMemPtrLocation::GM, float(gmAddr), layout2); auto sub2 Slice(tensor2, MakeCoord(1, 2), MakeLayout(MakeShape(3, 5), MakeStride(20, 1))); // 从(1, 2)开始切出一个Shape为(3, 5)的子张量并保持Stride结构 // 示例3等价于调用成员函数 auto sub3 tensor2.Slice(MakeCoord(1, 2), MakeShape(3, 5)); // sub3与Slice(tensor2, MakeCoord(1, 2), MakeShape(3, 5))等价【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考