Merged
修复950 Load2d接口 #4307
UFOunderAdd on Jul 13
修复950 Load2d接口 #4307
Merged
UFOunderAdd on Jul 13
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);
atomgit-bot

🟡 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 的语义。

likedislike
Incorrect?
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 }