Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.
IndexCheck 是一个 L0 内部算子,用于在索引类 aclnn L2 接口(如 aclnnIndex、aclnnIndexPutV2)执行索引操作前进行索引合法性检查。当索引越界时,算子通过 assert 报错终止程序,防止产生不可预期的结果。
aclnnIndex
aclnnIndexPutV2
当前 IndexCheck 算子仅支持 ASCEND910B 和 ASCEND910_93 平台,尚未适配最新的 ASCEND950 平台。随着 Ascend 950 平台的推广,基于该平台的索引类算子(Index、IndexPutV2 等)缺少前置的越界检查能力,存在运行时不可预期行为的风险。
ASCEND910B
ASCEND910_93
ASCEND950
此外,现有实现对输入的合法性校验不够完善:
bounds
indices
Ascend 950 平台适配需求,由 CANN 算子团队提出。IndexCheck 作为索引类算子的公共前置检查算子,其 950 适配是 aclnnIndex、aclnnIndexPutV2 等算子在 950 平台完整可用性的前置依赖。
GRAPH_FAILED
IndexCheck
SocVersion::ASCEND950
"ascend950"
bounds->GetDataType()
DT_INT64
IsAiCoreSupport
tensor[0]
indices->Size() > 8
MAX_DIM_NUM = 8
IndexCheckTiling::Init
tensorId_ > MAX_TENSOR_NUM
> MAX_DIM_NUM
Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.
Backgroud(背景信息)
IndexCheck 是一个 L0 内部算子,用于在索引类 aclnn L2 接口(如
aclnnIndex、aclnnIndexPutV2)执行索引操作前进行索引合法性检查。当索引越界时,算子通过 assert 报错终止程序,防止产生不可预期的结果。当前 IndexCheck 算子仅支持
ASCEND910B和ASCEND910_93平台,尚未适配最新的ASCEND950平台。随着 Ascend 950 平台的推广,基于该平台的索引类算子(Index、IndexPutV2 等)缺少前置的越界检查能力,存在运行时不可预期行为的风险。此外,现有实现对输入的合法性校验不够完善:
bounds的数据类型是否为 INT64;indices张量列表中各张量的 dtype 是否一致;indices张量数量与维度数上限,极端输入可能导致 tiling 阶段异常。Origin(信息来源)
Ascend 950 平台适配需求,由 CANN 算子团队提出。IndexCheck 作为索引类算子的公共前置检查算子,其 950 适配是
aclnnIndex、aclnnIndexPutV2等算子在 950 平台完整可用性的前置依赖。Benefit / Necessity(价值/作用)
aclnnIndex、aclnnIndexPutV2等上层算子在 950 平台具备索引越界检查能力,提升运行时安全性。boundsdtype、indices dtype 一致性、张量数量上限(8)、维度数上限(8)的校验,提前拦截非法输入,避免后续 kernel 执行时出现不可预期的行为。GRAPH_FAILED,保障算子鲁棒性。Benefit / Necessity (价值/作用)
Design(设计方案)
1. 平台适配
IndexCheck入口的平台判断逻辑中新增SocVersion::ASCEND950。"ascend950",使算子可在新平台上加载对应的 tiling/kernel 配置。2. API 层输入校验(op_api/index_check.cpp)
bounds数据类型校验:bounds->GetDataType()必须为DT_INT64,否则跳过并告警。IsAiCoreSupport中新增 indices 张量 dtype 一致性检查:遍历张量列表,若任一张量 dtype 与tensor[0]不同则返回 false。indices->Size() > 8时跳过并告警。3. Tiling 层硬校验(op_host/index_check_tiling.cpp)
MAX_DIM_NUM = 8常量。IndexCheckTiling::Init中新增tensorId_ > MAX_TENSOR_NUM的错误检查,不满足时返回GRAPH_FAILED。> MAX_DIM_NUM的错误检查,不满足时返回GRAPH_FAILED。