已合并
清理pad_v3_grad魔鬼数字、格式等codecheck问题 #3208
ly_cann_coder创建于 6月9日
清理pad_v3_grad魔鬼数字、格式等codecheck问题 #3208
已合并
ly_cann_coder创建于 6月9日
5 个文件变更+68-59
@@ -333,6 +333,7 @@ VC2@ops-math:
333 - ops/ops-math/conversion/pad_v3/examples/333 - ops/ops-math/conversion/pad_v3/examples/
334 - ops/ops-math/conversion/pad_v3/tests/334 - ops/ops-math/conversion/pad_v3/tests/
335 - ops/ops-math/conversion/pad_v3_grad/tests/335 - ops/ops-math/conversion/pad_v3_grad/tests/
336+ - ops/ops-math/conversion/pad_v3_grad/examples/
336 - ops/ops-math/conversion/fills/examples/337 - ops/ops-math/conversion/fills/examples/
337 - ops/ops-math/conversion/fills/tests/338 - ops/ops-math/conversion/fills/tests/
338 - ops/ops-math/conversion/fill/examples/339 - ops/ops-math/conversion/fill/examples/
@@ -638,8 +638,12 @@ void PadV3GradACTiling::GetPaddingsToShape(const gert::Tensor* paddingsTensor)
638{638{
639 OP_LOGD(context_, "Start PadV3GradACTiling GetShapeAttrsInfo GetPaddings GetPaddingsToShape.");639 OP_LOGD(context_, "Start PadV3GradACTiling GetShapeAttrsInfo GetPaddings GetPaddingsToShape.");
640 const T* paddingsValue = paddingsTensor->GetData<T>();640 const T* paddingsValue = paddingsTensor->GetData<T>();
641- const size_t paddingsNum = paddingsTensor->GetShapeSize();641+ const int64_t paddingsNumInt64 = paddingsTensor->GetShapeSize();
642- 642+ if (paddingsNumInt64 < 0) {
643+ OP_LOGE(context_, "Paddings tensor shape size should >= 0, but is %ld, please check.", paddingsNumInt64);
644+ return;
zhanw_coding
zhanw_codingzhanw_coding6月9日

建议加个错误日志,然后返回 GRAPH_FAIL。

likedislike
645+ }
646+ const size_t paddingsNum = static_cast<size_t>(paddingsNumInt64);
643 size_t inputDimNum = paddingsNum / PAIR;647 size_t inputDimNum = paddingsNum / PAIR;
644 paddings_.padFront.SetDimNum(inputDimNum);648 paddings_.padFront.SetDimNum(inputDimNum);
645 paddings_.padBack.SetDimNum(inputDimNum);649 paddings_.padBack.SetDimNum(inputDimNum);
@@ -821,9 +825,6 @@ ge::graphStatus PadV3GradACTiling::DoTiling()
821static ge::graphStatus PadV3GradTiling(gert::TilingContext* context)825static ge::graphStatus PadV3GradTiling(gert::TilingContext* context)
822{826{
823 OP_LOGD(context->GetNodeName(), "PadV3GradTiling running begin");827 OP_LOGD(context->GetNodeName(), "PadV3GradTiling running begin");
824- const PadV3GradCompileInfo* compile_info = reinterpret_cast<const PadV3GradCompileInfo*>(context->GetCompileInfo());
825- OP_CHECK_NULL_WITH_CONTEXT(context, compile_info);
826- OP_LOGD(context->GetNodeName(), "Tiling4Pad dsl compile_info is Null, running AscendC tiling.");
827 PadV3GradACTiling tilingObject(context);828 PadV3GradACTiling tilingObject(context);
828 return tilingObject.DoTiling();829 return tilingObject.DoTiling();
829}830}
@@ -107,10 +107,10 @@ private:
107 uint64_t blockSize_{32};107 uint64_t blockSize_{32};
108 uint64_t vectorSize_{256};108 uint64_t vectorSize_{256};
109 uint32_t cacheLineSize_{256};109 uint32_t cacheLineSize_{256};
110- PadV3GradACTilingData* tilingData_;110+ PadV3GradACTilingData* tilingData_ = nullptr;
111 111 
112 // tiling key112 // tiling key
113- uint64_t tilingKey_;113+ uint64_t tilingKey_{0};
114 uint8_t padMode_{TPL_MODE_REFLECT};114 uint8_t padMode_{TPL_MODE_REFLECT};
115 bool isBigShape_{false};115 bool isBigShape_{false};
116 bool isSimt_{true};116 bool isSimt_{true};
@@ -128,7 +128,7 @@ private:
128 bool isEmptyTensor_{false};128 bool isEmptyTensor_{false};
129 uint16_t inputRank_{0};129 uint16_t inputRank_{0};
130 padV3GradPaddingInfo paddings_;130 padV3GradPaddingInfo paddings_;
131- ge::DataType paramsDtype_;131+ ge::DataType paramsDtype_{ge::DT_UNDEFINED};;
132 uint32_t dtypeBytes_{0};132 uint32_t dtypeBytes_{0};
133 uint64_t bufferSize_{4};133 uint64_t bufferSize_{4};
134 134 
@@ -20,7 +20,10 @@
20#include "pad_v3_grad_struct.h"20#include "pad_v3_grad_struct.h"
21 21 
22namespace PadV3Grad {22namespace PadV3Grad {
23-// constexpr uint32_t BUFFER_NUM = 2;23+constexpr uint8_t UB_AXIS_DATA_IDX = 4;
24+constexpr uint8_t LEFT_PAD_IDX = 1;
25+constexpr uint8_t RIGHT_PAD_IDX = 2;
26+constexpr uint8_t MIRROR_SHAPE_MULTIPLIER = 2;
24using namespace AscendC;27using namespace AscendC;
25 28 
26template <typename T1, typename T2>29template <typename T1, typename T2>
@@ -90,7 +93,7 @@ public:
90 pipe_ = pipe;93 pipe_ = pipe;
91 tilingData_ = tilingData;94 tilingData_ = tilingData;
92 95 
93- mode_ = (Mode == 2); // reflect=1, symmetric=096+ mode_ = (Mode == TPL_MODE_REFLECT); // reflect=1, symmetric=0
94 97 
95 inResStart_ = 0;98 inResStart_ = 0;
96 inSrcStart_ = 0;99 inSrcStart_ = 0;
@@ -226,8 +229,7 @@ private:
226 leftUbStartIdx_ = (mode_ && outIndex_[mUbAxis_] == 0);229 leftUbStartIdx_ = (mode_ && outIndex_[mUbAxis_] == 0);
227 leftUbAddLen_ =230 leftUbAddLen_ =
228 min(mDataLen_, tilingData_->leftPad[mUbAxis_] + mode_ - outIndex_[mUbAxis_]) - leftUbStartIdx_;231 min(mDataLen_, tilingData_->leftPad[mUbAxis_] + mode_ - outIndex_[mUbAxis_]) - leftUbStartIdx_;
229- // 当前块的左pad在输入中的索引232+ inIdxCnt[UB_AXIS_DATA_IDX].inGmIdx[LEFT_PAD_IDX] =
230- inIdxCnt[4].inGmIdx[1] =
231 tilingData_->leftPad[mUbAxis_] + mode_ - (outIndex_[mUbAxis_] + leftUbStartIdx_ + leftUbAddLen_);233 tilingData_->leftPad[mUbAxis_] + mode_ - (outIndex_[mUbAxis_] + leftUbStartIdx_ + leftUbAddLen_);
232 }234 }
233 235 
@@ -236,13 +238,11 @@ private:
236 rightUbStartIdx_ = 0;238 rightUbStartIdx_ = 0;
237 } else {239 } else {
238 rightUbStartIdx_ = (originRightPadStartIndex_ <= outIndex_[mUbAxis_]) ?240 rightUbStartIdx_ = (originRightPadStartIndex_ <= outIndex_[mUbAxis_]) ?
239- 0 :241+ 0 : originRightPadStartIndex_ - outIndex_[mUbAxis_];
240- originRightPadStartIndex_ - outIndex_[mUbAxis_];
241 rightUbAddLen_ = mDataLen_ - rightUbStartIdx_ -242 rightUbAddLen_ = mDataLen_ - rightUbStartIdx_ -
242- (mode_ && outIndex_[mUbAxis_] + mDataLen_ == tilingData_->outShape[mUbAxis_]);243+ (mode_ && outIndex_[mUbAxis_] + mDataLen_ == tilingData_->outShape[mUbAxis_]);
243- inIdxCnt[4].inGmIdx[2] = 2 * tilingData_->outShape[mUbAxis_] + tilingData_->leftPad[mUbAxis_] -244+ inIdxCnt[UB_AXIS_DATA_IDX].inGmIdx[RIGHT_PAD_IDX] = MIRROR_SHAPE_MULTIPLIER * tilingData_->outShape[mUbAxis_] +
244- (outIndex_[mUbAxis_] + rightUbStartIdx_ + rightUbAddLen_ + mode_);245+ tilingData_->leftPad[mUbAxis_] - (outIndex_[mUbAxis_] + rightUbStartIdx_ + rightUbAddLen_ + mode_);
245- // 当前块的右pad在输入中的索引
246 }246 }
247 247 
248 for (uint8_t i = 0; i < mDim_ - 1; ++i) {248 for (uint8_t i = 0; i < mDim_ - 1; ++i) {
@@ -259,7 +259,7 @@ private:
259 tilingData_->outShape[i] - outIndex_[i] - mode_ <= tilingData_->rightPad[i] &&259 tilingData_->outShape[i] - outIndex_[i] - mode_ <= tilingData_->rightPad[i] &&
260 tilingData_->outShape[i] - outIndex_[i] - mode_ > 0) {260 tilingData_->outShape[i] - outIndex_[i] - mode_ > 0) {
261 inIdxCnt[i].inGmIdx[inIdxCnt[i].cnt++] =261 inIdxCnt[i].inGmIdx[inIdxCnt[i].cnt++] =
262- (2 * tilingData_->outShape[i] - outIndex_[i] + tilingData_->leftPad[i] - 1 - mode_) *262+ (MIRROR_SHAPE_MULTIPLIER * tilingData_->outShape[i] - outIndex_[i] + tilingData_->leftPad[i] - 1 - mode_) *
263 tilingData_->inStride[i];263 tilingData_->inStride[i];
264 }264 }
265 }265 }
@@ -586,7 +586,6 @@ private:
586 WaitFlag<EVENT>(EVENT_ID0);586 WaitFlag<EVENT>(EVENT_ID0);
587 }587 }
588 }588 }
589- 
590}; // 类589}; // 类
591 590 
592} // namespace PadV3Grad591} // namespace PadV3Grad
@@ -44,6 +44,15 @@
44namespace PadV3Grad {44namespace PadV3Grad {
45using namespace AscendC;45using namespace AscendC;
46 46 
47+constexpr static int64_t MIN_DIM_FOR_H_PAD = 2;
48+constexpr static int64_t MIN_DIM_FOR_C_PAD = 3;
49+constexpr static int64_t MIN_DIM_FOR_N_PAD = 4;
50+constexpr static int32_t MIN_DIM_FOR_D5_PAD = 5;
51+ 
52+constexpr static int32_t CAST_SPACE_MULTIPLIER = 2;
53+constexpr static int32_t MIRROR_BOUNDARY_OFFSET_1 = 1;
54+constexpr static int32_t MIRROR_BOUNDARY_OFFSET_2 = 2;
55+ 
47struct PadGradNormalParam {56struct PadGradNormalParam {
48 uint32_t padWI; // grad_y W (padded)57 uint32_t padWI; // grad_y W (padded)
49 uint32_t padWO; // grad_x W (original)58 uint32_t padWO; // grad_x W (original)
@@ -122,7 +131,7 @@ public:
122 if constexpr (IsSameType<T, PromoteDataT>::value) {131 if constexpr (IsSameType<T, PromoteDataT>::value) {
123 tmpBufTileSize_ = tilingData_->outTileSize * sizeof(T);132 tmpBufTileSize_ = tilingData_->outTileSize * sizeof(T);
124 } else {133 } else {
125- tmpBufTileSize_ = 2 * tilingData_->outTileSize * sizeof(T);134+ tmpBufTileSize_ = CAST_SPACE_MULTIPLIER * tilingData_->outTileSize * sizeof(T);
126 }135 }
127 input_.SetGlobalBuffer((__gm__ T*)grad_y);136 input_.SetGlobalBuffer((__gm__ T*)grad_y);
128 output_.SetGlobalBuffer((__gm__ T*)grad_x);137 output_.SetGlobalBuffer((__gm__ T*)grad_x);
@@ -146,20 +155,24 @@ public:
146 inCopyLen_[i] = tilingData_->inShape[i];155 inCopyLen_[i] = tilingData_->inShape[i];
147 }156 }
148 // 检查 H 维度是否有 padding157 // 检查 H 维度是否有 padding
149- if (dimNum_ >= 2) {158+ if (dimNum_ >= MIN_DIM_FOR_H_PAD) {
150- has2DPadding = (tilingData_->leftPad[dimNum_ - 2] > 0 || tilingData_->rightPad[dimNum_ - 2] > 0);159+ has2DPadding = (tilingData_->leftPad[dimNum_ - MIN_DIM_FOR_H_PAD] > 0 ||
160+ tilingData_->rightPad[dimNum_ - MIN_DIM_FOR_H_PAD] > 0);
151 }161 }
152 // 检查 C 维度是否有 padding162 // 检查 C 维度是否有 padding
153- if (dimNum_ >= 3) {163+ if (dimNum_ >= MIN_DIM_FOR_C_PAD) {
154- has3DPadding = (tilingData_->leftPad[dimNum_ - 3] > 0 || tilingData_->rightPad[dimNum_ - 3] > 0);164+ has3DPadding = (tilingData_->leftPad[dimNum_ - MIN_DIM_FOR_C_PAD] > 0 ||
165+ tilingData_->rightPad[dimNum_ - MIN_DIM_FOR_C_PAD] > 0);
155 }166 }
156 // 检查 N 维度是否有 padding167 // 检查 N 维度是否有 padding
157- if (dimNum_ >= 4) {168+ if (dimNum_ >= MIN_DIM_FOR_N_PAD) {
158- has4DPadding = (tilingData_->leftPad[dimNum_ - 4] > 0 || tilingData_->rightPad[dimNum_ - 4] > 0);169+ has4DPadding = (tilingData_->leftPad[dimNum_ - MIN_DIM_FOR_N_PAD] > 0 ||
170+ tilingData_->rightPad[dimNum_ - MIN_DIM_FOR_N_PAD] > 0);
159 }171 }
160 // 检查第5维是否有 padding172 // 检查第5维是否有 padding
161- if (dimNum_ >= 5) {173+ if (dimNum_ >= MIN_DIM_FOR_D5_PAD) {
162- has5DPadding = (tilingData_->leftPad[dimNum_ - 5] > 0 || tilingData_->rightPad[dimNum_ - 5] > 0);174+ has5DPadding = (tilingData_->leftPad[dimNum_ - MIN_DIM_FOR_D5_PAD] > 0 ||
175+ tilingData_->rightPad[dimNum_ - MIN_DIM_FOR_D5_PAD] > 0);
163 }176 }
164 }177 }
165 __aicore__ inline void Process()178 __aicore__ inline void Process()
@@ -175,7 +188,6 @@ public:
175 uint32_t endIdx = (blockIdx_ + 1L) * ubPerCount;188 uint32_t endIdx = (blockIdx_ + 1L) * ubPerCount;
176 endIdx = (endIdx < ubTotalCount ? endIdx : ubTotalCount);189 endIdx = (endIdx < ubTotalCount ? endIdx : ubTotalCount);
177 190 
178-
179 PadGradNormalParam padParam = {191 PadGradNormalParam padParam = {
180 .padWI = padWInLength_, // grad_y W192 .padWI = padWInLength_, // grad_y W
181 .padWO = padWOutLength_, // grad_x W193 .padWO = padWOutLength_, // grad_x W
@@ -425,17 +437,17 @@ private:
425 }437 }
426 438 
427 // 2. C 维度镜像 (如果 dimNum_ >= 3 且 C 有 padding)439 // 2. C 维度镜像 (如果 dimNum_ >= 3 且 C 有 padding)
428- if (dimNum_ >= 3 && has3DPadding) {440+ if (dimNum_ >= MIN_DIM_FOR_C_PAD && has3DPadding) {
429 ProcessCDimMirror(lineAddr, srcLocal, globalH, inW);441 ProcessCDimMirror(lineAddr, srcLocal, globalH, inW);
430 }442 }
431 443 
432 // 3. N 维度镜像 (如果 dimNum_ >= 4 且 N 有 padding)444 // 3. N 维度镜像 (如果 dimNum_ >= 4 且 N 有 padding)
433- if (dimNum_ >= 4 && has4DPadding) {445+ if (dimNum_ >= MIN_DIM_FOR_N_PAD && has4DPadding) {
434 ProcessNDimMirror(lineAddr, srcLocal, globalH, inW);446 ProcessNDimMirror(lineAddr, srcLocal, globalH, inW);
435 }447 }
436 448 
437 // 4. 第5维镜像 (如果 dimNum_ >= 5 且有 padding)449 // 4. 第5维镜像 (如果 dimNum_ >= 5 且有 padding)
438- if (dimNum_ >= 5 && has5DPadding) {450+ if (dimNum_ >= MIN_DIM_FOR_D5_PAD && has5DPadding) {
439 ProcessDim5Mirror(lineAddr, srcLocal, globalH, inW);451 ProcessDim5Mirror(lineAddr, srcLocal, globalH, inW);
440 }452 }
441 }453 }
@@ -461,17 +473,17 @@ private:
461 }473 }
462 474 
463 // 2. C×H 组合 (需要 C 有 padding 且 H 有 padding)475 // 2. C×H 组合 (需要 C 有 padding 且 H 有 padding)
464- if (dimNum_ >= 3 && has3DPadding && has2DPadding) {476+ if (dimNum_ >= MIN_DIM_FOR_C_PAD && has3DPadding && has2DPadding) {
465 ProcessCxHSubPad(lineAddr, srcLocal, globalH, inW);477 ProcessCxHSubPad(lineAddr, srcLocal, globalH, inW);
466 }478 }
467 479 
468 // 3. N×H 相关组合 (N×H, N×C×H)480 // 3. N×H 相关组合 (N×H, N×C×H)
469- if (dimNum_ >= 4 && has4DPadding) {481+ if (dimNum_ >= MIN_DIM_FOR_N_PAD && has4DPadding) {
470 ProcessNxHSubPad(lineAddr, srcLocal, globalH, inW);482 ProcessNxHSubPad(lineAddr, srcLocal, globalH, inW);
471 }483 }
472 484 
473 // 4. D5×H 相关组合 (D5×H, D5×C×H, D5×N×H, D5×N×C×H)485 // 4. D5×H 相关组合 (D5×H, D5×C×H, D5×N×H, D5×N×C×H)
474- if (dimNum_ >= 5 && has5DPadding) {486+ if (dimNum_ >= MIN_DIM_FOR_D5_PAD && has5DPadding) {
475 ProcessD5xHSubPad(lineAddr, srcLocal, globalH, inW);487 ProcessD5xHSubPad(lineAddr, srcLocal, globalH, inW);
476 }488 }
477 }489 }
@@ -1065,7 +1077,6 @@ private:
1065 1077 
1066 __VEC_SCOPE__1078 __VEC_SCOPE__
1067 {1079 {
1068- // uint32_t remainLen = inW;
1069 AscendC::MicroAPI::MaskReg mask;1080 AscendC::MicroAPI::MaskReg mask;
1070 AscendC::MicroAPI::RegTensor<PromoteDataT> dstReg;1081 AscendC::MicroAPI::RegTensor<PromoteDataT> dstReg;
1071 AscendC::MicroAPI::RegTensor<PromoteDataT> srcUpReg;1082 AscendC::MicroAPI::RegTensor<PromoteDataT> srcUpReg;
@@ -1300,7 +1311,7 @@ private:
1300 if (condN.hasTop) {1311 if (condN.hasTop) {
1301 uint64_t gmAddr = baseGmAddr + condN.mirrorTop * tilingData_->inStride[dimNum_ - CONST4];1312 uint64_t gmAddr = baseGmAddr + condN.mirrorTop * tilingData_->inStride[dimNum_ - CONST4];
1302 CopyAndAddBlockFromGM(tmpLocal[dstOffset], srcLocal, gmAddr, dimCNum, dimHIn, padWI);1313 CopyAndAddBlockFromGM(tmpLocal[dstOffset], srcLocal, gmAddr, dimCNum, dimHIn, padWI);
1303- if (dimNum_ >= 5 && has5DPadding) {1314+ if (dimNum_ >= MIN_DIM_FOR_D5_PAD && has5DPadding) {
1304 ProcessSubPadD5xN_UB4(tmpLocal, srcLocal, condN.mirrorTop, dimCNum, dimHIn, padWI, dstOffset);1315 ProcessSubPadD5xN_UB4(tmpLocal, srcLocal, condN.mirrorTop, dimCNum, dimHIn, padWI, dstOffset);
1305 }1316 }
1306 }1317 }
@@ -1309,7 +1320,7 @@ private:
1309 if (condN.hasBottom) {1320 if (condN.hasBottom) {
1310 uint64_t gmAddr = baseGmAddr + condN.mirrorBottom * tilingData_->inStride[dimNum_ - CONST4];1321 uint64_t gmAddr = baseGmAddr + condN.mirrorBottom * tilingData_->inStride[dimNum_ - CONST4];
1311 CopyAndAddBlockFromGM(tmpLocal[dstOffset], srcLocal, gmAddr, dimCNum, dimHIn, padWI);1322 CopyAndAddBlockFromGM(tmpLocal[dstOffset], srcLocal, gmAddr, dimCNum, dimHIn, padWI);
1312- if (dimNum_ >= 5 && has5DPadding) {1323+ if (dimNum_ >= MIN_DIM_FOR_D5_PAD && has5DPadding) {
1313 ProcessSubPadD5xN_UB4(tmpLocal, srcLocal, condN.mirrorBottom, dimCNum, dimHIn, padWI, dstOffset);1324 ProcessSubPadD5xN_UB4(tmpLocal, srcLocal, condN.mirrorBottom, dimCNum, dimHIn, padWI, dstOffset);
1314 }1325 }
1315 }1326 }
@@ -1325,13 +1336,11 @@ private:
1325 MirrorCondition condD5 = CalcMirrorCondition(1336 MirrorCondition condD5 = CalcMirrorCondition(
1326 globalD5, tilingData_->outShape[dimNum_ - CONST5],1337 globalD5, tilingData_->outShape[dimNum_ - CONST5],
1327 tilingData_->leftPad[dimNum_ - CONST5], tilingData_->rightPad[dimNum_ - CONST5]);1338 tilingData_->leftPad[dimNum_ - CONST5], tilingData_->rightPad[dimNum_ - CONST5]);
1328- 
1329 if (condD5.hasTop) {1339 if (condD5.hasTop) {
1330 uint64_t gmAddr = condD5.mirrorTop * tilingData_->inStride[dimNum_ - CONST5]1340 uint64_t gmAddr = condD5.mirrorTop * tilingData_->inStride[dimNum_ - CONST5]
1331 + mirrorN * tilingData_->inStride[dimNum_ - CONST4];1341 + mirrorN * tilingData_->inStride[dimNum_ - CONST4];
1332 CopyAndAddBlockFromGM(tmpLocal[dstOffset], srcLocal, gmAddr, dimCNum, dimHIn, padWI);1342 CopyAndAddBlockFromGM(tmpLocal[dstOffset], srcLocal, gmAddr, dimCNum, dimHIn, padWI);
1333 }1343 }
1334- 
1335 if (condD5.hasBottom) {1344 if (condD5.hasBottom) {
1336 uint64_t gmAddr = condD5.mirrorBottom * tilingData_->inStride[dimNum_ - CONST5]1345 uint64_t gmAddr = condD5.mirrorBottom * tilingData_->inStride[dimNum_ - CONST5]
1337 + mirrorN * tilingData_->inStride[dimNum_ - CONST4];1346 + mirrorN * tilingData_->inStride[dimNum_ - CONST4];
@@ -1356,13 +1365,13 @@ private:
1356 uint64_t gmAddr = CalcGMAddrWithC(mirrorC);1365 uint64_t gmAddr = CalcGMAddrWithC(mirrorC);
1357 CopyAndAddPlaneFromGM(tmpLocal, srcLocal, gmAddr, dimHIn, padWI, dstOffset);1366 CopyAndAddPlaneFromGM(tmpLocal, srcLocal, gmAddr, dimHIn, padWI, dstOffset);
1358 1367 
1359- if (dimNum_ >= 4 && has4DPadding) {1368+ if (dimNum_ >= MIN_DIM_FOR_N_PAD && has4DPadding) {
1360 ProcessSubPadNxC(tmpLocal, srcLocal, mirrorC, dimHIn, padWI, dstOffset);1369 ProcessSubPadNxC(tmpLocal, srcLocal, mirrorC, dimHIn, padWI, dstOffset);
1361 }1370 }
1362- if (dimNum_ >= 5 && has5DPadding) {1371+ if (dimNum_ >= MIN_DIM_FOR_D5_PAD && has5DPadding) {
1363 ProcessSubPadD5xC(tmpLocal, srcLocal, mirrorC, dimHIn, padWI, dstOffset);1372 ProcessSubPadD5xC(tmpLocal, srcLocal, mirrorC, dimHIn, padWI, dstOffset);
1364 }1373 }
1365- if (dimNum_ >= 5 && has4DPadding && has5DPadding) {1374+ if (dimNum_ >= MIN_DIM_FOR_D5_PAD && has4DPadding && has5DPadding) {
1366 ProcessSubPadNxD5xC(tmpLocal, srcLocal, mirrorC, dimHIn, padWI, dstOffset);1375 ProcessSubPadNxD5xC(tmpLocal, srcLocal, mirrorC, dimHIn, padWI, dstOffset);
1367 }1376 }
1368 }1377 }
@@ -1434,13 +1443,13 @@ private:
1434 const uint32_t sliceSize = dimHIn * padWI;1443 const uint32_t sliceSize = dimHIn * padWI;
1435 1444 
1436 // ========== 主pad: 高维镜像不改变 C 范围 ==========1445 // ========== 主pad: 高维镜像不改变 C 范围 ==========
1437- if (dimNum_ >= 4 && has4DPadding) {1446+ if (dimNum_ >= MIN_DIM_FOR_N_PAD && has4DPadding) {
1438 ProcessMainPadN(tmpLocal, srcLocal, dimCNum, dimHIn, padWI);1447 ProcessMainPadN(tmpLocal, srcLocal, dimCNum, dimHIn, padWI);
1439 }1448 }
1440- if (dimNum_ >= 5 && has5DPadding) {1449+ if (dimNum_ >= MIN_DIM_FOR_D5_PAD && has5DPadding) {
1441 ProcessMainPadD5(tmpLocal, srcLocal, dimCNum, dimHIn, padWI);1450 ProcessMainPadD5(tmpLocal, srcLocal, dimCNum, dimHIn, padWI);
1442 }1451 }
1443- if (dimNum_ >= 5 && has4DPadding && has5DPadding) {1452+ if (dimNum_ >= MIN_DIM_FOR_D5_PAD && has4DPadding && has5DPadding) {
1444 ProcessMainPadNxD5(tmpLocal, srcLocal, dimCNum, dimHIn, padWI);1453 ProcessMainPadNxD5(tmpLocal, srcLocal, dimCNum, dimHIn, padWI);
1445 }1454 }
1446 1455 
@@ -1476,37 +1485,37 @@ private:
1476 const uint32_t hStartInGradY = outIndex_[dimNum_ - CONST2] + leftPadH;1485 const uint32_t hStartInGradY = outIndex_[dimNum_ - CONST2] + leftPadH;
1477 1486 
1478 // C 镜像 (dimNum_ >= 3)1487 // C 镜像 (dimNum_ >= 3)
1479- if (dimNum_ >= 3 && has3DPadding) {1488+ if (dimNum_ >= MIN_DIM_FOR_C_PAD && has3DPadding) {
1480 ProcessMainPadC_UB2(tmpLocal, srcLocal, dimHNum, padWI, hStartInGradY);1489 ProcessMainPadC_UB2(tmpLocal, srcLocal, dimHNum, padWI, hStartInGradY);
1481 }1490 }
1482 1491 
1483 // N 镜像 (dimNum_ >= 4)1492 // N 镜像 (dimNum_ >= 4)
1484- if (dimNum_ >= 4 && has4DPadding) {1493+ if (dimNum_ >= MIN_DIM_FOR_N_PAD && has4DPadding) {
1485 ProcessMainPadN_UB2(tmpLocal, srcLocal, dimHNum, padWI, hStartInGradY);1494 ProcessMainPadN_UB2(tmpLocal, srcLocal, dimHNum, padWI, hStartInGradY);
1486 }1495 }
1487 1496 
1488 // D5 镜像 (dimNum_ >= 5)1497 // D5 镜像 (dimNum_ >= 5)
1489- if (dimNum_ >= 5 && has5DPadding) {1498+ if (dimNum_ >= MIN_DIM_FOR_D5_PAD && has5DPadding) {
1490 ProcessMainPadD5_UB2(tmpLocal, srcLocal, dimHNum, padWI, hStartInGradY);1499 ProcessMainPadD5_UB2(tmpLocal, srcLocal, dimHNum, padWI, hStartInGradY);
1491 }1500 }
1492 1501 
1493 // C×N 组合 (dimNum_ >= 4)1502 // C×N 组合 (dimNum_ >= 4)
1494- if (dimNum_ >= 4 && has3DPadding && has4DPadding) {1503+ if (dimNum_ >= MIN_DIM_FOR_N_PAD && has3DPadding && has4DPadding) {
1495 ProcessMainPadCxN_UB2(tmpLocal, srcLocal, dimHNum, padWI, hStartInGradY);1504 ProcessMainPadCxN_UB2(tmpLocal, srcLocal, dimHNum, padWI, hStartInGradY);
1496 }1505 }
1497 1506 
1498 // C×D5 组合 (dimNum_ >= 5)1507 // C×D5 组合 (dimNum_ >= 5)
1499- if (dimNum_ >= 5 && has3DPadding && has5DPadding) {1508+ if (dimNum_ >= MIN_DIM_FOR_D5_PAD && has3DPadding && has5DPadding) {
1500 ProcessMainPadCxD5_UB2(tmpLocal, srcLocal, dimHNum, padWI, hStartInGradY);1509 ProcessMainPadCxD5_UB2(tmpLocal, srcLocal, dimHNum, padWI, hStartInGradY);
1501 }1510 }
1502 1511 
1503 // N×D5 组合 (dimNum_ >= 5)1512 // N×D5 组合 (dimNum_ >= 5)
1504- if (dimNum_ >= 5 && has4DPadding && has5DPadding) {1513+ if (dimNum_ >= MIN_DIM_FOR_D5_PAD && has4DPadding && has5DPadding) {
1505 ProcessMainPadNxD5_UB2(tmpLocal, srcLocal, dimHNum, padWI, hStartInGradY);1514 ProcessMainPadNxD5_UB2(tmpLocal, srcLocal, dimHNum, padWI, hStartInGradY);
1506 }1515 }
1507 1516 
1508 // C×N×D5 组合 (dimNum_ >= 5)1517 // C×N×D5 组合 (dimNum_ >= 5)
1509- if (dimNum_ >= 5 && has3DPadding && has4DPadding && has5DPadding) {1518+ if (dimNum_ >= MIN_DIM_FOR_D5_PAD && has3DPadding && has4DPadding && has5DPadding) {
1510 ProcessMainPadCxNxD5_UB2(tmpLocal, srcLocal, dimHNum, padWI, hStartInGradY);1519 ProcessMainPadCxNxD5_UB2(tmpLocal, srcLocal, dimHNum, padWI, hStartInGradY);
1511 }1520 }
1512 }1521 }
@@ -1690,7 +1699,6 @@ private:
1690 }1699 }
1691 }1700 }
1692 1701 
1693- 
1694 __aicore__ inline void GradAccumulateHighDimBulk_UB4(1702 __aicore__ inline void GradAccumulateHighDimBulk_UB4(
1695 const LocalTensor<PromoteDataT>& tmpLocal, const LocalTensor<T>& srcLocal,1703 const LocalTensor<PromoteDataT>& tmpLocal, const LocalTensor<T>& srcLocal,
1696 uint32_t dimNNum, uint32_t dimCNum, uint32_t dimHIn, uint32_t padWI)1704 uint32_t dimNNum, uint32_t dimCNum, uint32_t dimHIn, uint32_t padWI)
@@ -1698,7 +1706,7 @@ private:
1698 const uint32_t nSliceSize = dimCNum * dimHIn * padWI;1706 const uint32_t nSliceSize = dimCNum * dimHIn * padWI;
1699 1707 
1700 // ========== 主pad: D5 镜像不改变 N 范围 ==========1708 // ========== 主pad: D5 镜像不改变 N 范围 ==========
1701- if (dimNum_ >= 5 && has5DPadding) {1709+ if (dimNum_ >= MIN_DIM_FOR_D5_PAD && has5DPadding) {
1702 ProcessMainPadD5_UB4(tmpLocal, srcLocal, dimNNum, dimCNum, dimHIn, padWI);1710 ProcessMainPadD5_UB4(tmpLocal, srcLocal, dimNNum, dimCNum, dimHIn, padWI);
1703 }1711 }
1704 1712 
@@ -2213,11 +2221,11 @@ private:
2213 (globalPos < leftPad);2221 (globalPos < leftPad);
2214 // 下/右镜像条件2222 // 下/右镜像条件
2215 cond.hasBottom = (modeOffset_ == 0) ?2223 cond.hasBottom = (modeOffset_ == 0) ?
2216- (rightPad > 0 && globalPos >= outDimSize - rightPad - 1 && globalPos <= outDimSize - 2) :2224+ (rightPad > 0 && globalPos >= outDimSize - rightPad - MIRROR_BOUNDARY_OFFSET_1 &&
2217- (rightPad > 0 && globalPos >= outDimSize - rightPad);2225+ globalPos <= outDimSize - MIRROR_BOUNDARY_OFFSET_2) : (rightPad > 0 && globalPos >= outDimSize - rightPad);
2218 // 镜像位置计算2226 // 镜像位置计算
2219 cond.mirrorTop = leftPad - modeOffset_ - globalPos;2227 cond.mirrorTop = leftPad - modeOffset_ - globalPos;
2220- cond.mirrorBottom = leftPad + 2 * outDimSize - 2 + modeOffset_ - globalPos;2228+ cond.mirrorBottom = leftPad + MIRROR_BOUNDARY_OFFSET_2 * outDimSize - MIRROR_BOUNDARY_OFFSET_2 + modeOffset_ - globalPos;
2221 return cond;2229 return cond;
2222 }2230 }
2223 2231