华为CANN/opbase OP_OUTSHAPE宏
OP_OUTSHAPE【免费下载链接】opbase本项目是CANN算子库的基础框架库为算子提供公共依赖文件和基础调度能力。项目地址: https://gitcode.com/cann/opbase宏功能针对需要计算结果来确定输出shape的算子如NonZero算子该宏用于存放此类算子输出shape的aclTensor。宏原型OP_OUTSHAPE(x...)参数说明参数输入/输出说明x...输入包含两部分第一个参数是存放输出tensor shape的aclTensor第二个参数是存放需要更新输出shape的tensor索引。约束说明只支持存放一个输出tensor shape的Tensor(outShapeTensor), 其对应shape为(9*需要刷新的tensor个数,)。每个输出tensor的shape占9位其中第一位表示维数剩下8位表示具体的每个维度的具体值。调用示例// 表示算子将输出tensor的shape存放到outShapeTensor中并且用来更新idx0的输出tensor的shape OP_OUTSHAPE({outShapeTensor, 0}); // 刷新多个输出tensor的shape的时候可以参考如下示例,本例中需要更新idx0,3,4三个输出tensor的shape // host侧 Shape outShapeShape{27}; auto outShapeTensor executor-AllocTensor(outShapeShape, DataType::DT_INT64, Format::FORMAT_ND); aclnnStatus ret ADD_TO_LAUNCHER_LIST_AICORE( xxx, OP_INPUT(...), OP_OUTPUT(...), OP_ATTR(...), OP_OUTSHAPE({outShapeTensor, 0}), OP_OUTSHAPE({outShapeTensor, 3}), OP_OUTSHAPE({outShapeTensor, 4}), ); // kernel侧 __aicore__ inline void CopyOutShape(uint64_t dimNums1, uint64_t *dimNums2, uint64_t dimNums3) { LocalTensoruint64_t shapeTensor shapeBuf_.Getuint64_t(); shapeTensor.SetValue(0, 1); // 第一个输出tensor的维度信息 shapeTesnor.SetValue(1, dimNums1); // 第一个输出tensor的第一维的shape值 shapeTensor.SetValue(9, 1); // 第二个输出tensor的维度信息 shapeTensor.SetValue(10, *(dimNums2)); // 第二个输出tensor的第一维的shape值 shapeTensor.SetValue(11, *(dimNums21)); // 第二个输出tensor的第二维的shape值 shapeTensor.SetValue(18, 1); // 第三个输出tensor的维度信息 shapeTesnor.SetValue(19, dimNums3); // 第三个输出tensor的第一维的shape值 ... DataCopyPad(...); }【免费下载链接】opbase本项目是CANN算子库的基础框架库为算子提供公共依赖文件和基础调度能力。项目地址: https://gitcode.com/cann/opbase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考