需要为 Ascend 950(arch35)提供 CSR 行内列索引排序能力,包括 workspace 大小查询和 排序执行接口。执行接口应对每个 CSR 行的 csrColInd 进行原地稳定升序排序, 使 P 按相同排列同步重排,并保持 csrRowPtr 不变。
csrColInd
P
csrRowPtr
ops-sparse 仓库 CSRSORT 接口开发任务,对应分支 feat/aclsparse-xcsrsort。
feat/aclsparse-xcsrsort
nnz
aclsparseXcsrsort_bufferSizeExt
aclsparseXcsrsort
2 * nnz * sizeof(int32_t)
csrColInd/P
关联 PR:https://gitcode.com/cann/ops-sparse/merge_requests/72
/assign @chensi79
已完成
Backgroud(背景信息)
需要为 Ascend 950(arch35)提供 CSR 行内列索引排序能力,包括 workspace 大小查询和
排序执行接口。执行接口应对每个 CSR 行的
csrColInd进行原地稳定升序排序,使
P按相同排列同步重排,并保持csrRowPtr不变。Origin(信息来源)
ops-sparse 仓库 CSRSORT 接口开发任务,对应分支
feat/aclsparse-xcsrsort。Benefit / Necessity (价值/作用)
P,让调用方可使用该排列对其他与非零元素关联的数据执行后续处理。
nnz均衡分核,并通过多 run 排序与稳定归并处理超过单次 UB 容量的长行。
Design(设计方案)
aclsparseXcsrsort_bufferSizeExt和aclsparseXcsrsort两个 C 接口,前者返回
2 * nnz * sizeof(int32_t)workspace 大小,后者使用 handle 中的 stream异步执行排序。
启动核数、单 run 规模、归并分片规模和 Sort 临时空间。
nnz均衡分核,将分割点对齐到完整 CSR 行边界;各核的csrColInd、P和 workspace 区间互不重叠,无需核间同步。短行在 UB 内完成单 run 排序;长行先对多个 run 分别排序,再使用 merge-path co-rank 二分定位输出
分片,将对齐前缀与有效数据批量搬入 TQue,对
csrColInd/P两字段执行稳定二路归并,中间结果在原数组和 GM workspace 之间 ping-pong。
行分布、长行多 run、runSize 边界、
csrRowPtr不变、workspace 对齐及异常参数,并更新 API 文档、README 和设计文档。Ascend 950 构建验证通过,设备完整回归 27/27 通过。
关联 PR:https://gitcode.com/cann/ops-sparse/merge_requests/72