lerp 算子 aclnn 接口(aclnnLerp/aclnnInplaceLerp/aclnnLerps/aclnnInplaceLerps)的空 Tensor 短路判断仅检查了 self:
if (self->IsEmpty()) { return ACLNN_SUCCESS; }
广播规则允许 size=1 的维与 size=0 的维广播(结果为 0 维)。当 self 非空而 end/weight 为空时(如 self={2,1}、end={2,0}、out={2,0}):
仓内广播类算子(aclnn_add、aclnn_s_where、aclnn_addcmul 等)均对所有广播输入做空检查。
• 涉及文件:math/lerp/op_api/aclnn_lerp_tensor.cpp、math/lerp/op_api/aclnn_lerp_scalar.cpp • 影响接口:aclnnLerp、aclnnInplaceLerp、aclnnLerps、aclnnInplaceLerps
以 aclnnLerp 为例,构造广播空输入:self={2,1}(非空)、end={2,0}(空)、weight={2,0}(空)、out={2,0}。CheckShape 通过后 kernel 正常下发,BroadcastTiling 遇 0 维输出返回 GRAPH_FAILED,接口报内部错误。
按空输出语义,self/end/weight 任一输入为空(广播结果为空)时接口应直接返回 ACL_SUCCESS,不报错。
关联 PR:https://gitcode.com/cann/ops-math/pull/5584
/assign @hahaha22
一、问题描述 (必填)
lerp 算子 aclnn 接口(aclnnLerp/aclnnInplaceLerp/aclnnLerps/aclnnInplaceLerps)的空 Tensor 短路判断仅检查了 self:
if (self->IsEmpty()) { return ACLNN_SUCCESS; }广播规则允许 size=1 的维与 size=0 的维广播(结果为 0 维)。当 self 非空而 end/weight 为空时(如 self={2,1}、end={2,0}、out={2,0}):
仓内广播类算子(aclnn_add、aclnn_s_where、aclnn_addcmul 等)均对所有广播输入做空检查。
二、环境信息 (可选)
• 涉及文件:math/lerp/op_api/aclnn_lerp_tensor.cpp、math/lerp/op_api/aclnn_lerp_scalar.cpp
• 影响接口:aclnnLerp、aclnnInplaceLerp、aclnnLerps、aclnnInplaceLerps
三、重现步骤 (可选)
以 aclnnLerp 为例,构造广播空输入:self={2,1}(非空)、end={2,0}(空)、weight={2,0}(空)、out={2,0}。CheckShape 通过后 kernel 正常下发,BroadcastTiling 遇 0 维输出返回 GRAPH_FAILED,接口报内部错误。
四、预期结果 (可选)
按空输出语义,self/end/weight 任一输入为空(广播结果为空)时接口应直接返回 ACL_SUCCESS,不报错。
关联 PR:https://gitcode.com/cann/ops-math/pull/5584