Merged
修复950 Load2d接口 #4307
UFOunderAdd on Jul 13
修复950 Load2d接口 #4307
Merged
Merged fromUFOunder/asc-devkit_23839.1.0intocann/asc-devkit9.1.0
Total: 1 files changed+4-1
| @@ -99,7 +99,10 @@ __aicore__ inline void LoadData2DL12L0BCal(__cb__ T* dst, __cbuf__ T* src, const | |||
| 99 | uint16_t dstStride = loadDataParam.dstGap + 1; | 99 | uint16_t dstStride = loadDataParam.dstGap + 1; |
| 100 | 100 | ||
| 101 | if (loadDataParam.ifTranspose) { | 101 | if (loadDataParam.ifTranspose) { |
| 102 | - load_cbuf_to_cb(dst, src, mStartPosition, kStartPosition, 1, kStep, srcStride, dstStride, 1); | 102 | + for (uint8_t i = 0; i < kStep; i++) { |
| 103 | + load_cbuf_to_cb( | ||
| 104 | + dst + i * VALUE_512 / sizeof(T) * dstStride, src, mStartPosition, i, 1, 1, srcStride, dstStride, 1); | ||
| 105 | + } | ||
| 103 | } else { | 106 | } else { |
| 104 | load_cbuf_to_cb(dst, src, mStartPosition, kStartPosition, 1, kStep, srcStride, dstStride, 0); | 107 | load_cbuf_to_cb(dst, src, mStartPosition, kStartPosition, 1, kStep, srcStride, dstStride, 0); |
| 105 | } | 108 | } |
🟡 Medium Priority
变更前,
ifTranspose分支调用load_cbuf_to_cb(dst, src, mStartPosition, kStartPosition, 1, kStep, srcStride, dstStride, 1),源起始 K 位置为kStartPosition(即loadDataParam.startIndex)。变更后,循环
for (uint8_t i = 0; i < kStep; i++)以i作为每次调用的 k 位置参数(行104),始终从 0 开始,完全忽略kStartPosition。对比同一文件中未修改的
LoadData2DL12L0ACal(第79-80行),其 transpose 分支仍使用kStartPosition;非 transpose 分支(第107行)也仍使用kStartPosition。当调用方传入非零startIndex时,新的 transpose 路径将从错误的源分形矩阵位置加载数据,导致 L0B 搬入内容错误。虽然典型 B 矩阵 L1→L0B 转置搬运中
startIndex通常为 0(所有示例和默认值均为 0),但LoadData2DParams.startIndex的有效范围是 [0, 65535],接口契约上允许非零值。忽略该参数构成语义正确性问题。修复方向:将行104的
i改为kStartPosition + i,使循环从正确的起始 K 位置开始加载。建议:将 load_cbuf_to_cb 调用中的第4个参数
i改为kStartPosition + i,使循环从正确的起始 K 位置加载。同时需评估是否还需要srcStride参与 k 位置计算(即kStartPosition + i * srcStride),具体取决于 3510 硬件对单次 load_cbuf_to_cb 调用中 srcStride 的语义。