sparse/spmv/arch22/spmv_host.cpp 对 FLOAT 计算类型不限制 outType,分发器却以 OutT=float 写入;如 computeType=FLOAT、valType=I32、outType=I32 被 host 放行,分发器以 float 写入 int32 的 y 缓冲区,造成类型混淆与数据损坏。SPMV_EXTERN 仅实例化 7 种组合。
sparse/spmv/arch22/spmv_host.cpp
outType
OutT=float
computeType=FLOAT
valType=I32
outType=I32
SPMV_EXTERN
涉及文件:
sparse/spmv/arch22/spmv_host.cpp:272
CHECK_RET(computeType != ACL_INT32 || (valType == ACL_INT32 && outType == ACL_INT32), ...);
host 限制 (valType, outType) 落在 SPMV_EXTERN 实例化的 7 种组合内。
您好,感谢反馈,问题确认中。
已修复
一、问题描述(必填)
sparse/spmv/arch22/spmv_host.cpp对 FLOAT 计算类型不限制outType,分发器却以OutT=float写入;如computeType=FLOAT、valType=I32、outType=I32被 host 放行,分发器以 float 写入 int32 的 y 缓冲区,造成类型混淆与数据损坏。SPMV_EXTERN仅实例化 7 种组合。涉及文件:
sparse/spmv/arch22/spmv_host.cpp:272二、问题详情
C-32 | spmv FLOAT 计算类型组合未约束(spmv_host.cpp:272)
CHECK_RET(computeType != ACL_INT32 || (valType == ACL_INT32 && outType == ACL_INT32), ...);三、影响
四、建议修复
host 限制 (valType, outType) 落在 SPMV_EXTERN 实例化的 7 种组合内。