已合并
清理pad_v3_grad魔鬼数字、格式等codecheck问题 #3208
ly_cann_coder创建于 6月9日
清理pad_v3_grad魔鬼数字、格式等codecheck问题 #3208
已合并
共 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; | ||
| 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() | |||
| 821 | static ge::graphStatus PadV3GradTiling(gert::TilingContext* context) | 825 | static 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 key | 112 | // 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 | 20 | ||
| 21 | 21 | ||
| 22 | namespace PadV3Grad { | 22 | namespace 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; | ||
| 24 | using namespace AscendC; | 27 | using namespace AscendC; |
| 25 | 28 | ||
| 26 | template <typename T1, typename T2> | 29 | template <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=0 | 96 | + 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 PadV3Grad | 591 | } // namespace PadV3Grad |
| @@ -44,6 +44,15 @@ | |||
| 44 | namespace PadV3Grad { | 44 | namespace PadV3Grad { |
| 45 | using namespace AscendC; | 45 | using 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 | + | ||
| 47 | struct PadGradNormalParam { | 56 | struct 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 维度是否有 padding | 157 | // 检查 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 维度是否有 padding | 162 | // 检查 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 维度是否有 padding | 167 | // 检查 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维是否有 padding | 172 | // 检查第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 W | 192 | .padWI = padWInLength_, // grad_y W |
| 181 | .padWO = padWOutLength_, // grad_x W | 193 | .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 | ||
建议加个错误日志,然后返回 GRAPH_FAIL。