CANN社区SoftmaxCrossEntropyWithLogits算子设计

发布时间:2026/6/4 4:24:21

CANN社区SoftmaxCrossEntropyWithLogits算子设计 SoftmaxCrossEntropyWithLogits算子设计文档【免费下载链接】cann-ops-competitions本仓库用于 CANN 开源社区各类竞赛、开源课题、社区任务等课题发布、开发者作品提交和展示。项目地址: https://gitcode.com/cann/cann-ops-competitions一、需求背景1.1 需求来源社区任务03-8要求参考内置TBE SoftmaxCrossEntropyWithLogits在昇腾 NPU 上完成SoftmaxCrossEntropyWithLogits算子的 Ascend C 设计、开发与测试交付。1.2 背景介绍1.2.1 算子目标SoftmaxCrossEntropyWithLogits用于分类训练场景。输入features表示 logits输入labels表示标签分布算子输出每个样本的交叉熵损失loss同时输出对 logits 的梯度backprop。本次设计目标如下功能语义与任务环境中的内置TBE SoftmaxCrossEntropyWithLogits对齐。交付 Ascend C 原生算子工程包含 Host 定义、InferShape、Tiling、AiCore Kernel、aclnn两段式接口、样例与测试框架。面向 Atlas A2 训练系列产品支持FLOAT、FLOAT16、BFLOAT16三类浮点输入输出。按任务环境内置 TBE 基线实现ND二维输入和NCHW四维输入支持features与labels同 shape、同 dtypebackprop与输入同 shapeloss在类别维归约后按 TBE 输出 format 写回。对 TBE 配置中的 dtype、format、rank 和 shape 推导规则进行设计对齐不把任务书明确排除的数据类型和输入广播纳入设计承诺。1.2.2 TBE基线来源说明内置 TBE 算子是本任务的功能、精度与性能对齐基线。基线信息需要在任务 CANN 环境中从以下位置确认基线层次直接路径关键文件 / 内容作用TBE Kernel 实现层/usr/local/Ascend/ascend-toolkit/latest/opp/built-in/op_impl/ai_core/tbe/impl/dynamic/softmax_cross_entropy_with_logits相关实现核对 TBE 的核心计算语义与调度方式算子原型层/usr/local/Ascend/ascend-toolkit/latest/opp/built-in/op_proto/inc/SoftmaxCrossEntropyWithLogits原型声明核对输入、输出、dtype、format 和 shape 推导算子信息库层/usr/local/Ascend/ascend-toolkit/latest/opp/built-in/op_impl/ai_core/tbe/config/ascend910b/SoftmaxCrossEntropyWithLogits配置条目核对 Atlas A2 /ascend910b上的注册与编译配置本工作区已在 CANN 8.5.2、910B3 容器中完成基线探测。探测结论为任务环境内置 TBE 的op_proto/inc/nn_norm_ops.h中保留ND or NHWC、2D/4D等原型描述op_impl/ai_core/tbe/config/ascend910b/aic-ascend910b-ops-info-legacy.json中features/labels/backprop的 format 为NCHW,NDloss的 format 为NHWC,NDop_impl/ai_core/tbe/kernel/config/ascend910b/ops_legacy/softmax_cross_entropy_with_logits.json的动态 kernel 配置列出FLOAT、FLOAT16、BFLOAT16的ND格式aclnnop/aclnn_softmax_cross_entropy_with_logits.h声明 aclnn 入参与出参数据格式支持ND。本设计按 TBE 口径支持FLOAT、FLOAT16、BFLOAT16输入支持二维ND和四维NCHW同形输入loss输出支持ND/NHWCbackprop输出支持ND/NCHW任务书明确排除int64、double与 broadcast因此这三类能力不纳入本次设计。1.2.3 TBE算子现状分析1.2.3.1 支持的数据类型、数据格式与形状本次 Ascend C 设计范围如下参数输入/输出数据类型formatshapefeatures输入FLOAT、FLOAT16、BFLOAT16ND/NCHWND: [N, C]NCHW: [N, C, H, W]labels输入与features一致与features一致与features同 shapeloss输出与features一致与 TBE 输出 format 对齐ND: [N]NCHW: [N, H, W]backprop输出与features一致与features一致与features同 shape其中N表示 batch 数量C表示类别数量H/W表示四维布局下的空间维。features与labels必须同 shape、同 dtype、同 formatloss和backprop的 dtype 必须与features一致。格式边界说明如下来源数据类型与格式口径本设计处理任务书要求对齐原 TBE 数据类型、数据格式明确排除int64、double与 broadcast保留浮点FLOAT/FLOAT16/BFLOAT16不支持 broadcast、整数和双精度TBE proto历史原型文字包含ND or NHWC、2D/4D并保留 broadcast 描述作为原 TBE 背景记录其中 broadcast 已被任务书排除ascend910bops-infofeatures/labels/backprop为NCHW/NDloss为NHWC/ND输入按ND/NCHW支持loss输出 format 按ND/NHWC对齐ascend910bkernel config 与 aclnn 头文件动态 kernel 配置与 aclnn 头文件列出ND作为二维 aclnn 直调路径的基线口径关于审核反馈中的NCHWCANN 8.5.2 的ascend910bops-info 中features/labels输入为NCHW/NDbackprop输出为NCHW/NDloss输出为NHWC/ND原型说明中四维输入对应loss为 3D。因此本设计按 TBE 口径处理四维 layout输入不声明NHWC支持ND使用最后一维为类别维NCHW使用第 1 维为类别维backprop与输入同 shapeloss去除类别维后保留其余维度NCHW [N,C,H,W]对应loss [N,H,W]输出 format 与 TBE 的NHWC/ND元数据对齐。Kernel 侧统一折叠为逻辑[A, R]计算域其中RC为类别归约维A为其余维度乘积。本任务不支持整数输入、不支持双精度输入、不支持features与labels间的 shape 扩展或广播。1.2.3.2 算子数学语义设输入features和labels按 format 折叠为逻辑二维计算域[A, R]其中RC为类别归约维A为 batch 与非类别维乘积。对第a个逻辑样本先求类别维最大值$$ m_a \max_{0 \le r R} x_{a,r}. $$使用稳定 softmax 形式计算指数和$$ s_a \sum_{r0}^{R-1}\exp(x_{a,r} - m_a). $$softmax 概率为$$ p_{a,r} \frac{\exp(x_{a,r} - m_a)}{s_a}. $$loss输出为$$ \text{loss}a -\sum{r0}^{R-1} y_{a,r}\log(p_{a,r}). $$Kernel 中使用等价形式避免直接计算log(softmax)$$ \text{loss}a \sum{r0}^{R-1} y_{a,r}\left(\log(s_a) - (x_{a,r} - m_a)\right). $$backprop输出为$$ \text{backprop}{a,r} p{a,r} - y_{a,r}. $$1.2.3.3 TBE算子计算语义分析TBE / 参考实现的核心调度抽象是把输出backprop的有效计算域折叠为[A, R]其中R是类别归约维A是其余维度乘积。二维ND [N, C]场景下即AN、RC四维NCHW [N, C, H, W]场景下即AN*H*W、RC。本设计沿用该[A, R]抽象Host 侧负责根据 format 做逻辑维度折叠和输出 shape 推导。该算子的计算可以拆为三类操作沿类别维C做ReduceMax得到稳定 softmax 所需的行最大值。沿类别维C做ReduceSum得到指数和以及 loss 归约结果。对逻辑[A, R]元素做逐元素指数、除法、乘法和减法按原 layout 写回backprop并对每个逻辑样本写回loss。由于不同逻辑样本之间没有数据依赖分核主轴选取A维。类别维R决定 UB 组织方式R可完整进入 UB 时使用 FullLoadR较大时使用 SplitR 分段重扫。TBE 基线流程图如下二、需求分析2.1 外部组件依赖不引入新的第三方组件复用开源算子仓已有能力组件用途aclnn两段式接口提供GetWorkspaceSize和执行接口opdev/l0op框架完成参数校验、执行器创建、临时 tensor 分配和 AICore launcher 注册Host tiling 框架读取 shape、dtype 和平台信息生成TilingData与tilingKeyAscend C Kernel在 AiCore 上完成归约、指数、对数、逐元素梯度和写回社区任务构建框架支持ascend910b独立算子构建、UT、样例和 runtime 对比2.2 内部适配模块代码交付采用社区任务独立算子工程组织设计文档、接口文档、Host、Kernel、样例和测试脚本在同一提交目录内保持可追溯关系。当前工程目录职责如下模块对应文件 / 目录设计职责构建入口CMakeLists.txt、build.sh支持ascend910b独立算子构建、清理、UT 和 runtime 测试入口aclnn 文档docs/aclnnSoftmaxCrossEntropyWithLogits.md描述两段式接口、参数、返回值和调用示例aclnn 接口层op_api/aclnn_softmax_cross_entropy_with_logits.cpp参数校验、空 tensor 快速返回、连续化、执行器组装、输出 view copyL0 原生调用层op_api/softmax_cross_entropy_with_logits.cpp分配loss/backprop临时输出并注册 AICore 任务Host 定义op_host/softmax_cross_entropy_with_logits_def.cppdtype、format、AICore 配置和ascend910b注册Shape 推导op_host/softmax_cross_entropy_with_logits_infershape.cpp根据ND/NCHW输入推导loss与backpropshapeTilingop_host/softmax_cross_entropy_with_logits_tiling.cppformat 解析、逻辑[A,R]折叠、分核、UB 规划、FullLoad / SplitR / Empty 分支选择Kernel 入口op_kernel/softmax_cross_entropy_with_logits_apt.cpp根据tilingKey分发 FullLoad、SplitR 或 Empty 执行路径TilingDataop_kernel/softmax_cross_entropy_with_logits_tiling_data.hHost 到 Kernel 的参数结构TilingKeyop_kernel/softmax_cross_entropy_with_logits_tiling_key.h模板 tiling key 声明与选择测试框架tests/ut、tests/runtime、examplesHost UT、aclnn 调用样例、custom/TBE runtime 对比脚本2.3 需求模块设计2.3.1 Ascend C算子原型原生算子输入输出契约名称类别数据类型formatshapefeatures输入FLOAT、FLOAT16、BFLOAT16ND/NCHWND: [N,C]NCHW: [N,C,H,W]labels输入与features一致与features一致与features同 shapeloss输出与features一致与 TBE 输出 format 对齐ND: [N]NCHW: [N,H,W]backprop输出与features一致与features一致与features同 shapeaclnn两段式接口如下aclnnStatus aclnnSoftmaxCrossEntropyWithLogitsGetWorkspaceSize( const aclTensor* features, aclTensor* labels, aclTensor* loss, aclTensor* backprop, uint64_t* workspaceSize, aclOpExecutor** executor); aclnnStatus aclnnSoftmaxCrossEntropyWithLogits( void* workspace, uint64_t workspaceSize, aclOpExecutor* executor, const aclrtStream stream);2.3.2 设计范围与约束类别约束项约束内容硬件范围目标产品Atlas A2 训练系列产品SoC 配置单算子工程默认ascend910b数据类型输入输出FLOAT、FLOAT16、BFLOAT16数据格式输入输出输入ND/NCHWloss输出ND/NHWCbackprop输出ND/NCHWrank支持范围ND二维NCHW四维shape输入关系features与labels同 shapeshape输出关系backprop与输入同 shapeloss去除类别维后保留其余维二维ND输出为[N]dtype输入关系features与labels同 dtypedtype输出关系loss、backprop与features同 dtype非连续 tensor接口层进入原生算子前连续化输出通过ViewCopy写回空 tensor接口层 / Host接口层快速返回Host/Kernel 保留 Empty 分支不支持范围数据类型不支持任务范围外的数据类型不支持范围输入关系不支持features与labels间的 shape 扩展或 broadcast三、需求详细设计3.1 使能方式本设计面向 Ascend C 原生算子工程与aclnn两段式接口调用场景硬件范围为 Atlas A2 训练系列产品。上层调用 / 工具链状态aclnn直调支持TensorFlow / PyTorch 前端适配不作为本任务核心交付ATC 推理不作为本任务核心交付OPAT 调优不作为本任务核心交付3.2 需求总体设计整体链路分为四层aclnn接口层完成非空校验、dtype 校验、shape 校验、空 tensor 快速返回、输入连续化与输出ViewCopy。L0 原生调用层根据featuresshape 分配loss和backprop临时 tensor并把 AICore 算子加入执行器。Host Tiling 层读取 dtype、format、shape 与平台信息根据 layout 确定逻辑A和RC完成按逻辑样本分核、UB 规划和tilingKey选择。AiCore Kernel 层按tilingKey进入 FullLoad、SplitR 或 Empty 分支完成稳定 softmax cross entropy 计算并写回。Host-Tiling-Kernel 策略图如下3.2.1 Host侧设计3.2.1.1 接口校验与规整策略aclnn接口层校验顺序如下features、labels、loss、backprop非空。四个 tensor 的 dtype 均属于支持列表。labels、loss、backprop的 dtype 与features一致。features与labelsformat 为ND或NCHW。features与labelsshape 完全一致。ND输入要求 rank 为 2NCHW输入要求 rank 为 4。lossshape 满足 TBE 类别维归约规则二维ND为[N]四维NCHW为[N,H,W]。backpropshape 与features完全一致。合法输入进入计算前接口层执行若features或labels为空返回空执行器。对features和labels执行Contiguous保证原生 Kernel 面向连续存储。L0 层分配连续临时输出。原生算子完成计算后通过ViewCopy写回用户传入的loss和backprop。3.2.1.2 Shape推导策略设输入 format 为ND时$$ \text{features.shape} \text{labels.shape} [N, C]. $$则输出 shape 为$$ \text{loss.shape} [N], $$$$ \text{backprop.shape} [N, C]. $$设输入 format 为NCHW时$$ \text{features.shape} \text{labels.shape} [N, C, H, W]. $$则backprop与输入同 shapeloss按类别维归约规则去除C维并保留N/H/W$$ \text{backprop.shape} [N, C, H, W],\quad \text{loss.shape} [N, H, W]. $$对于四维 layoutloss的输出 format 与 shape 推导同时对齐 TBE 元数据和原型契约输入为NCHWloss输出 format 为NHWC逻辑上保留 batch 与非类别维去除类别维backprop始终与输入同 shape。以NCHW [2,3,4,5]为例按 TBE 四维loss为 3D 的约定归约类别维后得到逻辑 loss 形状[2,4,5]。Kernel 内部可用[N,1,H,W]形式保存行归约结果以便广播但对外输出 shape 按[N,H,W]校验与写回。Shape 推导要求features与labels同 shape不做 shape 扩展或 broadcast。3.2.1.3 分核策略Host tiling 将输入按 format 折叠为逻辑二维计算域$$ \text{ND}: AN,\quad RC. $$$$ \text{NCHW}: AN\cdot H\cdot W,\quad RC. $$其中A是逻辑样本数是多核并行主轴R是类别维是每个逻辑样本的归约维。由于逻辑样本之间互不依赖分核只按A维进行。设可用 AIV 核数为coreNum$$ \text{useCoreNum} \min(A, \text{coreNum}). $$每核基础行数$$ \text{blockFactor} \left\lceil \frac{A}{\text{useCoreNum}} \right\rceil. $$实际使用核数$$ \text{realCoreNum} \left\lceil \frac{A}{\text{blockFactor}} \right\rceil. $$尾核行数$$ \text{tailBlockFactor} A - \text{blockFactor}\cdot(\text{realCoreNum}-1). $$Kernel 侧根据blockIdx计算本核起始行普通核处理blockFactor行尾核处理tailBlockFactor行。3.2.1.4 UB分块策略设输入类型字节数为$$ b \begin{cases} 4, \text{FLOAT}, \ 2, \text{FLOAT16 或 BFLOAT16}. \end{cases} $$32B对齐下单个 block 能容纳的元素数为$$ \text{perBlock} \frac{32}{b}. $$类别维对齐长度为$$ R_{\text{align}} \left\lceil \frac{R}{\text{perBlock}} \right\rceil \cdot \text{perBlock}. $$FullLoad 路径要求单行完整Ralign能在 UB 中同时容纳输入队列、输出队列和 float32 中间缓冲。估算可容纳行数$$ A_{\text{ub}} \left\lfloor \frac{UB}{M_{AR}M_A} \right\rfloor. $$其中MAR表示按[A, R]组织的输入、输出和中间缓冲开销MA表示行级归约结果开销。当Aub至少能覆盖一个32B对齐粒度时选择 FullLoad。若 FullLoad 不满足 UB 容量要求则进入 SplitR。SplitR 固定按较小的Atile 处理行剩余 UB 用于分段容纳类别维$$ \text{rLoopTime} \left\lceil \frac{R}{\text{rUbNumFactor}} \right\rceil. $$尾段有效长度为$$ \text{rLoopTile} \begin{cases} \text{rUbNumFactor}, R \bmod \text{rUbNumFactor} 0,\ R \bmod \text{rUbNumFactor}, \text{otherwise}. \end{cases} $$3.2.1.5 tilingKey规划策略tilingKey由模板参数组成schId, featuresBrc, labelsBrc, db本设计不支持features与labels间的 shape 扩展或 broadcast因此featuresBrc和labelsBrc固定使用非扩展路径db暂保留模板位。format 信息由 Host 侧转换为类别维位置、逻辑A/R、GM stride 和输出 shape 参数写入 tilingData。schId分支触发条件作用0FullLoadR维可完整装入 UB单行完整进入 UB 后完成 max、sum、loss、backprop1SplitRFullLoad 容量不足分段重扫R维先保证大C泛化能力2EmptyA0或R0空输入路径快速返回Host 写入SoftmaxCrossEntropyWithLogitsTilingData后执行SetBlockDim(realCoreNum)Kernel 侧根据blockIdx处理本核负责的行块行间互不依赖loss与backprop均由负责对应行的核直接写回。3.2.2 Kernel侧设计3.2.2.1 Kernel入口Kernel 入口读取SoftmaxCrossEntropyWithLogitsTilingData根据schId分发Kernel 分支对应 schId设计职责FullLoad0中小R场景完整逻辑行进入 UB 后计算其中C1、大A小C和非对齐C有专用子路径SplitR1大R场景分段扫描并重算输出Empty2空输入或R0边界场景Kernel 计算流程图如下3.2.2.2 FullLoad路径FullLoad 每次处理若干行和完整R维。单行处理流程如下从 GM 读取当前行features与labels。将输入转为 float32 中间值。执行ReduceMax得到m_n。计算z features - m_n。计算exp(z)。执行ReduceSum得到s_n。计算backprop exp(z) / s_n - labels并写回。计算lossPart labels * (log(s_n) - z)。对lossPart做ReduceSum得到loss[n]并写回。该路径每行只读取一次features和一次labels中间数据保留在 UB 内是当前主要性能路径。针对常见小类别数场景FullLoad 内部进一步细分C1时 softmax 恒为1直接计算backprop 1 - labelsloss 0避免指数、对数和归约。大N小C场景按行块处理并对C2/3/4/5/8等形状使用列紧凑和行级标量复用子路径减少通用Reduce和行级结果展开的固定开销。C非32B对齐时 Host 记录有效列数Kernel 右侧 padding 只参与 UB 对齐不写回无效列保证backprop按原 shape 输出不越界。3.2.2.3 SplitR路径SplitR 面向R维较大、完整行无法同时容纳输入和多个 float32 中间缓冲的场景。该路径使用三阶段分段重扫第一轮按R分段读取features对每段做局部ReduceMax归并为全行最大值m_n。第二轮按R分段读取features计算exp(features - m_n)并累加全行指数和s_n。第三轮按R分段读取features与labels计算并写回backprop同时累加各段 loss 贡献最后写回loss[n]。该路径面向大类别维输入的泛化执行能力设计。相比 FullLoad它增加了 GM 读取次数性能需要在 runtime 对比中单独评估。3.2.2.4 精度策略精度设计如下FLOAT输入以 float32 参与中间计算。FLOAT16和BFLOAT16输入读取后转换为 float32完成max、exp、sum、log、乘法和减法。输出 dtype 与输入 dtype 一致写回前转换回对应类型。使用log(sum) - (features - max)计算 loss避免直接计算log(softmax)。FullLoad 与 SplitR 使用相同数学公式SplitR 的分段累加误差按 AscendOpTest 默认阈值验证。3.2.2.5 Ascend C路径与TBE路径的差异点及原因差异点Ascend C设计选择原因分核主轴按逻辑A维分核每个逻辑样本互不依赖按样本切分同步开销最低UB 组织FullLoad 与 SplitR 两条路径C维大小直接决定完整行能否进入 UB中间精度半精度输入统一转 float32 中间计算softmax cross entropy 对指数和对数敏感loss 公式使用log(sum) - (x - max)提升数值稳定性非连续输入aclnn层连续化后进入原生 KernelKernel 聚焦连续存储和显式 layout stride平台实现面向 Atlas A2 / 910B 目标环境实现任务范围为 Atlas A2 / 910B四、特性交叉分析交叉维度设计关注点应对策略dtype × 中间精度半精度直接执行指数和对数会放大误差统一使用 float32 中间计算写回时转换小A× 小C启动开销占比较高使用 FullLoad按任务小 shape 例外条款分析性能大A× 多核逻辑样本间无依赖按A维分核提高多核覆盖大A× 小C通用 Reduce 和行级结果展开固定开销占比高使用行块专用路径和小C子路径降低无效搬运和重复展开大C× UB 容量完整行无法进入 UB使用 SplitR 三阶段分段重扫非 32B 对齐C搬运和向量计算存在尾段Host 生成对齐 tilingKernel 写回只处理有效元素空 tensor × 普通分核A0或R0会导致分核公式失效接口层快速返回Host/Kernel 保留 Empty 分支format × 类别维位置ND类别维在最后一维NCHW类别维在第 1 维四维loss输出 format 对齐 TBENHWC元数据Host 侧统一折叠为[A,R]并下发 stride 参数非连续输入 × 连续 Kernelview stride 与 Kernel 连续假设不一致aclnn层执行Contiguous与ViewCopyshape 扩展 × Shape 推导输入关系超出任务书要求要求features与labels完全同形不支持 broadcast五、可维可测分析5.1 验收标准与验证口径验收项硬门槛目标值 / 说明功能标准与任务环境内置 TBE 功能一致合法输入下aclnn两段式接口可正常执行精度标准满足 AscendOpTest 默认阈值半精度和 BF16 使用默认容差评估性能标准所有核参与场景性能不低于 TBE 95%以任务环境 TBE 计时为基线小 shape 例外10 us 以下场景若差距不超过 3 us可按任务书例外条款说明需要保留仿真或性能分析材料泛化标准覆盖常规、边界、不同C规模和ND/NCHW输入 format 场景FullLoad 为性能主路径SplitR 为大C兜底路径文档标准README、aclnn 文档、设计文档口径一致不声明任务范围外能力5.2 验证矩阵验证项典型场景验证方式 / 产出dtype 覆盖FLOAT、FLOAT16、BFLOAT16与 TBE / golden 对比loss和backpropformat 覆盖输入ND [N,C]、NCHW [N,C,H,W]输出loss覆盖ND/NHWC覆盖类别维位置、loss shape 和 backprop layout小 shape[1,1]、[1,7]、[7,1]、[1,16]正确性、耗时和小 shape 差值记录常规 shape[16,16]、[64,128]、[256,257]正确性和性能对比四维 shapeNCHW [2,3,4,5]验证类别维归约后的lossshape 和与输入同 shape 的backprop大C[8,2048]、[16,4096]或按 TBE 支持范围选择覆盖 SplitR 路径大A[1024,64]、[4096,32]、NCHW [64,16,8,8]覆盖多核分核非对齐C[17,255]、[21,257]覆盖尾段和32B对齐空 tensor[0,C]、[N,0]验证空路径与 TBE 行为一致非连续输入切片或转置后的 view验证Contiguous ViewCopy语义非法输入dtype 不一致、shape 不一致、非支持 rank/format、broadcast 输入验证错误码和快速失败路径当前交付目录保留 Host UT 与 runtime custom/TBE 对比入口。Host UT 覆盖 InferShape、Tiling 和基础错误路径runtime 用例覆盖 dtype、输入 format、常规 shape、小 shape、四维 shape、非对齐C、多核A、大C、空 tensor、非连续输入和非法输入等场景用于验证loss与backprop的正确性、精度和性能表现。5.3 兼容性分析本设计的兼容性结论如下SoftmaxCrossEntropyWithLogits的正式语义与任务环境内置 TBE 保持一致输入features与labels同 shape、同 dtype、同 formatbackprop与输入同 shapeloss为类别维归约后的 shape。支持FLOAT、FLOAT16、BFLOAT16三类任务范围内 dtype输入支持ND二维[N,C]与NCHW四维 layoutloss输出 format 按 TBE 对齐ND/NHWC。aclnn接口层兼容非连续输入的逻辑 view 语义进入原生 Kernel 前完成连续化输出通过 ViewCopy 写回。兼容空 tensor、小 shape、非对齐C、多核A、四维 layout 和大C输入分别由接口快速返回、FullLoad、小C专用路径、layout stride 和 SplitR 路径覆盖。任务范围外 dtype、rank 和 shape 关系由接口与 Host 侧校验拒绝不进入 Kernel 主执行路径。【免费下载链接】cann-ops-competitions本仓库用于 CANN 开源社区各类竞赛、开源课题、社区任务等课题发布、开发者作品提交和展示。项目地址: https://gitcode.com/cann/cann-ops-competitions创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻