| @@ -20,7 +20,8 @@ using namespace AscendC; |
| using namespace AscendC::MicroAPI; | using namespace AscendC::MicroAPI; |
| using AscendC::MicroAPI::MaskReg; | using AscendC::MicroAPI::MaskReg; |
| using AscendC::MicroAPI::RegTensor; | using AscendC::MicroAPI::RegTensor; |
| -using AscendC::MicroAPI::UnalignReg; | +using AscendC::MicroAPI::UnalignRegForLoad; |
| +using AscendC::MicroAPI::UnalignRegForStore; |
| static constexpr int32_t BLOCK_SIZE = 32; | static constexpr int32_t BLOCK_SIZE = 32; |
| static constexpr int32_t FP32_ONE_REPEAT = 64; | static constexpr int32_t FP32_ONE_REPEAT = 64; |
| static constexpr int32_t FLOAT_BYTE_SIZE = 4; | static constexpr int32_t FLOAT_BYTE_SIZE = 4; |
| @@ -97,57 +98,55 @@ __aicore__ inline uint32_t RoundDown(uint32_t x) |
| } | } |
| | |
| template <typename T> | template <typename T> |
| -__aicore__ inline void LoadInputData(RegTensor<float>& dst, __local_mem__ T* src, MaskReg pregLoop, uint32_t srcOffset) | +__aicore__ inline void LoadInputData(RegTensor<float>& dst, __ubuf__ T* src, MaskReg pregLoop, uint32_t srcOffset) |
| { | { |
| if constexpr (IsSameType<T, float>::value) { | if constexpr (IsSameType<T, float>::value) { |
| - DataCopy(dst, src + srcOffset); | + LoadAlign(dst, src + srcOffset); |
| } else { | } else { |
| RegTensor<T> tmp; | RegTensor<T> tmp; |
| - DataCopy<T, AscendC::MicroAPI::LoadDist::DIST_UNPACK_B16>(tmp, src + srcOffset); | + LoadAlign<T, AscendC::MicroAPI::LoadDist::DIST_UNPACK_B16>(tmp, src + srcOffset); |
| Cast<float, T, castTraitB162B32Even>(dst, tmp, pregLoop); | Cast<float, T, castTraitB162B32Even>(dst, tmp, pregLoop); |
| } | } |
| } | } |
| | |
| template <typename T, bool hasGamma, bool hasBeta> | template <typename T, bool hasGamma, bool hasBeta> |
| -__aicore__ inline void LoadGammaAndBetaData(RegTensor<float>& gamma, RegTensor<float>& beta, | +__aicore__ inline void LoadGammaAndBetaData(RegTensor<float>& gamma, RegTensor<float>& beta, __ubuf__ T* gammaLocal, |
| - __local_mem__ T* gammaLocal, __local_mem__ T* betaLocal, MaskReg pregLoop, | + __ubuf__ T* betaLocal, MaskReg pregLoop, uint32_t srcOffset) |
| - uint32_t srcOffset) | |
| { | { |
| if constexpr (IsSameType<T, float>::value) { | if constexpr (IsSameType<T, float>::value) { |
| if constexpr (hasGamma) { | if constexpr (hasGamma) { |
| - DataCopy<float, AscendC::MicroAPI::LoadDist::DIST_BRC_B32>(gamma, gammaLocal + srcOffset); | + LoadAlign<float, AscendC::MicroAPI::LoadDist::DIST_BRC_B32>(gamma, gammaLocal + srcOffset); |
| } | } |
| if constexpr (hasBeta) { | if constexpr (hasBeta) { |
| - DataCopy<float, AscendC::MicroAPI::LoadDist::DIST_BRC_B32>(beta, betaLocal + srcOffset); | + LoadAlign<float, AscendC::MicroAPI::LoadDist::DIST_BRC_B32>(beta, betaLocal + srcOffset); |
| } | } |
| } else { | } else { |
| if constexpr (hasGamma) { | if constexpr (hasGamma) { |
| RegTensor<T> gammaB16; | RegTensor<T> gammaB16; |
| - DataCopy<T, AscendC::MicroAPI::LoadDist::DIST_BRC_B16>(gammaB16, gammaLocal + srcOffset); | + LoadAlign<T, AscendC::MicroAPI::LoadDist::DIST_BRC_B16>(gammaB16, gammaLocal + srcOffset); |
| Cast<float, T, castTraitB162B32Even>(gamma, gammaB16, pregLoop); | Cast<float, T, castTraitB162B32Even>(gamma, gammaB16, pregLoop); |
| } | } |
| if constexpr (hasBeta) { | if constexpr (hasBeta) { |
| RegTensor<T> betaB16; | RegTensor<T> betaB16; |
| - DataCopy<T, AscendC::MicroAPI::LoadDist::DIST_BRC_B16>(betaB16, betaLocal + srcOffset); | + LoadAlign<T, AscendC::MicroAPI::LoadDist::DIST_BRC_B16>(betaB16, betaLocal + srcOffset); |
| Cast<float, T, castTraitB162B32Even>(beta, betaB16, pregLoop); | Cast<float, T, castTraitB162B32Even>(beta, betaB16, pregLoop); |
| } | } |
| } | } |
| } | } |
| | |
| template <typename T> | template <typename T> |
| -__aicore__ inline void StoreOutputData(__local_mem__ T* dst, RegTensor<float>& src, MaskReg pregLoop, | +__aicore__ inline void StoreOutputData(__ubuf__ T* dst, RegTensor<float>& src, MaskReg pregLoop, uint32_t dstOffset) |
| - uint32_t dstOffset) | |
| { | { |
| if constexpr (IsSameType<T, float>::value) { | if constexpr (IsSameType<T, float>::value) { |
| - DataCopy(dst + dstOffset, src, pregLoop); | + StoreAlign(dst + dstOffset, src, pregLoop); |
| } else { | } else { |
| RegTensor<T> tmpB16; | RegTensor<T> tmpB16; |
| Cast<T, float, castTraitB322B16Even>(tmpB16, src, pregLoop); | Cast<T, float, castTraitB322B16Even>(tmpB16, src, pregLoop); |
| - DataCopy<T, AscendC::MicroAPI::StoreDist::DIST_PACK_B32>(dst + dstOffset, tmpB16, pregLoop); | + StoreAlign<T, AscendC::MicroAPI::StoreDist::DIST_PACK_B32>(dst + dstOffset, tmpB16, pregLoop); |
| } | } |
| } | } |
| | |
| -__aicore__ inline void DichotomyAdd(RegTensor<float>& dstReg, __local_mem__ float* src, uint16_t outerLoop, | +__aicore__ inline void DichotomyAdd(RegTensor<float>& dstReg, __ubuf__ float* src, uint16_t outerLoop, |
| uint16_t innerLoop, uint32_t lastNum) | uint16_t innerLoop, uint32_t lastNum) |
| { | { |
| RegTensor<float> tmpReg1; | RegTensor<float> tmpReg1; |
| @@ -158,17 +157,17 @@ __aicore__ inline void DichotomyAdd(RegTensor<float>& dstReg, __local_mem__ floa |
| for (uint16_t k = 0; k < outerLoop; k++) { | for (uint16_t k = 0; k < outerLoop; k++) { |
| innerLoop = innerLoop / DICHOTOMY_ADD_COEFF; | innerLoop = innerLoop / DICHOTOMY_ADD_COEFF; |
| for (uint16_t i = 0; i < innerLoop; i++) { | for (uint16_t i = 0; i < innerLoop; i++) { |
| - DataCopy(tmpReg1, src + i * VL_FP32); | + LoadAlign(tmpReg1, src + i * VL_FP32); |
| - DataCopy(tmpReg2, src + (i + innerLoop) * VL_FP32); | + LoadAlign(tmpReg2, src + (i + innerLoop) * VL_FP32); |
| Add(tmpReg3, tmpReg1, tmpReg2, pregMain); | Add(tmpReg3, tmpReg1, tmpReg2, pregMain); |
| - DataCopy(src + i * VL_FP32, tmpReg3, pregMain); | + StoreAlign(src + i * VL_FP32, tmpReg3, pregMain); |
| } | } |
| LocalMemBar<AscendC::MicroAPI::MemType::VEC_STORE, AscendC::MicroAPI::MemType::VEC_LOAD>(); | LocalMemBar<AscendC::MicroAPI::MemType::VEC_STORE, AscendC::MicroAPI::MemType::VEC_LOAD>(); |
| } | } |
| uint32_t sreg0 = lastNum; | uint32_t sreg0 = lastNum; |
| MaskReg pregLoop = UpdateMask<float>(sreg0); | MaskReg pregLoop = UpdateMask<float>(sreg0); |
| - DataCopy(tmpReg3, src); | + LoadAlign(tmpReg3, src); |
| - ReduceSum(dstReg, tmpReg3, pregLoop); | + Reduce<ReduceType::SUM>(dstReg, tmpReg3, pregLoop); |
| } | } |
| | |
| __aicore__ inline void CalRstdByHighPrecision(RegTensor<float>& var, RegTensor<float>& rstd, float epsilon) | __aicore__ inline void CalRstdByHighPrecision(RegTensor<float>& var, RegTensor<float>& rstd, float epsilon) |
| @@ -211,16 +210,15 @@ __aicore__ inline void CalRstdByHighPrecision(RegTensor<float>& var, RegTensor<f |
| Mula(s, var, r, pregMerge); | Mula(s, var, r, pregMerge); |
| Mul(s, s, rstd, pregMerge); | Mul(s, s, rstd, pregMerge); |
| Mula(rstd, s, scalar1, pregMerge); | Mula(rstd, s, scalar1, pregMerge); |
| - CompareScalar(cmpReg1, var, POS_INF, pregMerge); | + Compares(cmpReg1, var, POS_INF, pregMerge); |
| Select(rstd, scalar3, rstd, cmpReg1); | Select(rstd, scalar3, rstd, cmpReg1); |
| - CompareScalar(cmpReg2, var, ZERO, pregMerge); | + Compares(cmpReg2, var, ZERO, pregMerge); |
| Select(rstd, scalar2, rstd, cmpReg2); | Select(rstd, scalar2, rstd, cmpReg2); |
| } | } |
| | |
| template <typename T> | template <typename T> |
| -__aicore__ inline void VFInnerWelfordParallelUpdateWithInit(__local_mem__ T* x1Local, __local_mem__ float* tmpMeanLocal, | +__aicore__ inline void VFInnerWelfordParallelUpdateWithInit(__ubuf__ T* x1Local, __ubuf__ float* tmpMeanLocal, |
| - __local_mem__ float* tmpVarLocal, uint64_t calLen, | + __ubuf__ float* tmpVarLocal, uint64_t calLen, float scale) |
| - float scale) | |
| { | { |
| uint16_t loopCount = CeilDiv(calLen, VL_FP32); | uint16_t loopCount = CeilDiv(calLen, VL_FP32); |
| __VEC_SCOPE__ | __VEC_SCOPE__ |
| @@ -241,13 +239,13 @@ __aicore__ inline void VFInnerWelfordParallelUpdateWithInit(__local_mem__ T* x1L |
| Sub(delta1, x1, tmpMean, pregLoop); | Sub(delta1, x1, tmpMean, pregLoop); |
| Muls(delta2, delta1, scale, pregLoop); | Muls(delta2, delta1, scale, pregLoop); |
| Add(tmpMean, tmpMean, delta2, pregLoop); | Add(tmpMean, tmpMean, delta2, pregLoop); |
| - DataCopy(tmpMeanLocal + i * VL_FP32, tmpMean, pregLoop); | + StoreAlign(tmpMeanLocal + i * VL_FP32, tmpMean, pregLoop); |
| | |
| Duplicate(tmpVar, 0.0, pregLoop); | Duplicate(tmpVar, 0.0, pregLoop); |
| Sub(delta3, x1, tmpMean, pregLoop); | Sub(delta3, x1, tmpMean, pregLoop); |
| Mul(delat4, delta1, delta3, pregLoop); | Mul(delat4, delta1, delta3, pregLoop); |
| Add(tmpVar, tmpVar, delat4, pregLoop); | Add(tmpVar, tmpVar, delat4, pregLoop); |
| - DataCopy(tmpVarLocal + i * VL_FP32, tmpVar, pregLoop); | + StoreAlign(tmpVarLocal + i * VL_FP32, tmpVar, pregLoop); |
| } | } |
| } | } |
| } | } |
| @@ -262,8 +260,8 @@ __aicore__ inline void VFInnerWelfordParallelUpdateWithInit(__local_mem__ T* x1L |
| return count, mean, var | return count, mean, var |
| */ | */ |
| template <typename T> | template <typename T> |
| -__aicore__ inline void VFInnerWelfordParallelUpdate(__local_mem__ T* x1Local, __local_mem__ float* tmpMeanLocal, | +__aicore__ inline void VFInnerWelfordParallelUpdate(__ubuf__ T* x1Local, __ubuf__ float* tmpMeanLocal, |
| - __local_mem__ float* tmpVarLocal, uint64_t calLen, float scale) | + __ubuf__ float* tmpVarLocal, uint64_t calLen, float scale) |
| { | { |
| uint16_t loopCount = CeilDiv(calLen, VL_FP32); | uint16_t loopCount = CeilDiv(calLen, VL_FP32); |
| __VEC_SCOPE__ | __VEC_SCOPE__ |
| @@ -280,24 +278,24 @@ __aicore__ inline void VFInnerWelfordParallelUpdate(__local_mem__ T* x1Local, __ |
| for (uint16_t i = 0; i < loopCount; i++) { | for (uint16_t i = 0; i < loopCount; i++) { |
| pregLoop = UpdateMask<float>(sreg0); | pregLoop = UpdateMask<float>(sreg0); |
| LoadInputData<T>(x1, x1Local, pregLoop, i * VL_FP32); | LoadInputData<T>(x1, x1Local, pregLoop, i * VL_FP32); |
| - DataCopy(tmpMean, tmpMeanLocal + i * VL_FP32); | + LoadAlign(tmpMean, tmpMeanLocal + i * VL_FP32); |
| Sub(delta1, x1, tmpMean, pregLoop); | Sub(delta1, x1, tmpMean, pregLoop); |
| Muls(delta2, delta1, scale, pregLoop); | Muls(delta2, delta1, scale, pregLoop); |
| Add(tmpMean, tmpMean, delta2, pregLoop); | Add(tmpMean, tmpMean, delta2, pregLoop); |
| - DataCopy(tmpMeanLocal + i * VL_FP32, tmpMean, pregLoop); | + StoreAlign(tmpMeanLocal + i * VL_FP32, tmpMean, pregLoop); |
| | |
| - DataCopy(tmpVar, tmpVarLocal + i * VL_FP32); | + LoadAlign(tmpVar, tmpVarLocal + i * VL_FP32); |
| Sub(delta3, x1, tmpMean, pregLoop); | Sub(delta3, x1, tmpMean, pregLoop); |
| Mul(delat4, delta1, delta3, pregLoop); | Mul(delat4, delta1, delta3, pregLoop); |
| Add(tmpVar, tmpVar, delat4, pregLoop); | Add(tmpVar, tmpVar, delat4, pregLoop); |
| - DataCopy(tmpVarLocal + i * VL_FP32, tmpVar, pregLoop); | + StoreAlign(tmpVarLocal + i * VL_FP32, tmpVar, pregLoop); |
| } | } |
| } | } |
| } | } |
| | |
| template <typename T> | template <typename T> |
| -__aicore__ inline void VFWelfordParallelUpdate(__local_mem__ T* x1Local, __local_mem__ float* tmpMeanLocal, | +__aicore__ inline void VFWelfordParallelUpdate(__ubuf__ T* x1Local, __ubuf__ float* tmpMeanLocal, |
| - __local_mem__ float* tmpVarLocal, uint64_t curLoop, uint64_t calLen, | + __ubuf__ float* tmpVarLocal, uint64_t curLoop, uint64_t calLen, |
| float scale) | float scale) |
| { | { |
| if (curLoop == 0) { | if (curLoop == 0) { |
| @@ -318,10 +316,9 @@ __aicore__ inline void VFWelfordParallelUpdate(__local_mem__ T* x1Local, __local |
| welford采用二分累加计算mean和variance, 基本逻辑为: | welford采用二分累加计算mean和variance, 基本逻辑为: |
| 先将尾块折叠到整块上,整尾块vadd之后,做一次vcadd回刷到UB上,剩余整块直接vcadd回刷到UB上,最后对UB上的结果做完全二分对折 | 先将尾块折叠到整块上,整尾块vadd之后,做一次vcadd回刷到UB上,剩余整块直接vcadd回刷到UB上,最后对UB上的结果做完全二分对折 |
| */ | */ |
| -__aicore__ inline void VFWelfordParallelFinalizeAlign(__local_mem__ float* meanLocal, __local_mem__ float* rstdLocal, | +__aicore__ inline void VFWelfordParallelFinalizeAlign(__ubuf__ float* meanLocal, __ubuf__ float* rstdLocal, |
| - __local_mem__ float* tmpMeanLocal, | + __ubuf__ float* tmpMeanLocal, __ubuf__ float* tmpVarLocal, |
| - __local_mem__ float* tmpVarLocal, | + __ubuf__ float* dichotomyAddLocal, uint32_t reduceCount, |
| - __local_mem__ float* dichotomyAddLocal, uint32_t reduceCount, | |
| uint32_t dichotomyAddPower, uint32_t dichotomyAddK, | uint32_t dichotomyAddPower, uint32_t dichotomyAddK, |
| uint32_t dichotomyAddLastNum, uint32_t offset, float reduceScale, | uint32_t dichotomyAddLastNum, uint32_t offset, float reduceScale, |
| float scale, float cnt, float eps) | float scale, float cnt, float eps) |
| @@ -354,27 +351,27 @@ __aicore__ inline void VFWelfordParallelFinalizeAlign(__local_mem__ float* meanL |
| | |
| for (uint16_t i = 0; i < dichotomyAddReminderLoopCount; i++) { | for (uint16_t i = 0; i < dichotomyAddReminderLoopCount; i++) { |
| pregLoop = UpdateMask<float>(sreg0); | pregLoop = UpdateMask<float>(sreg0); |
| - DataCopy(dichotomyAddMeanL, tmpMeanLocal + i * VL_FP32); | + LoadAlign(dichotomyAddMeanL, tmpMeanLocal + i * VL_FP32); |
| - DataCopy(dichotomyAddMeanR, tmpMeanLocal + i * VL_FP32 + dichotomyAddPower); | + LoadAlign(dichotomyAddMeanR, tmpMeanLocal + i * VL_FP32 + dichotomyAddPower); |
| Muls(dichotomyAddMeanL, dichotomyAddMeanL, scale, pregMain); | Muls(dichotomyAddMeanL, dichotomyAddMeanL, scale, pregMain); |
| Muls(dichotomyAddMeanR, dichotomyAddMeanR, scale, pregLoop); | Muls(dichotomyAddMeanR, dichotomyAddMeanR, scale, pregLoop); |
| Add(sumMean, dichotomyAddMeanL, dichotomyAddMeanR, pregMain); | Add(sumMean, dichotomyAddMeanL, dichotomyAddMeanR, pregMain); |
| - ReduceSum(mean, sumMean, pregMain); | + Reduce<ReduceType::SUM>(mean, sumMean, pregMain); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(dichotomyAddLocal + i, mean, | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(dichotomyAddLocal + i, mean, |
| - pregMerge); | + pregMerge); |
| } | } |
| | |
| | |
| for (uint16_t i = 0; i < dichotomyAddPowerRemainLoopCount; i++) { | for (uint16_t i = 0; i < dichotomyAddPowerRemainLoopCount; i++) { |
| - DataCopy(dichotomyAddMeanL, tmpMeanLocal + (i + dichotomyAddReminderLoopCount) * VL_FP32); | + LoadAlign(dichotomyAddMeanL, tmpMeanLocal + (i + dichotomyAddReminderLoopCount) * VL_FP32); |
| Muls(dichotomyAddMeanL, dichotomyAddMeanL, scale, pregMain); | Muls(dichotomyAddMeanL, dichotomyAddMeanL, scale, pregMain); |
| - ReduceSum(mean, dichotomyAddMeanL, pregMain); | + Reduce<ReduceType::SUM>(mean, dichotomyAddMeanL, pregMain); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( |
| dichotomyAddLocal + dichotomyAddReminderLoopCount + i, mean, pregMerge); | dichotomyAddLocal + dichotomyAddReminderLoopCount + i, mean, pregMerge); |
| } | } |
| | |
| DichotomyAdd(mean, dichotomyAddLocal, dichotomyAddK, innerLoopCountOrigin, dichotomyAddLastNum); | DichotomyAdd(mean, dichotomyAddLocal, dichotomyAddK, innerLoopCountOrigin, dichotomyAddLastNum); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(meanLocal + offset, mean, pregMerge); | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(meanLocal + offset, mean, pregMerge); |
| | |
| Duplicate(one, float(1.0), pregMain); | Duplicate(one, float(1.0), pregMain); |
| Duplicate(mean, mean, pregMain); | Duplicate(mean, mean, pregMain); |
| @@ -382,45 +379,45 @@ __aicore__ inline void VFWelfordParallelFinalizeAlign(__local_mem__ float* meanL |
| | |
| for (uint16_t i = 0; i < dichotomyAddReminderLoopCount; i++) { | for (uint16_t i = 0; i < dichotomyAddReminderLoopCount; i++) { |
| pregLoop = UpdateMask<float>(sreg0); | pregLoop = UpdateMask<float>(sreg0); |
| - DataCopy(dichotomyAddMeanL, tmpMeanLocal + i * VL_FP32); | + LoadAlign(dichotomyAddMeanL, tmpMeanLocal + i * VL_FP32); |
| Sub(deltaL, dichotomyAddMeanL, mean, pregMain); | Sub(deltaL, dichotomyAddMeanL, mean, pregMain); |
| Mul(deltaL, deltaL, deltaL, pregMain); | Mul(deltaL, deltaL, deltaL, pregMain); |
| Muls(deltaL, deltaL, cnt, pregMain); | Muls(deltaL, deltaL, cnt, pregMain); |
| - DataCopy(dichotomyAddVarL, tmpVarLocal + i * VL_FP32); | + LoadAlign(dichotomyAddVarL, tmpVarLocal + i * VL_FP32); |
| Add(dichotomyAddVarL, dichotomyAddVarL, deltaL, pregMain); | Add(dichotomyAddVarL, dichotomyAddVarL, deltaL, pregMain); |
| Muls(dichotomyAddVarL, dichotomyAddVarL, reduceScale, pregMain); | Muls(dichotomyAddVarL, dichotomyAddVarL, reduceScale, pregMain); |
| | |
| - DataCopy(dichotomyAddMeanR, tmpMeanLocal + i * VL_FP32 + dichotomyAddPower); | + LoadAlign(dichotomyAddMeanR, tmpMeanLocal + i * VL_FP32 + dichotomyAddPower); |
| Sub(deltaR, dichotomyAddMeanR, mean, pregLoop); | Sub(deltaR, dichotomyAddMeanR, mean, pregLoop); |
| Mul(deltaR, deltaR, deltaR, pregLoop); | Mul(deltaR, deltaR, deltaR, pregLoop); |
| Muls(deltaR, deltaR, cnt, pregLoop); | Muls(deltaR, deltaR, cnt, pregLoop); |
| - DataCopy(dichotomyAddVarR, tmpVarLocal + i * VL_FP32 + dichotomyAddPower); | + LoadAlign(dichotomyAddVarR, tmpVarLocal + i * VL_FP32 + dichotomyAddPower); |
| Add(dichotomyAddVarR, dichotomyAddVarR, deltaR, pregLoop); | Add(dichotomyAddVarR, dichotomyAddVarR, deltaR, pregLoop); |
| Muls(dichotomyAddVarR, dichotomyAddVarR, reduceScale, pregLoop); | Muls(dichotomyAddVarR, dichotomyAddVarR, reduceScale, pregLoop); |
| | |
| Add(sumVar, dichotomyAddVarL, dichotomyAddVarR, pregMain); | Add(sumVar, dichotomyAddVarL, dichotomyAddVarR, pregMain); |
| - ReduceSum(var, sumVar, pregMain); | + Reduce<ReduceType::SUM>(var, sumVar, pregMain); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(dichotomyAddLocal + i, var, | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(dichotomyAddLocal + i, var, |
| - pregMerge); | + pregMerge); |
| } | } |
| | |
| | |
| for (uint16_t i = 0; i < dichotomyAddPowerRemainLoopCount; i++) { | for (uint16_t i = 0; i < dichotomyAddPowerRemainLoopCount; i++) { |
| - DataCopy(dichotomyAddMeanL, tmpMeanLocal + (i + dichotomyAddReminderLoopCount) * VL_FP32); | + LoadAlign(dichotomyAddMeanL, tmpMeanLocal + (i + dichotomyAddReminderLoopCount) * VL_FP32); |
| Sub(deltaL, dichotomyAddMeanL, mean, pregMain); | Sub(deltaL, dichotomyAddMeanL, mean, pregMain); |
| Mul(deltaL, deltaL, deltaL, pregMain); | Mul(deltaL, deltaL, deltaL, pregMain); |
| Muls(deltaL, deltaL, cnt, pregMain); | Muls(deltaL, deltaL, cnt, pregMain); |
| - DataCopy(dichotomyAddVarL, tmpVarLocal + (i + dichotomyAddReminderLoopCount) * VL_FP32); | + LoadAlign(dichotomyAddVarL, tmpVarLocal + (i + dichotomyAddReminderLoopCount) * VL_FP32); |
| Add(dichotomyAddVarL, dichotomyAddVarL, deltaL, pregMain); | Add(dichotomyAddVarL, dichotomyAddVarL, deltaL, pregMain); |
| Muls(dichotomyAddVarL, dichotomyAddVarL, reduceScale, pregMain); | Muls(dichotomyAddVarL, dichotomyAddVarL, reduceScale, pregMain); |
| - ReduceSum(var, dichotomyAddVarL, pregMain); | + Reduce<ReduceType::SUM>(var, dichotomyAddVarL, pregMain); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( |
| dichotomyAddLocal + dichotomyAddReminderLoopCount + i, var, pregMerge); | dichotomyAddLocal + dichotomyAddReminderLoopCount + i, var, pregMerge); |
| } | } |
| | |
| DichotomyAdd(var, dichotomyAddLocal, dichotomyAddK, innerLoopCountOrigin, dichotomyAddLastNum); | DichotomyAdd(var, dichotomyAddLocal, dichotomyAddK, innerLoopCountOrigin, dichotomyAddLastNum); |
| CalRstdByHighPrecision(var, rstd, eps); | CalRstdByHighPrecision(var, rstd, eps); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(rstdLocal + offset, rstd, pregMerge); | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(rstdLocal + offset, rstd, pregMerge); |
| } | } |
| } | } |
| | |
| @@ -448,10 +445,9 @@ __aicore__ inline void VFWelfordParallelFinalizeAlign(__local_mem__ float* meanL |
| | |
| |
| __aicore__ inline void VFWelfordParallelFinalizeNonAlignSituation1( | __aicore__ inline void VFWelfordParallelFinalizeNonAlignSituation1( |
| - __local_mem__ float* meanLocal, __local_mem__ float* rstdLocal, __local_mem__ float* tmpMeanLocal, | + __ubuf__ float* meanLocal, __ubuf__ float* rstdLocal, __ubuf__ float* tmpMeanLocal, __ubuf__ float* tmpVarLocal, |
| - __local_mem__ float* tmpVarLocal, __local_mem__ float* dichotomyAddLocal, uint32_t reduceCount, | + __ubuf__ float* dichotomyAddLocal, uint32_t reduceCount, uint32_t dichotomyAddPower, uint32_t dichotomyAddK, |
| - uint32_t dichotomyAddPower, uint32_t dichotomyAddK, uint32_t dichotomyAddLastNum, uint32_t offset, | + uint32_t dichotomyAddLastNum, uint32_t offset, uint32_t tailSize, float reduceScale, float cnt, float eps) |
| - uint32_t tailSize, float reduceScale, float cnt, float eps) | |
| { | { |
| float tailCnt = cnt + float(1.0); | float tailCnt = cnt + float(1.0); |
| float coeff = tailCnt / cnt; | float coeff = tailCnt / cnt; |
| @@ -498,14 +494,14 @@ __aicore__ inline void VFWelfordParallelFinalizeNonAlignSituation1( |
| | |
| | |
| for (uint16_t i = 0; i < welfordDiffLoopCount; i++) { | for (uint16_t i = 0; i < welfordDiffLoopCount; i++) { |
| - DataCopy(dichotomyAddMeanL, tmpMeanLocal + i * VL_FP32); | + LoadAlign(dichotomyAddMeanL, tmpMeanLocal + i * VL_FP32); |
| - DataCopy(dichotomyAddMeanR, tmpMeanLocal + i * VL_FP32 + dichotomyAddPower); | + LoadAlign(dichotomyAddMeanR, tmpMeanLocal + i * VL_FP32 + dichotomyAddPower); |
| Muls(dichotomyAddMeanL, dichotomyAddMeanL, tailCountScale, pregMain); | Muls(dichotomyAddMeanL, dichotomyAddMeanL, tailCountScale, pregMain); |
| Muls(dichotomyAddMeanR, dichotomyAddMeanR, tailCountScale, pregMain); | Muls(dichotomyAddMeanR, dichotomyAddMeanR, tailCountScale, pregMain); |
| Add(sumMean, dichotomyAddMeanL, dichotomyAddMeanR, pregMain); | Add(sumMean, dichotomyAddMeanL, dichotomyAddMeanR, pregMain); |
| - ReduceSum(mean, sumMean, pregMain); | + Reduce<ReduceType::SUM>(mean, sumMean, pregMain); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(dichotomyAddLocal + i, mean, | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(dichotomyAddLocal + i, mean, |
| - pregMerge); | + pregMerge); |
| } | } |
| | |
| | |
| @@ -514,144 +510,145 @@ __aicore__ inline void VFWelfordParallelFinalizeNonAlignSituation1( |
| for (uint16_t i = 0; i < welfordReminderLoopCount; i++) { | for (uint16_t i = 0; i < welfordReminderLoopCount; i++) { |
| pregLoop = UpdateMask<float>(sreg0); | pregLoop = UpdateMask<float>(sreg0); |
| pregLoop1 = UpdateMask<float>(sreg1); | pregLoop1 = UpdateMask<float>(sreg1); |
| - DataCopy(dichotomyAddMeanL, tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32); | + LoadAlign(dichotomyAddMeanL, tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32); |
| - DataCopy(dichotomyAddMeanR, tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32 + dichotomyAddPower); | + LoadAlign(dichotomyAddMeanR, tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32 + dichotomyAddPower); |
| Muls(dichotomyAddMeanL, dichotomyAddMeanL, tailCountScale, pregMain); | Muls(dichotomyAddMeanL, dichotomyAddMeanL, tailCountScale, pregMain); |
| Muls(dichotomyAddMeanR, dichotomyAddMeanR, countScale, pregLoop); | Muls(dichotomyAddMeanR, dichotomyAddMeanR, countScale, pregLoop); |
| Muls(tmp, dichotomyAddMeanR, coeff, pregLoop1); | Muls(tmp, dichotomyAddMeanR, coeff, pregLoop1); |
| - Copy<float, AscendC::MicroAPI::MaskMergeMode::MERGING>(dichotomyAddMeanR, tmp, pregLoop1); | + Move<float, AscendC::MicroAPI::MaskMergeMode::MERGING>(dichotomyAddMeanR, tmp, pregLoop1); |
| Add(sumMean, dichotomyAddMeanL, dichotomyAddMeanR, pregMain); | Add(sumMean, dichotomyAddMeanL, dichotomyAddMeanR, pregMain); |
| - ReduceSum(mean, sumMean, pregMain); | + Reduce<ReduceType::SUM>(mean, sumMean, pregMain); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( |
| dichotomyAddLocal + i + welfordDiffLoopCount, mean, pregMerge); | dichotomyAddLocal + i + welfordDiffLoopCount, mean, pregMerge); |
| } | } |
| | |
| | |
| for (uint16_t i = 0; i < dichotomyAddReminderLoopCount; i++) { | for (uint16_t i = 0; i < dichotomyAddReminderLoopCount; i++) { |
| pregLoop = UpdateMask<float>(sreg0); | pregLoop = UpdateMask<float>(sreg0); |
| - DataCopy(dichotomyAddMeanL, tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32 + welfordDiffReminderAlign); | + LoadAlign(dichotomyAddMeanL, |
| - DataCopy(dichotomyAddMeanR, tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32 + welfordDiffReminderAlign + | + tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32 + welfordDiffReminderAlign); |
| - dichotomyAddPower); | + LoadAlign(dichotomyAddMeanR, tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32 + |
| + welfordDiffReminderAlign + dichotomyAddPower); |
| Muls(dichotomyAddMeanL, dichotomyAddMeanL, tailCountScale, pregMain); | Muls(dichotomyAddMeanL, dichotomyAddMeanL, tailCountScale, pregMain); |
| Muls(dichotomyAddMeanR, dichotomyAddMeanR, countScale, pregLoop); | Muls(dichotomyAddMeanR, dichotomyAddMeanR, countScale, pregLoop); |
| Add(sumMean, dichotomyAddMeanL, dichotomyAddMeanR, pregMain); | Add(sumMean, dichotomyAddMeanL, dichotomyAddMeanR, pregMain); |
| - ReduceSum(mean, sumMean, pregMain); | + Reduce<ReduceType::SUM>(mean, sumMean, pregMain); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( |
| dichotomyAddLocal + i + welfordDiffLoopCount + welfordReminderLoopCount, mean, pregMerge); | dichotomyAddLocal + i + welfordDiffLoopCount + welfordReminderLoopCount, mean, pregMerge); |
| } | } |
| | |
| for (uint16_t i = 0; i < dichotomyAddPowerRemainLoopCount; i++) { | for (uint16_t i = 0; i < dichotomyAddPowerRemainLoopCount; i++) { |
| - DataCopy(dichotomyAddMeanL, tmpMeanLocal + (i + dichotomyAddReminderRealLoopCount) * VL_FP32); | + LoadAlign(dichotomyAddMeanL, tmpMeanLocal + (i + dichotomyAddReminderRealLoopCount) * VL_FP32); |
| Muls(dichotomyAddMeanL, dichotomyAddMeanL, tailCountScale, pregMain); | Muls(dichotomyAddMeanL, dichotomyAddMeanL, tailCountScale, pregMain); |
| - ReduceSum(mean, dichotomyAddMeanL, pregMain); | + Reduce<ReduceType::SUM>(mean, dichotomyAddMeanL, pregMain); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( |
| dichotomyAddLocal + dichotomyAddReminderRealLoopCount + i, mean, pregMerge); | dichotomyAddLocal + dichotomyAddReminderRealLoopCount + i, mean, pregMerge); |
| } | } |
| DichotomyAdd(mean, dichotomyAddLocal, dichotomyAddK, innerLoopCountOrigin, dichotomyAddLastNum); | DichotomyAdd(mean, dichotomyAddLocal, dichotomyAddK, innerLoopCountOrigin, dichotomyAddLastNum); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(meanLocal + offset, mean, pregMerge); | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(meanLocal + offset, mean, pregMerge); |
| | |
| | |
| Duplicate(one, float(1.0), pregMain); | Duplicate(one, float(1.0), pregMain); |
| Duplicate(mean, mean, pregMain); | Duplicate(mean, mean, pregMain); |
| for (uint16_t i = 0; i < welfordDiffLoopCount; i++) { | for (uint16_t i = 0; i < welfordDiffLoopCount; i++) { |
| - DataCopy(dichotomyAddMeanL, tmpMeanLocal + i * VL_FP32); | + LoadAlign(dichotomyAddMeanL, tmpMeanLocal + i * VL_FP32); |
| Sub(deltaL, dichotomyAddMeanL, mean, pregMain); | Sub(deltaL, dichotomyAddMeanL, mean, pregMain); |
| Mul(deltaL, deltaL, deltaL, pregMain); | Mul(deltaL, deltaL, deltaL, pregMain); |
| Muls(deltaL, deltaL, tailCnt, pregMain); | Muls(deltaL, deltaL, tailCnt, pregMain); |
| - DataCopy(dichotomyAddMeanR, tmpMeanLocal + i * VL_FP32 + dichotomyAddPower); | + LoadAlign(dichotomyAddMeanR, tmpMeanLocal + i * VL_FP32 + dichotomyAddPower); |
| Sub(deltaR, dichotomyAddMeanR, mean, pregMain); | Sub(deltaR, dichotomyAddMeanR, mean, pregMain); |
| Mul(deltaR, deltaR, deltaR, pregMain); | Mul(deltaR, deltaR, deltaR, pregMain); |
| Muls(deltaR, deltaR, tailCnt, pregMain); | Muls(deltaR, deltaR, tailCnt, pregMain); |
| | |
| - DataCopy(dichotomyAddVarL, tmpVarLocal + i * VL_FP32); | + LoadAlign(dichotomyAddVarL, tmpVarLocal + i * VL_FP32); |
| Add(dichotomyAddVarL, dichotomyAddVarL, deltaL, pregMain); | Add(dichotomyAddVarL, dichotomyAddVarL, deltaL, pregMain); |
| Muls(dichotomyAddVarL, dichotomyAddVarL, reduceScale, pregMain); | Muls(dichotomyAddVarL, dichotomyAddVarL, reduceScale, pregMain); |
| - DataCopy(dichotomyAddVarR, tmpVarLocal + i * VL_FP32 + dichotomyAddPower); | + LoadAlign(dichotomyAddVarR, tmpVarLocal + i * VL_FP32 + dichotomyAddPower); |
| Add(dichotomyAddVarR, dichotomyAddVarR, deltaR, pregMain); | Add(dichotomyAddVarR, dichotomyAddVarR, deltaR, pregMain); |
| Muls(dichotomyAddVarR, dichotomyAddVarR, reduceScale, pregMain); | Muls(dichotomyAddVarR, dichotomyAddVarR, reduceScale, pregMain); |
| | |
| Add(sumVar, dichotomyAddVarL, dichotomyAddVarR, pregMain); | Add(sumVar, dichotomyAddVarL, dichotomyAddVarR, pregMain); |
| - ReduceSum(var, sumVar, pregMain); | + Reduce<ReduceType::SUM>(var, sumVar, pregMain); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(dichotomyAddLocal + i, var, | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(dichotomyAddLocal + i, var, |
| - pregMerge); | + pregMerge); |
| } | } |
| sreg0 = dichotomyAddReminder - welfordDiffLoopCount * VL_FP32; | sreg0 = dichotomyAddReminder - welfordDiffLoopCount * VL_FP32; |
| sreg1 = welfordDiffReminder; | sreg1 = welfordDiffReminder; |
| for (uint16_t i = 0; i < welfordReminderLoopCount; i++) { | for (uint16_t i = 0; i < welfordReminderLoopCount; i++) { |
| pregLoop = UpdateMask<float>(sreg0); | pregLoop = UpdateMask<float>(sreg0); |
| pregLoop1 = UpdateMask<float>(sreg1); | pregLoop1 = UpdateMask<float>(sreg1); |
| - DataCopy(dichotomyAddMeanL, tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32); | + LoadAlign(dichotomyAddMeanL, tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32); |
| Sub(deltaL, dichotomyAddMeanL, mean, pregMain); | Sub(deltaL, dichotomyAddMeanL, mean, pregMain); |
| Mul(deltaL, deltaL, deltaL, pregMain); | Mul(deltaL, deltaL, deltaL, pregMain); |
| Muls(deltaL, deltaL, tailCnt, pregMain); | Muls(deltaL, deltaL, tailCnt, pregMain); |
| - DataCopy(dichotomyAddMeanR, tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32 + dichotomyAddPower); | + LoadAlign(dichotomyAddMeanR, tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32 + dichotomyAddPower); |
| Sub(deltaR, dichotomyAddMeanR, mean, pregLoop); | Sub(deltaR, dichotomyAddMeanR, mean, pregLoop); |
| Mul(deltaR, deltaR, deltaR, pregLoop); | Mul(deltaR, deltaR, deltaR, pregLoop); |
| Muls(deltaR, deltaR, cnt, pregLoop); | Muls(deltaR, deltaR, cnt, pregLoop); |
| Muls(tmp, deltaR, coeff, pregLoop1); | Muls(tmp, deltaR, coeff, pregLoop1); |
| - Copy<float, AscendC::MicroAPI::MaskMergeMode::MERGING>(deltaR, tmp, pregLoop1); | + Move<float, AscendC::MicroAPI::MaskMergeMode::MERGING>(deltaR, tmp, pregLoop1); |
| | |
| - DataCopy(dichotomyAddVarL, tmpVarLocal + (i + welfordDiffLoopCount) * VL_FP32); | + LoadAlign(dichotomyAddVarL, tmpVarLocal + (i + welfordDiffLoopCount) * VL_FP32); |
| Add(dichotomyAddVarL, dichotomyAddVarL, deltaL, pregMain); | Add(dichotomyAddVarL, dichotomyAddVarL, deltaL, pregMain); |
| Muls(dichotomyAddVarL, dichotomyAddVarL, reduceScale, pregMain); | Muls(dichotomyAddVarL, dichotomyAddVarL, reduceScale, pregMain); |
| - DataCopy(dichotomyAddVarR, tmpVarLocal + (i + welfordDiffLoopCount) * VL_FP32 + dichotomyAddPower); | + LoadAlign(dichotomyAddVarR, tmpVarLocal + (i + welfordDiffLoopCount) * VL_FP32 + dichotomyAddPower); |
| Add(dichotomyAddVarR, dichotomyAddVarR, deltaR, pregLoop); | Add(dichotomyAddVarR, dichotomyAddVarR, deltaR, pregLoop); |
| Muls(dichotomyAddVarR, dichotomyAddVarR, reduceScale, pregLoop); | Muls(dichotomyAddVarR, dichotomyAddVarR, reduceScale, pregLoop); |
| | |
| Add(sumVar, dichotomyAddVarL, dichotomyAddVarR, pregMain); | Add(sumVar, dichotomyAddVarL, dichotomyAddVarR, pregMain); |
| - ReduceSum(var, sumVar, pregMain); | + Reduce<ReduceType::SUM>(var, sumVar, pregMain); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( |
| dichotomyAddLocal + i + welfordDiffLoopCount, var, pregMerge); | dichotomyAddLocal + i + welfordDiffLoopCount, var, pregMerge); |
| } | } |
| | |
| for (uint16_t i = 0; i < dichotomyAddReminderLoopCount; i++) { | for (uint16_t i = 0; i < dichotomyAddReminderLoopCount; i++) { |
| pregLoop = UpdateMask<float>(sreg0); | pregLoop = UpdateMask<float>(sreg0); |
| - DataCopy(dichotomyAddMeanL, tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32 + welfordDiffReminderAlign); | + LoadAlign(dichotomyAddMeanL, |
| + tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32 + welfordDiffReminderAlign); |
| Sub(deltaL, dichotomyAddMeanL, mean, pregMain); | Sub(deltaL, dichotomyAddMeanL, mean, pregMain); |
| Mul(deltaL, deltaL, deltaL, pregMain); | Mul(deltaL, deltaL, deltaL, pregMain); |
| Muls(deltaL, deltaL, tailCnt, pregMain); | Muls(deltaL, deltaL, tailCnt, pregMain); |
| - DataCopy(dichotomyAddMeanR, tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32 + welfordDiffReminderAlign + | + LoadAlign(dichotomyAddMeanR, tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32 + |
| - dichotomyAddPower); | + welfordDiffReminderAlign + dichotomyAddPower); |
| Sub(deltaR, dichotomyAddMeanR, mean, pregLoop); | Sub(deltaR, dichotomyAddMeanR, mean, pregLoop); |
| Mul(deltaR, deltaR, deltaR, pregLoop); | Mul(deltaR, deltaR, deltaR, pregLoop); |
| Muls(deltaR, deltaR, cnt, pregLoop); | Muls(deltaR, deltaR, cnt, pregLoop); |
| | |
| - DataCopy(dichotomyAddVarL, tmpVarLocal + (i + welfordDiffLoopCount) * VL_FP32 + welfordDiffReminderAlign); | + LoadAlign(dichotomyAddVarL, tmpVarLocal + (i + welfordDiffLoopCount) * VL_FP32 + welfordDiffReminderAlign); |
| Add(dichotomyAddVarL, dichotomyAddVarL, deltaL, pregMain); | Add(dichotomyAddVarL, dichotomyAddVarL, deltaL, pregMain); |
| Muls(dichotomyAddVarL, dichotomyAddVarL, reduceScale, pregMain); | Muls(dichotomyAddVarL, dichotomyAddVarL, reduceScale, pregMain); |
| - DataCopy(dichotomyAddVarR, | + LoadAlign(dichotomyAddVarR, tmpVarLocal + (i + welfordDiffLoopCount) * VL_FP32 + welfordDiffReminderAlign + |
| - tmpVarLocal + (i + welfordDiffLoopCount) * VL_FP32 + welfordDiffReminderAlign + dichotomyAddPower); | + dichotomyAddPower); |
| Add(dichotomyAddVarR, dichotomyAddVarR, deltaR, pregLoop); | Add(dichotomyAddVarR, dichotomyAddVarR, deltaR, pregLoop); |
| Muls(dichotomyAddVarR, dichotomyAddVarR, reduceScale, pregLoop); | Muls(dichotomyAddVarR, dichotomyAddVarR, reduceScale, pregLoop); |
| Add(sumVar, dichotomyAddVarL, dichotomyAddVarR, pregMain); | Add(sumVar, dichotomyAddVarL, dichotomyAddVarR, pregMain); |
| - ReduceSum(var, sumVar, pregMain); | + Reduce<ReduceType::SUM>(var, sumVar, pregMain); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( |
| dichotomyAddLocal + i + welfordDiffLoopCount + welfordReminderLoopCount, var, pregMerge); | dichotomyAddLocal + i + welfordDiffLoopCount + welfordReminderLoopCount, var, pregMerge); |
| } | } |
| for (uint16_t i = 0; i < dichotomyAddPowerRemainLoopCount; i++) { | for (uint16_t i = 0; i < dichotomyAddPowerRemainLoopCount; i++) { |
| - DataCopy(dichotomyAddMeanL, tmpMeanLocal + (i + dichotomyAddReminderRealLoopCount) * VL_FP32); | + LoadAlign(dichotomyAddMeanL, tmpMeanLocal + (i + dichotomyAddReminderRealLoopCount) * VL_FP32); |
| Sub(deltaL, dichotomyAddMeanL, mean, pregMain); | Sub(deltaL, dichotomyAddMeanL, mean, pregMain); |
| Mul(deltaL, deltaL, deltaL, pregMain); | Mul(deltaL, deltaL, deltaL, pregMain); |
| Muls(deltaL, deltaL, tailCnt, pregMain); | Muls(deltaL, deltaL, tailCnt, pregMain); |
| - DataCopy(dichotomyAddVarL, tmpVarLocal + (i + dichotomyAddReminderRealLoopCount) * VL_FP32); | + LoadAlign(dichotomyAddVarL, tmpVarLocal + (i + dichotomyAddReminderRealLoopCount) * VL_FP32); |
| Add(dichotomyAddVarL, dichotomyAddVarL, deltaL, pregMain); | Add(dichotomyAddVarL, dichotomyAddVarL, deltaL, pregMain); |
| Muls(dichotomyAddVarL, dichotomyAddVarL, reduceScale, pregMain); | Muls(dichotomyAddVarL, dichotomyAddVarL, reduceScale, pregMain); |
| - ReduceSum(var, dichotomyAddVarL, pregMain); | + Reduce<ReduceType::SUM>(var, dichotomyAddVarL, pregMain); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( |
| dichotomyAddLocal + dichotomyAddReminderRealLoopCount + i, var, pregMerge); | dichotomyAddLocal + dichotomyAddReminderRealLoopCount + i, var, pregMerge); |
| } | } |
| DichotomyAdd(var, dichotomyAddLocal, dichotomyAddK, innerLoopCountOrigin, dichotomyAddLastNum); | DichotomyAdd(var, dichotomyAddLocal, dichotomyAddK, innerLoopCountOrigin, dichotomyAddLastNum); |
| CalRstdByHighPrecision(var, rstd, eps); | CalRstdByHighPrecision(var, rstd, eps); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(rstdLocal + offset, rstd, pregMerge); | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(rstdLocal + offset, rstd, pregMerge); |
| } | } |
| } | } |
| | |
| |
| __aicore__ inline void VFWelfordParallelFinalizeNonAlignSituation2( | __aicore__ inline void VFWelfordParallelFinalizeNonAlignSituation2( |
| - __local_mem__ float* meanLocal, __local_mem__ float* rstdLocal, __local_mem__ float* tmpMeanLocal, | + __ubuf__ float* meanLocal, __ubuf__ float* rstdLocal, __ubuf__ float* tmpMeanLocal, __ubuf__ float* tmpVarLocal, |
| - __local_mem__ float* tmpVarLocal, __local_mem__ float* dichotomyAddLocal, uint32_t reduceCount, | + __ubuf__ float* dichotomyAddLocal, uint32_t reduceCount, uint32_t dichotomyAddPower, uint32_t dichotomyAddK, |
| - uint32_t dichotomyAddPower, uint32_t dichotomyAddK, uint32_t dichotomyAddLastNum, uint32_t offset, | + uint32_t dichotomyAddLastNum, uint32_t offset, uint32_t tailSize, float reduceScale, float cnt, float eps) |
| - uint32_t tailSize, float reduceScale, float cnt, float eps) | |
| { | { |
| float tailCnt = cnt + float(1.0); | float tailCnt = cnt + float(1.0); |
| float coeff = tailCnt / cnt; | float coeff = tailCnt / cnt; |
| @@ -698,14 +695,14 @@ __aicore__ inline void VFWelfordParallelFinalizeNonAlignSituation2( |
| | |
| | |
| for (uint16_t i = 0; i < welfordDiffLoopCount; i++) { | for (uint16_t i = 0; i < welfordDiffLoopCount; i++) { |
| - DataCopy(dichotomyAddMeanL, tmpMeanLocal + i * VL_FP32); | + LoadAlign(dichotomyAddMeanL, tmpMeanLocal + i * VL_FP32); |
| - DataCopy(dichotomyAddMeanR, tmpMeanLocal + i * VL_FP32 + dichotomyAddPower); | + LoadAlign(dichotomyAddMeanR, tmpMeanLocal + i * VL_FP32 + dichotomyAddPower); |
| Muls(dichotomyAddMeanL, dichotomyAddMeanL, tailCountScale, pregMain); | Muls(dichotomyAddMeanL, dichotomyAddMeanL, tailCountScale, pregMain); |
| Muls(dichotomyAddMeanR, dichotomyAddMeanR, countScale, pregMain); | Muls(dichotomyAddMeanR, dichotomyAddMeanR, countScale, pregMain); |
| Add(sumMean, dichotomyAddMeanL, dichotomyAddMeanR, pregMain); | Add(sumMean, dichotomyAddMeanL, dichotomyAddMeanR, pregMain); |
| - ReduceSum(mean, sumMean, pregMain); | + Reduce<ReduceType::SUM>(mean, sumMean, pregMain); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(dichotomyAddLocal + i, mean, | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(dichotomyAddLocal + i, mean, |
| - pregMerge); | + pregMerge); |
| } | } |
| | |
| | |
| @@ -714,145 +711,146 @@ __aicore__ inline void VFWelfordParallelFinalizeNonAlignSituation2( |
| for (uint16_t i = 0; i < welfordReminderLoopCount; i++) { | for (uint16_t i = 0; i < welfordReminderLoopCount; i++) { |
| pregLoop = UpdateMask<float>(sreg0); | pregLoop = UpdateMask<float>(sreg0); |
| pregLoop1 = UpdateMask<float>(sreg1); | pregLoop1 = UpdateMask<float>(sreg1); |
| - DataCopy(dichotomyAddMeanL, tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32); | + LoadAlign(dichotomyAddMeanL, tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32); |
| - DataCopy(dichotomyAddMeanR, tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32 + dichotomyAddPower); | + LoadAlign(dichotomyAddMeanR, tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32 + dichotomyAddPower); |
| Muls(dichotomyAddMeanL, dichotomyAddMeanL, countScale, pregMain); | Muls(dichotomyAddMeanL, dichotomyAddMeanL, countScale, pregMain); |
| Muls(dichotomyAddMeanR, dichotomyAddMeanR, countScale, pregLoop); | Muls(dichotomyAddMeanR, dichotomyAddMeanR, countScale, pregLoop); |
| Muls(tmp, dichotomyAddMeanL, coeff, pregLoop1); | Muls(tmp, dichotomyAddMeanL, coeff, pregLoop1); |
| - Copy<float, AscendC::MicroAPI::MaskMergeMode::MERGING>(dichotomyAddMeanL, tmp, pregLoop1); | + Move<float, AscendC::MicroAPI::MaskMergeMode::MERGING>(dichotomyAddMeanL, tmp, pregLoop1); |
| Add(sumMean, dichotomyAddMeanL, dichotomyAddMeanR, pregMain); | Add(sumMean, dichotomyAddMeanL, dichotomyAddMeanR, pregMain); |
| - ReduceSum(mean, sumMean, pregMain); | + Reduce<ReduceType::SUM>(mean, sumMean, pregMain); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( |
| dichotomyAddLocal + i + welfordDiffLoopCount, mean, pregMerge); | dichotomyAddLocal + i + welfordDiffLoopCount, mean, pregMerge); |
| } | } |
| | |
| | |
| for (uint16_t i = 0; i < dichotomyAddReminderLoopCount; i++) { | for (uint16_t i = 0; i < dichotomyAddReminderLoopCount; i++) { |
| pregLoop = UpdateMask<float>(sreg0); | pregLoop = UpdateMask<float>(sreg0); |
| - DataCopy(dichotomyAddMeanL, tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32 + welfordDiffReminderAlign); | + LoadAlign(dichotomyAddMeanL, |
| - DataCopy(dichotomyAddMeanR, tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32 + welfordDiffReminderAlign + | + tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32 + welfordDiffReminderAlign); |
| - dichotomyAddPower); | + LoadAlign(dichotomyAddMeanR, tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32 + |
| + welfordDiffReminderAlign + dichotomyAddPower); |
| Muls(dichotomyAddMeanL, dichotomyAddMeanL, countScale, pregMain); | Muls(dichotomyAddMeanL, dichotomyAddMeanL, countScale, pregMain); |
| Muls(dichotomyAddMeanR, dichotomyAddMeanR, countScale, pregLoop); | Muls(dichotomyAddMeanR, dichotomyAddMeanR, countScale, pregLoop); |
| Add(sumMean, dichotomyAddMeanL, dichotomyAddMeanR, pregMain); | Add(sumMean, dichotomyAddMeanL, dichotomyAddMeanR, pregMain); |
| - ReduceSum(mean, sumMean, pregMain); | + Reduce<ReduceType::SUM>(mean, sumMean, pregMain); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( |
| dichotomyAddLocal + i + welfordDiffLoopCount + welfordReminderLoopCount, mean, pregMerge); | dichotomyAddLocal + i + welfordDiffLoopCount + welfordReminderLoopCount, mean, pregMerge); |
| } | } |
| | |
| for (uint16_t i = 0; i < dichotomyAddPowerRemainLoopCount; i++) { | for (uint16_t i = 0; i < dichotomyAddPowerRemainLoopCount; i++) { |
| - DataCopy(dichotomyAddMeanL, tmpMeanLocal + (i + dichotomyAddReminderRealLoopCount) * VL_FP32); | + LoadAlign(dichotomyAddMeanL, tmpMeanLocal + (i + dichotomyAddReminderRealLoopCount) * VL_FP32); |
| Muls(dichotomyAddMeanL, dichotomyAddMeanL, countScale, pregMain); | Muls(dichotomyAddMeanL, dichotomyAddMeanL, countScale, pregMain); |
| - ReduceSum(mean, dichotomyAddMeanL, pregMain); | + Reduce<ReduceType::SUM>(mean, dichotomyAddMeanL, pregMain); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( |
| dichotomyAddLocal + dichotomyAddReminderRealLoopCount + i, mean, pregMerge); | dichotomyAddLocal + dichotomyAddReminderRealLoopCount + i, mean, pregMerge); |
| } | } |
| DichotomyAdd(mean, dichotomyAddLocal, dichotomyAddK, innerLoopCountOrigin, dichotomyAddLastNum); | DichotomyAdd(mean, dichotomyAddLocal, dichotomyAddK, innerLoopCountOrigin, dichotomyAddLastNum); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(meanLocal + offset, mean, pregMerge); | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(meanLocal + offset, mean, pregMerge); |
| | |
| | |
| Duplicate(one, float(1.0), pregMain); | Duplicate(one, float(1.0), pregMain); |
| Duplicate(mean, mean, pregMain); | Duplicate(mean, mean, pregMain); |
| for (uint16_t i = 0; i < welfordDiffLoopCount; i++) { | for (uint16_t i = 0; i < welfordDiffLoopCount; i++) { |
| - DataCopy(dichotomyAddMeanL, tmpMeanLocal + i * VL_FP32); | + LoadAlign(dichotomyAddMeanL, tmpMeanLocal + i * VL_FP32); |
| Sub(deltaL, dichotomyAddMeanL, mean, pregMain); | Sub(deltaL, dichotomyAddMeanL, mean, pregMain); |
| Mul(deltaL, deltaL, deltaL, pregMain); | Mul(deltaL, deltaL, deltaL, pregMain); |
| Muls(deltaL, deltaL, tailCnt, pregMain); | Muls(deltaL, deltaL, tailCnt, pregMain); |
| - DataCopy(dichotomyAddMeanR, tmpMeanLocal + i * VL_FP32 + dichotomyAddPower); | + LoadAlign(dichotomyAddMeanR, tmpMeanLocal + i * VL_FP32 + dichotomyAddPower); |
| Sub(deltaR, dichotomyAddMeanR, mean, pregMain); | Sub(deltaR, dichotomyAddMeanR, mean, pregMain); |
| Mul(deltaR, deltaR, deltaR, pregMain); | Mul(deltaR, deltaR, deltaR, pregMain); |
| Muls(deltaR, deltaR, cnt, pregMain); | Muls(deltaR, deltaR, cnt, pregMain); |
| | |
| - DataCopy(dichotomyAddVarL, tmpVarLocal + i * VL_FP32); | + LoadAlign(dichotomyAddVarL, tmpVarLocal + i * VL_FP32); |
| Add(dichotomyAddVarL, dichotomyAddVarL, deltaL, pregMain); | Add(dichotomyAddVarL, dichotomyAddVarL, deltaL, pregMain); |
| Muls(dichotomyAddVarL, dichotomyAddVarL, reduceScale, pregMain); | Muls(dichotomyAddVarL, dichotomyAddVarL, reduceScale, pregMain); |
| - DataCopy(dichotomyAddVarR, tmpVarLocal + i * VL_FP32 + dichotomyAddPower); | + LoadAlign(dichotomyAddVarR, tmpVarLocal + i * VL_FP32 + dichotomyAddPower); |
| Add(dichotomyAddVarR, dichotomyAddVarR, deltaR, pregMain); | Add(dichotomyAddVarR, dichotomyAddVarR, deltaR, pregMain); |
| Muls(dichotomyAddVarR, dichotomyAddVarR, reduceScale, pregMain); | Muls(dichotomyAddVarR, dichotomyAddVarR, reduceScale, pregMain); |
| | |
| Add(sumVar, dichotomyAddVarL, dichotomyAddVarR, pregMain); | Add(sumVar, dichotomyAddVarL, dichotomyAddVarR, pregMain); |
| - ReduceSum(var, sumVar, pregMain); | + Reduce<ReduceType::SUM>(var, sumVar, pregMain); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(dichotomyAddLocal + i, var, | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(dichotomyAddLocal + i, var, |
| - pregMerge); | + pregMerge); |
| } | } |
| sreg0 = dichotomyAddReminder - welfordDiffLoopCount * VL_FP32; | sreg0 = dichotomyAddReminder - welfordDiffLoopCount * VL_FP32; |
| sreg1 = welfordDiffReminder; | sreg1 = welfordDiffReminder; |
| for (uint16_t i = 0; i < welfordReminderLoopCount; i++) { | for (uint16_t i = 0; i < welfordReminderLoopCount; i++) { |
| pregLoop = UpdateMask<float>(sreg0); | pregLoop = UpdateMask<float>(sreg0); |
| pregLoop1 = UpdateMask<float>(sreg1); | pregLoop1 = UpdateMask<float>(sreg1); |
| - DataCopy(dichotomyAddMeanL, tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32); | + LoadAlign(dichotomyAddMeanL, tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32); |
| Sub(deltaL, dichotomyAddMeanL, mean, pregMain); | Sub(deltaL, dichotomyAddMeanL, mean, pregMain); |
| Mul(deltaL, deltaL, deltaL, pregMain); | Mul(deltaL, deltaL, deltaL, pregMain); |
| Muls(deltaL, deltaL, cnt, pregMain); | Muls(deltaL, deltaL, cnt, pregMain); |
| - DataCopy(dichotomyAddMeanR, tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32 + dichotomyAddPower); | + LoadAlign(dichotomyAddMeanR, tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32 + dichotomyAddPower); |
| Sub(deltaR, dichotomyAddMeanR, mean, pregLoop); | Sub(deltaR, dichotomyAddMeanR, mean, pregLoop); |
| Mul(deltaR, deltaR, deltaR, pregLoop); | Mul(deltaR, deltaR, deltaR, pregLoop); |
| Muls(deltaR, deltaR, cnt, pregLoop); | Muls(deltaR, deltaR, cnt, pregLoop); |
| Muls(tmp, deltaL, coeff, pregLoop1); | Muls(tmp, deltaL, coeff, pregLoop1); |
| - Copy<float, AscendC::MicroAPI::MaskMergeMode::MERGING>(deltaL, tmp, pregLoop1); | + Move<float, AscendC::MicroAPI::MaskMergeMode::MERGING>(deltaL, tmp, pregLoop1); |
| | |
| - DataCopy(dichotomyAddVarL, tmpVarLocal + (i + welfordDiffLoopCount) * VL_FP32); | + LoadAlign(dichotomyAddVarL, tmpVarLocal + (i + welfordDiffLoopCount) * VL_FP32); |
| Add(dichotomyAddVarL, dichotomyAddVarL, deltaL, pregMain); | Add(dichotomyAddVarL, dichotomyAddVarL, deltaL, pregMain); |
| Muls(dichotomyAddVarL, dichotomyAddVarL, reduceScale, pregMain); | Muls(dichotomyAddVarL, dichotomyAddVarL, reduceScale, pregMain); |
| - DataCopy(dichotomyAddVarR, tmpVarLocal + (i + welfordDiffLoopCount) * VL_FP32 + dichotomyAddPower); | + LoadAlign(dichotomyAddVarR, tmpVarLocal + (i + welfordDiffLoopCount) * VL_FP32 + dichotomyAddPower); |
| Add(dichotomyAddVarR, dichotomyAddVarR, deltaR, pregLoop); | Add(dichotomyAddVarR, dichotomyAddVarR, deltaR, pregLoop); |
| Muls(dichotomyAddVarR, dichotomyAddVarR, reduceScale, pregLoop); | Muls(dichotomyAddVarR, dichotomyAddVarR, reduceScale, pregLoop); |
| | |
| Add(sumVar, dichotomyAddVarL, dichotomyAddVarR, pregMain); | Add(sumVar, dichotomyAddVarL, dichotomyAddVarR, pregMain); |
| - ReduceSum(var, sumVar, pregMain); | + Reduce<ReduceType::SUM>(var, sumVar, pregMain); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( |
| dichotomyAddLocal + i + welfordDiffLoopCount, var, pregMerge); | dichotomyAddLocal + i + welfordDiffLoopCount, var, pregMerge); |
| } | } |
| | |
| for (uint16_t i = 0; i < dichotomyAddReminderLoopCount; i++) { | for (uint16_t i = 0; i < dichotomyAddReminderLoopCount; i++) { |
| pregLoop = UpdateMask<float>(sreg0); | pregLoop = UpdateMask<float>(sreg0); |
| - DataCopy(dichotomyAddMeanL, tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32 + welfordDiffReminderAlign); | + LoadAlign(dichotomyAddMeanL, |
| + tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32 + welfordDiffReminderAlign); |
| Sub(deltaL, dichotomyAddMeanL, mean, pregMain); | Sub(deltaL, dichotomyAddMeanL, mean, pregMain); |
| Mul(deltaL, deltaL, deltaL, pregMain); | Mul(deltaL, deltaL, deltaL, pregMain); |
| Muls(deltaL, deltaL, cnt, pregMain); | Muls(deltaL, deltaL, cnt, pregMain); |
| - DataCopy(dichotomyAddMeanR, tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32 + welfordDiffReminderAlign + | + LoadAlign(dichotomyAddMeanR, tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32 + |
| - dichotomyAddPower); | + welfordDiffReminderAlign + dichotomyAddPower); |
| Sub(deltaR, dichotomyAddMeanR, mean, pregLoop); | Sub(deltaR, dichotomyAddMeanR, mean, pregLoop); |
| Mul(deltaR, deltaR, deltaR, pregLoop); | Mul(deltaR, deltaR, deltaR, pregLoop); |
| Muls(deltaR, deltaR, cnt, pregLoop); | Muls(deltaR, deltaR, cnt, pregLoop); |
| | |
| - DataCopy(dichotomyAddVarL, tmpVarLocal + (i + welfordDiffLoopCount) * VL_FP32 + welfordDiffReminderAlign); | + LoadAlign(dichotomyAddVarL, tmpVarLocal + (i + welfordDiffLoopCount) * VL_FP32 + welfordDiffReminderAlign); |
| Add(dichotomyAddVarL, dichotomyAddVarL, deltaL, pregMain); | Add(dichotomyAddVarL, dichotomyAddVarL, deltaL, pregMain); |
| Muls(dichotomyAddVarL, dichotomyAddVarL, reduceScale, pregMain); | Muls(dichotomyAddVarL, dichotomyAddVarL, reduceScale, pregMain); |
| - DataCopy(dichotomyAddVarR, | + LoadAlign(dichotomyAddVarR, tmpVarLocal + (i + welfordDiffLoopCount) * VL_FP32 + welfordDiffReminderAlign + |
| - tmpVarLocal + (i + welfordDiffLoopCount) * VL_FP32 + welfordDiffReminderAlign + dichotomyAddPower); | + dichotomyAddPower); |
| Add(dichotomyAddVarR, dichotomyAddVarR, deltaR, pregLoop); | Add(dichotomyAddVarR, dichotomyAddVarR, deltaR, pregLoop); |
| Muls(dichotomyAddVarR, dichotomyAddVarR, reduceScale, pregLoop); | Muls(dichotomyAddVarR, dichotomyAddVarR, reduceScale, pregLoop); |
| Add(sumVar, dichotomyAddVarL, dichotomyAddVarR, pregMain); | Add(sumVar, dichotomyAddVarL, dichotomyAddVarR, pregMain); |
| - ReduceSum(var, sumVar, pregMain); | + Reduce<ReduceType::SUM>(var, sumVar, pregMain); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( |
| dichotomyAddLocal + i + welfordDiffLoopCount + welfordReminderLoopCount, var, pregMerge); | dichotomyAddLocal + i + welfordDiffLoopCount + welfordReminderLoopCount, var, pregMerge); |
| } | } |
| | |
| for (uint16_t i = 0; i < dichotomyAddPowerRemainLoopCount; i++) { | for (uint16_t i = 0; i < dichotomyAddPowerRemainLoopCount; i++) { |
| - DataCopy(dichotomyAddMeanL, tmpMeanLocal + (i + dichotomyAddReminderRealLoopCount) * VL_FP32); | + LoadAlign(dichotomyAddMeanL, tmpMeanLocal + (i + dichotomyAddReminderRealLoopCount) * VL_FP32); |
| Sub(deltaL, dichotomyAddMeanL, mean, pregMain); | Sub(deltaL, dichotomyAddMeanL, mean, pregMain); |
| Mul(deltaL, deltaL, deltaL, pregMain); | Mul(deltaL, deltaL, deltaL, pregMain); |
| Muls(deltaL, deltaL, cnt, pregMain); | Muls(deltaL, deltaL, cnt, pregMain); |
| - DataCopy(dichotomyAddVarL, tmpVarLocal + (i + dichotomyAddReminderRealLoopCount) * VL_FP32); | + LoadAlign(dichotomyAddVarL, tmpVarLocal + (i + dichotomyAddReminderRealLoopCount) * VL_FP32); |
| Add(dichotomyAddVarL, dichotomyAddVarL, deltaL, pregMain); | Add(dichotomyAddVarL, dichotomyAddVarL, deltaL, pregMain); |
| Muls(dichotomyAddVarL, dichotomyAddVarL, reduceScale, pregMain); | Muls(dichotomyAddVarL, dichotomyAddVarL, reduceScale, pregMain); |
| - ReduceSum(var, dichotomyAddVarL, pregMain); | + Reduce<ReduceType::SUM>(var, dichotomyAddVarL, pregMain); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( |
| dichotomyAddLocal + dichotomyAddReminderRealLoopCount + i, var, pregMerge); | dichotomyAddLocal + dichotomyAddReminderRealLoopCount + i, var, pregMerge); |
| } | } |
| DichotomyAdd(var, dichotomyAddLocal, dichotomyAddK, innerLoopCountOrigin, dichotomyAddLastNum); | DichotomyAdd(var, dichotomyAddLocal, dichotomyAddK, innerLoopCountOrigin, dichotomyAddLastNum); |
| CalRstdByHighPrecision(var, rstd, eps); | CalRstdByHighPrecision(var, rstd, eps); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(rstdLocal + offset, rstd, pregMerge); | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(rstdLocal + offset, rstd, pregMerge); |
| } | } |
| } | } |
| | |
| |
| __aicore__ inline void VFWelfordParallelFinalizeNonAlignSituation3( | __aicore__ inline void VFWelfordParallelFinalizeNonAlignSituation3( |
| - __local_mem__ float* meanLocal, __local_mem__ float* rstdLocal, __local_mem__ float* tmpMeanLocal, | + __ubuf__ float* meanLocal, __ubuf__ float* rstdLocal, __ubuf__ float* tmpMeanLocal, __ubuf__ float* tmpVarLocal, |
| - __local_mem__ float* tmpVarLocal, __local_mem__ float* dichotomyAddLocal, uint32_t reduceCount, | + __ubuf__ float* dichotomyAddLocal, uint32_t reduceCount, uint32_t dichotomyAddPower, uint32_t dichotomyAddK, |
| - uint32_t dichotomyAddPower, uint32_t dichotomyAddK, uint32_t dichotomyAddLastNum, uint32_t offset, | + uint32_t dichotomyAddLastNum, uint32_t offset, uint32_t tailSize, float reduceScale, float cnt, float eps) |
| - uint32_t tailSize, float reduceScale, float cnt, float eps) | |
| { | { |
| float tailCnt = cnt + float(1.0); | float tailCnt = cnt + float(1.0); |
| float coeff = tailCnt / cnt; | float coeff = tailCnt / cnt; |
| @@ -900,50 +898,50 @@ __aicore__ inline void VFWelfordParallelFinalizeNonAlignSituation3( |
| | |
| for (uint16_t i = 0; i < dichotomyAddReminderLoopCount; i++) { | for (uint16_t i = 0; i < dichotomyAddReminderLoopCount; i++) { |
| pregLoop = UpdateMask<float>(sreg0); | pregLoop = UpdateMask<float>(sreg0); |
| - DataCopy(dichotomyAddMeanL, tmpMeanLocal + i * VL_FP32); | + LoadAlign(dichotomyAddMeanL, tmpMeanLocal + i * VL_FP32); |
| - DataCopy(dichotomyAddMeanR, tmpMeanLocal + i * VL_FP32 + dichotomyAddPower); | + LoadAlign(dichotomyAddMeanR, tmpMeanLocal + i * VL_FP32 + dichotomyAddPower); |
| Muls(dichotomyAddMeanL, dichotomyAddMeanL, tailCountScale, pregMain); | Muls(dichotomyAddMeanL, dichotomyAddMeanL, tailCountScale, pregMain); |
| Muls(dichotomyAddMeanR, dichotomyAddMeanR, countScale, pregLoop); | Muls(dichotomyAddMeanR, dichotomyAddMeanR, countScale, pregLoop); |
| Add(sumMean, dichotomyAddMeanL, dichotomyAddMeanR, pregMain); | Add(sumMean, dichotomyAddMeanL, dichotomyAddMeanR, pregMain); |
| - ReduceSum(mean, sumMean, pregMain); | + Reduce<ReduceType::SUM>(mean, sumMean, pregMain); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(dichotomyAddLocal + i, mean, | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(dichotomyAddLocal + i, mean, |
| - pregMerge); | + pregMerge); |
| } | } |
| | |
| | |
| | |
| for (uint16_t i = 0; i < welfordDiffLoopCount; i++) { | for (uint16_t i = 0; i < welfordDiffLoopCount; i++) { |
| - DataCopy(dichotomyAddMeanL, tmpMeanLocal + i * VL_FP32 + dichotomyAddReminderRoundUp); | + LoadAlign(dichotomyAddMeanL, tmpMeanLocal + i * VL_FP32 + dichotomyAddReminderRoundUp); |
| Muls(dichotomyAddMeanL, dichotomyAddMeanL, tailCountScale, pregMain); | Muls(dichotomyAddMeanL, dichotomyAddMeanL, tailCountScale, pregMain); |
| - ReduceSum(mean, dichotomyAddMeanL, pregMain); | + Reduce<ReduceType::SUM>(mean, dichotomyAddMeanL, pregMain); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( |
| dichotomyAddLocal + dichotomyAddReminderLoopCount + i, mean, pregMerge); | dichotomyAddLocal + dichotomyAddReminderLoopCount + i, mean, pregMerge); |
| } | } |
| | |
| sreg0 = welfordDiffReminder; | sreg0 = welfordDiffReminder; |
| for (uint16_t i = 0; i < welfordReminderLoopCount; i++) { | for (uint16_t i = 0; i < welfordReminderLoopCount; i++) { |
| pregLoop = UpdateMask<float>(sreg0); | pregLoop = UpdateMask<float>(sreg0); |
| - DataCopy(dichotomyAddMeanL, | + LoadAlign(dichotomyAddMeanL, |
| - tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32 + dichotomyAddReminderRoundUp); | + tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32 + dichotomyAddReminderRoundUp); |
| Muls(dichotomyAddMeanL, dichotomyAddMeanL, countScale, pregMain); | Muls(dichotomyAddMeanL, dichotomyAddMeanL, countScale, pregMain); |
| Muls(tmp, dichotomyAddMeanL, coeff, pregLoop); | Muls(tmp, dichotomyAddMeanL, coeff, pregLoop); |
| - Copy<float, AscendC::MicroAPI::MaskMergeMode::MERGING>(dichotomyAddMeanL, tmp, pregLoop); | + Move<float, AscendC::MicroAPI::MaskMergeMode::MERGING>(dichotomyAddMeanL, tmp, pregLoop); |
| - ReduceSum(mean, dichotomyAddMeanL, pregMain); | + Reduce<ReduceType::SUM>(mean, dichotomyAddMeanL, pregMain); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( |
| dichotomyAddLocal + dichotomyAddReminderLoopCount + welfordDiffLoopCount + i, mean, pregMerge); | dichotomyAddLocal + dichotomyAddReminderLoopCount + welfordDiffLoopCount + i, mean, pregMerge); |
| } | } |
| | |
| for (uint16_t i = 0; i < dichotomyAddPowerRemainLoopCount; i++) { | for (uint16_t i = 0; i < dichotomyAddPowerRemainLoopCount; i++) { |
| - DataCopy(dichotomyAddMeanL, tmpMeanLocal + i * VL_FP32 + dichotomyAddPowerOffset); | + LoadAlign(dichotomyAddMeanL, tmpMeanLocal + i * VL_FP32 + dichotomyAddPowerOffset); |
| Muls(dichotomyAddMeanL, dichotomyAddMeanL, countScale, pregMain); | Muls(dichotomyAddMeanL, dichotomyAddMeanL, countScale, pregMain); |
| - ReduceSum(mean, dichotomyAddMeanL, pregMain); | + Reduce<ReduceType::SUM>(mean, dichotomyAddMeanL, pregMain); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( |
| dichotomyAddLocal + dichotomyAddReminderLoopCount + welfordDiffLoopCount + welfordReminderLoopCount + i, | dichotomyAddLocal + dichotomyAddReminderLoopCount + welfordDiffLoopCount + welfordReminderLoopCount + i, |
| mean, pregMerge); | mean, pregMerge); |
| } | } |
| | |
| DichotomyAdd(mean, dichotomyAddLocal, dichotomyAddK, innerLoopCountOrigin, dichotomyAddLastNum); | DichotomyAdd(mean, dichotomyAddLocal, dichotomyAddK, innerLoopCountOrigin, dichotomyAddLastNum); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(meanLocal + offset, mean, pregMerge); | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(meanLocal + offset, mean, pregMerge); |
| | |
| | |
| Duplicate(one, float(1.0), pregMain); | Duplicate(one, float(1.0), pregMain); |
| @@ -952,85 +950,84 @@ __aicore__ inline void VFWelfordParallelFinalizeNonAlignSituation3( |
| sreg0 = dichotomyAddReminder; | sreg0 = dichotomyAddReminder; |
| for (uint16_t i = 0; i < dichotomyAddReminderLoopCount; i++) { | for (uint16_t i = 0; i < dichotomyAddReminderLoopCount; i++) { |
| pregLoop = UpdateMask<float>(sreg0); | pregLoop = UpdateMask<float>(sreg0); |
| - DataCopy(dichotomyAddMeanL, tmpMeanLocal + i * VL_FP32); | + LoadAlign(dichotomyAddMeanL, tmpMeanLocal + i * VL_FP32); |
| Sub(deltaL, dichotomyAddMeanL, mean, pregMain); | Sub(deltaL, dichotomyAddMeanL, mean, pregMain); |
| Mul(deltaL, deltaL, deltaL, pregMain); | Mul(deltaL, deltaL, deltaL, pregMain); |
| Muls(deltaL, deltaL, tailCnt, pregMain); | Muls(deltaL, deltaL, tailCnt, pregMain); |
| - DataCopy(dichotomyAddVarL, tmpVarLocal + i * VL_FP32); | + LoadAlign(dichotomyAddVarL, tmpVarLocal + i * VL_FP32); |
| Add(dichotomyAddVarL, dichotomyAddVarL, deltaL, pregMain); | Add(dichotomyAddVarL, dichotomyAddVarL, deltaL, pregMain); |
| Muls(dichotomyAddVarL, dichotomyAddVarL, reduceScale, pregMain); | Muls(dichotomyAddVarL, dichotomyAddVarL, reduceScale, pregMain); |
| | |
| - DataCopy(dichotomyAddMeanR, tmpMeanLocal + i * VL_FP32 + dichotomyAddPower); | + LoadAlign(dichotomyAddMeanR, tmpMeanLocal + i * VL_FP32 + dichotomyAddPower); |
| Sub(deltaR, dichotomyAddMeanR, mean, pregLoop); | Sub(deltaR, dichotomyAddMeanR, mean, pregLoop); |
| Mul(deltaR, deltaR, deltaR, pregLoop); | Mul(deltaR, deltaR, deltaR, pregLoop); |
| Muls(deltaR, deltaR, cnt, pregLoop); | Muls(deltaR, deltaR, cnt, pregLoop); |
| - DataCopy(dichotomyAddVarR, tmpVarLocal + i * VL_FP32 + dichotomyAddPower); | + LoadAlign(dichotomyAddVarR, tmpVarLocal + i * VL_FP32 + dichotomyAddPower); |
| Add(dichotomyAddVarR, dichotomyAddVarR, deltaR, pregLoop); | Add(dichotomyAddVarR, dichotomyAddVarR, deltaR, pregLoop); |
| Muls(dichotomyAddVarR, dichotomyAddVarR, reduceScale, pregLoop); | Muls(dichotomyAddVarR, dichotomyAddVarR, reduceScale, pregLoop); |
| | |
| Add(sumVar, dichotomyAddVarL, dichotomyAddVarR, pregMain); | Add(sumVar, dichotomyAddVarL, dichotomyAddVarR, pregMain); |
| - ReduceSum(var, sumVar, pregMain); | + Reduce<ReduceType::SUM>(var, sumVar, pregMain); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(dichotomyAddLocal + i, var, | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(dichotomyAddLocal + i, var, |
| - pregMerge); | + pregMerge); |
| } | } |
| | |
| | |
| for (uint16_t i = 0; i < welfordDiffLoopCount; i++) { | for (uint16_t i = 0; i < welfordDiffLoopCount; i++) { |
| - DataCopy(dichotomyAddMeanL, tmpMeanLocal + i * VL_FP32 + dichotomyAddReminderRoundUp); | + LoadAlign(dichotomyAddMeanL, tmpMeanLocal + i * VL_FP32 + dichotomyAddReminderRoundUp); |
| Sub(deltaL, dichotomyAddMeanL, mean, pregMain); | Sub(deltaL, dichotomyAddMeanL, mean, pregMain); |
| Mul(deltaL, deltaL, deltaL, pregMain); | Mul(deltaL, deltaL, deltaL, pregMain); |
| Muls(deltaL, deltaL, tailCnt, pregMain); | Muls(deltaL, deltaL, tailCnt, pregMain); |
| - DataCopy(dichotomyAddVarL, tmpVarLocal + i * VL_FP32 + dichotomyAddReminderRoundUp); | + LoadAlign(dichotomyAddVarL, tmpVarLocal + i * VL_FP32 + dichotomyAddReminderRoundUp); |
| Add(dichotomyAddVarL, dichotomyAddVarL, deltaL, pregMain); | Add(dichotomyAddVarL, dichotomyAddVarL, deltaL, pregMain); |
| Muls(dichotomyAddVarL, dichotomyAddVarL, reduceScale, pregMain); | Muls(dichotomyAddVarL, dichotomyAddVarL, reduceScale, pregMain); |
| - ReduceSum(var, dichotomyAddVarL, pregMain); | + Reduce<ReduceType::SUM>(var, dichotomyAddVarL, pregMain); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( |
| dichotomyAddLocal + dichotomyAddReminderLoopCount + i, var, pregMerge); | dichotomyAddLocal + dichotomyAddReminderLoopCount + i, var, pregMerge); |
| } | } |
| | |
| sreg0 = welfordDiffReminder; | sreg0 = welfordDiffReminder; |
| for (uint16_t i = 0; i < welfordReminderLoopCount; i++) { | for (uint16_t i = 0; i < welfordReminderLoopCount; i++) { |
| pregLoop = UpdateMask<float>(sreg0); | pregLoop = UpdateMask<float>(sreg0); |
| - DataCopy(dichotomyAddMeanL, | + LoadAlign(dichotomyAddMeanL, |
| - tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32 + dichotomyAddReminderRoundUp); | + tmpMeanLocal + (i + welfordDiffLoopCount) * VL_FP32 + dichotomyAddReminderRoundUp); |
| Sub(deltaL, dichotomyAddMeanL, mean, pregMain); | Sub(deltaL, dichotomyAddMeanL, mean, pregMain); |
| Mul(deltaL, deltaL, deltaL, pregMain); | Mul(deltaL, deltaL, deltaL, pregMain); |
| Muls(deltaL, deltaL, cnt, pregMain); | Muls(deltaL, deltaL, cnt, pregMain); |
| Muls(tmp, deltaL, coeff, pregLoop); | Muls(tmp, deltaL, coeff, pregLoop); |
| - Copy<float, AscendC::MicroAPI::MaskMergeMode::MERGING>(deltaL, tmp, pregLoop); | + Move<float, AscendC::MicroAPI::MaskMergeMode::MERGING>(deltaL, tmp, pregLoop); |
| - DataCopy(dichotomyAddVarL, | + LoadAlign(dichotomyAddVarL, |
| - tmpVarLocal + (i + welfordDiffLoopCount) * VL_FP32 + dichotomyAddReminderRoundUp); | + tmpVarLocal + (i + welfordDiffLoopCount) * VL_FP32 + dichotomyAddReminderRoundUp); |
| Add(dichotomyAddVarL, dichotomyAddVarL, deltaL, pregMain); | Add(dichotomyAddVarL, dichotomyAddVarL, deltaL, pregMain); |
| Muls(dichotomyAddVarL, dichotomyAddVarL, reduceScale, pregMain); | Muls(dichotomyAddVarL, dichotomyAddVarL, reduceScale, pregMain); |
| - ReduceSum(var, dichotomyAddVarL, pregMain); | + Reduce<ReduceType::SUM>(var, dichotomyAddVarL, pregMain); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( |
| dichotomyAddLocal + dichotomyAddReminderLoopCount + welfordDiffLoopCount + i, var, pregMerge); | dichotomyAddLocal + dichotomyAddReminderLoopCount + welfordDiffLoopCount + i, var, pregMerge); |
| } | } |
| | |
| for (uint16_t i = 0; i < dichotomyAddPowerRemainLoopCount; i++) { | for (uint16_t i = 0; i < dichotomyAddPowerRemainLoopCount; i++) { |
| - DataCopy(dichotomyAddMeanL, tmpMeanLocal + i * VL_FP32 + dichotomyAddPowerOffset); | + LoadAlign(dichotomyAddMeanL, tmpMeanLocal + i * VL_FP32 + dichotomyAddPowerOffset); |
| Sub(deltaL, dichotomyAddMeanL, mean, pregMain); | Sub(deltaL, dichotomyAddMeanL, mean, pregMain); |
| Mul(deltaL, deltaL, deltaL, pregMain); | Mul(deltaL, deltaL, deltaL, pregMain); |
| Muls(deltaL, deltaL, cnt, pregMain); | Muls(deltaL, deltaL, cnt, pregMain); |
| - DataCopy(dichotomyAddVarL, tmpVarLocal + i * VL_FP32 + dichotomyAddPowerOffset); | + LoadAlign(dichotomyAddVarL, tmpVarLocal + i * VL_FP32 + dichotomyAddPowerOffset); |
| Add(dichotomyAddVarL, dichotomyAddVarL, deltaL, pregMain); | Add(dichotomyAddVarL, dichotomyAddVarL, deltaL, pregMain); |
| Muls(dichotomyAddVarL, dichotomyAddVarL, reduceScale, pregMain); | Muls(dichotomyAddVarL, dichotomyAddVarL, reduceScale, pregMain); |
| - ReduceSum(var, dichotomyAddVarL, pregMain); | + Reduce<ReduceType::SUM>(var, dichotomyAddVarL, pregMain); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( |
| dichotomyAddLocal + dichotomyAddReminderLoopCount + welfordDiffLoopCount + welfordReminderLoopCount + i, | dichotomyAddLocal + dichotomyAddReminderLoopCount + welfordDiffLoopCount + welfordReminderLoopCount + i, |
| var, pregMerge); | var, pregMerge); |
| } | } |
| | |
| DichotomyAdd(var, dichotomyAddLocal, dichotomyAddK, innerLoopCountOrigin, dichotomyAddLastNum); | DichotomyAdd(var, dichotomyAddLocal, dichotomyAddK, innerLoopCountOrigin, dichotomyAddLastNum); |
| CalRstdByHighPrecision(var, rstd, eps); | CalRstdByHighPrecision(var, rstd, eps); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(rstdLocal + offset, rstd, pregMerge); | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(rstdLocal + offset, rstd, pregMerge); |
| } | } |
| } | } |
| | |
| -__aicore__ inline void VFWelfordParallelFinalizeNonAlign(__local_mem__ float* meanLocal, __local_mem__ float* rstdLocal, | +__aicore__ inline void VFWelfordParallelFinalizeNonAlign(__ubuf__ float* meanLocal, __ubuf__ float* rstdLocal, |
| - __local_mem__ float* tmpMeanLocal, | + __ubuf__ float* tmpMeanLocal, __ubuf__ float* tmpVarLocal, |
| - __local_mem__ float* tmpVarLocal, | + __ubuf__ float* dichotomyAddLocal, uint32_t reduceCount, |
| - __local_mem__ float* dichotomyAddLocal, uint32_t reduceCount, | |
| uint32_t dichotomyAddPower, uint32_t dichotomyAddK, | uint32_t dichotomyAddPower, uint32_t dichotomyAddK, |
| uint32_t dichotomyAddLastNum, uint32_t offset, | uint32_t dichotomyAddLastNum, uint32_t offset, |
| uint32_t tailSize, float reduceScale, float cnt, float eps) | uint32_t tailSize, float reduceScale, float cnt, float eps) |
| @@ -1055,9 +1052,9 @@ __aicore__ inline void VFWelfordParallelFinalizeNonAlign(__local_mem__ float* me |
| offset, tailSize, reduceScale, cnt, eps); | offset, tailSize, reduceScale, cnt, eps); |
| } | } |
| | |
| -__aicore__ inline void VFWelfordParallelFinalize(__local_mem__ float* meanLocal, __local_mem__ float* rstdLocal, | +__aicore__ inline void VFWelfordParallelFinalize(__ubuf__ float* meanLocal, __ubuf__ float* rstdLocal, |
| - __local_mem__ float* tmpMeanLocal, __local_mem__ float* tmpVarLocal, | + __ubuf__ float* tmpMeanLocal, __ubuf__ float* tmpVarLocal, |
| - __local_mem__ float* dichotomyAddLocal, uint32_t reduceCount, | + __ubuf__ float* dichotomyAddLocal, uint32_t reduceCount, |
| uint32_t dichotomyAddPower, uint32_t dichotomyAddK, | uint32_t dichotomyAddPower, uint32_t dichotomyAddK, |
| uint32_t dichotomyAddLastNum, uint32_t offset, uint32_t tailSize, | uint32_t dichotomyAddLastNum, uint32_t offset, uint32_t tailSize, |
| float reduceScale, float scale, float cnt, float eps, | float reduceScale, float scale, float cnt, float eps, |
| @@ -1076,12 +1073,11 @@ __aicore__ inline void VFWelfordParallelFinalize(__local_mem__ float* meanLocal, |
| } | } |
| | |
| template <typename T> | template <typename T> |
| -__aicore__ inline void CalMeanAndRstdByDichotomyAdd(__local_mem__ T* xLocal, __local_mem__ float* meanLocal, | +__aicore__ inline void CalMeanAndRstdByDichotomyAdd(__ubuf__ T* xLocal, __ubuf__ float* meanLocal, |
| - __local_mem__ float* rstdLocal, | + __ubuf__ float* rstdLocal, __ubuf__ float* dichotomyAddLocal, |
| - __local_mem__ float* dichotomyAddLocal, uint16_t numPerCoreProcess, | + uint16_t numPerCoreProcess, uint32_t dichotomyAddPower, |
| - uint32_t dichotomyAddPower, uint32_t dichotomyAddK, | + uint32_t dichotomyAddK, uint32_t dichotomyAddLastNum, |
| - uint32_t dichotomyAddLastNum, uint64_t powerOfTwoForReduce, | + uint64_t powerOfTwoForReduce, uint64_t reduceCount, float eps) |
| - uint64_t reduceCount, float eps) | |
| { | { |
| uint32_t dichotomyAddReminder = reduceCount - dichotomyAddPower; | uint32_t dichotomyAddReminder = reduceCount - dichotomyAddPower; |
| uint16_t dichotomyAddReminderLoopCount = CeilDiv(dichotomyAddReminder, VL_FP32); | uint16_t dichotomyAddReminderLoopCount = CeilDiv(dichotomyAddReminder, VL_FP32); |
| @@ -1116,9 +1112,9 @@ __aicore__ inline void CalMeanAndRstdByDichotomyAdd(__local_mem__ T* xLocal, __l |
| Muls(dichotomyAddL, dichotomyAddL, n, pregMain); | Muls(dichotomyAddL, dichotomyAddL, n, pregMain); |
| Muls(dichotomyAddR, dichotomyAddR, n, pregLoop); | Muls(dichotomyAddR, dichotomyAddR, n, pregLoop); |
| Add(sumMean, dichotomyAddL, dichotomyAddR, pregMain); | Add(sumMean, dichotomyAddL, dichotomyAddR, pregMain); |
| - ReduceSum(mean, sumMean, pregMain); | + Reduce<ReduceType::SUM>(mean, sumMean, pregMain); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(dichotomyAddLocal + j, mean, | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(dichotomyAddLocal + j, mean, |
| - pregMerge); | + pregMerge); |
| } | } |
| | |
| | |
| @@ -1126,14 +1122,14 @@ __aicore__ inline void CalMeanAndRstdByDichotomyAdd(__local_mem__ T* xLocal, __l |
| LoadInputData<T>(dichotomyAddL, xLocal, pregMain, | LoadInputData<T>(dichotomyAddL, xLocal, pregMain, |
| i * elemNumAlign + (j + dichotomyAddReminderLoopCount) * VL_FP32); | i * elemNumAlign + (j + dichotomyAddReminderLoopCount) * VL_FP32); |
| Muls(dichotomyAddL, dichotomyAddL, n, pregMain); | Muls(dichotomyAddL, dichotomyAddL, n, pregMain); |
| - ReduceSum(mean, dichotomyAddL, pregMain); | + Reduce<ReduceType::SUM>(mean, dichotomyAddL, pregMain); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( |
| dichotomyAddLocal + dichotomyAddReminderLoopCount + j, mean, pregMerge); | dichotomyAddLocal + dichotomyAddReminderLoopCount + j, mean, pregMerge); |
| } | } |
| | |
| DichotomyAdd(mean, dichotomyAddLocal, dichotomyAddK, innerLoopCountOrigin, dichotomyAddLastNum); | DichotomyAdd(mean, dichotomyAddLocal, dichotomyAddK, innerLoopCountOrigin, dichotomyAddLastNum); |
| Muls(mean, mean, nCorrectionFactor, pregMerge); | Muls(mean, mean, nCorrectionFactor, pregMerge); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(meanLocal + i, mean, pregMerge); | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(meanLocal + i, mean, pregMerge); |
| | |
| Duplicate(one, float(1.0), pregMain); | Duplicate(one, float(1.0), pregMain); |
| Duplicate(mean, mean, pregMain); | Duplicate(mean, mean, pregMain); |
| @@ -1149,9 +1145,9 @@ __aicore__ inline void CalMeanAndRstdByDichotomyAdd(__local_mem__ T* xLocal, __l |
| Muls(dichotomyAddL, dichotomyAddL, n, pregMain); | Muls(dichotomyAddL, dichotomyAddL, n, pregMain); |
| Muls(dichotomyAddR, dichotomyAddR, n, pregLoop); | Muls(dichotomyAddR, dichotomyAddR, n, pregLoop); |
| Add(sumVar, dichotomyAddL, dichotomyAddR, pregMain); | Add(sumVar, dichotomyAddL, dichotomyAddR, pregMain); |
| - ReduceSum(var, sumVar, pregMain); | + Reduce<ReduceType::SUM>(var, sumVar, pregMain); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(dichotomyAddLocal + j, var, | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(dichotomyAddLocal + j, var, |
| - pregMerge); | + pregMerge); |
| } | } |
| | |
| | |
| @@ -1161,23 +1157,23 @@ __aicore__ inline void CalMeanAndRstdByDichotomyAdd(__local_mem__ T* xLocal, __l |
| Sub(dichotomyAddL, dichotomyAddL, mean, pregMain); | Sub(dichotomyAddL, dichotomyAddL, mean, pregMain); |
| Mul(dichotomyAddL, dichotomyAddL, dichotomyAddL, pregMain); | Mul(dichotomyAddL, dichotomyAddL, dichotomyAddL, pregMain); |
| Muls(dichotomyAddL, dichotomyAddL, n, pregMain); | Muls(dichotomyAddL, dichotomyAddL, n, pregMain); |
| - ReduceSum(var, dichotomyAddL, pregMain); | + Reduce<ReduceType::SUM>(var, dichotomyAddL, pregMain); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>( |
| dichotomyAddLocal + dichotomyAddReminderLoopCount + j, var, pregMerge); | dichotomyAddLocal + dichotomyAddReminderLoopCount + j, var, pregMerge); |
| } | } |
| DichotomyAdd(var, dichotomyAddLocal, dichotomyAddK, innerLoopCountOrigin, dichotomyAddLastNum); | DichotomyAdd(var, dichotomyAddLocal, dichotomyAddK, innerLoopCountOrigin, dichotomyAddLastNum); |
| Muls(var, var, nCorrectionFactor, pregMerge); | Muls(var, var, nCorrectionFactor, pregMerge); |
| CalRstdByHighPrecision(var, rstd, eps); | CalRstdByHighPrecision(var, rstd, eps); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(rstdLocal + i, rstd, pregMerge); | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(rstdLocal + i, rstd, pregMerge); |
| } | } |
| } | } |
| } | } |
| | |
| |
| template <typename T> | template <typename T> |
| -__aicore__ inline void CalMeanAndRstdSpecial(__local_mem__ T* xLocal, __local_mem__ float* meanLocal, | +__aicore__ inline void CalMeanAndRstdSpecial(__ubuf__ T* xLocal, __ubuf__ float* meanLocal, __ubuf__ float* rstdLocal, |
| - __local_mem__ float* rstdLocal, uint16_t numPerCoreProcess, | + uint16_t numPerCoreProcess, uint64_t powerOfTwoForReduce, |
| - uint64_t powerOfTwoForReduce, uint64_t reduceCount, float eps) | + uint64_t reduceCount, float eps) |
| { | { |
| uint32_t elemNumAlign = RoundUp<T>(reduceCount); | uint32_t elemNumAlign = RoundUp<T>(reduceCount); |
| float n = static_cast<float>(1) / static_cast<float>(powerOfTwoForReduce); | float n = static_cast<float>(1) / static_cast<float>(powerOfTwoForReduce); |
| @@ -1199,28 +1195,27 @@ __aicore__ inline void CalMeanAndRstdSpecial(__local_mem__ T* xLocal, __local_me |
| pregLoop = UpdateMask<float>(sreg0); | pregLoop = UpdateMask<float>(sreg0); |
| LoadInputData<T>(x, xLocal, pregLoop, i * elemNumAlign); | LoadInputData<T>(x, xLocal, pregLoop, i * elemNumAlign); |
| Muls(xScale, x, n, pregLoop); | Muls(xScale, x, n, pregLoop); |
| - ReduceSum(mean, xScale, pregLoop); | + Reduce<ReduceType::SUM>(mean, xScale, pregLoop); |
| Muls(mean, mean, nCorrectionFactor, pregMerge); | Muls(mean, mean, nCorrectionFactor, pregMerge); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(meanLocal + i, mean, pregMerge); | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(meanLocal + i, mean, pregMerge); |
| | |
| Duplicate(mean, mean, pregMain); | Duplicate(mean, mean, pregMain); |
| Sub(x, x, mean, pregLoop); | Sub(x, x, mean, pregLoop); |
| Mul(x, x, x, pregLoop); | Mul(x, x, x, pregLoop); |
| Muls(xScale, x, n, pregLoop); | Muls(xScale, x, n, pregLoop); |
| - ReduceSum(var, xScale, pregLoop); | + Reduce<ReduceType::SUM>(var, xScale, pregLoop); |
| Muls(var, var, nCorrectionFactor, pregMerge); | Muls(var, var, nCorrectionFactor, pregMerge); |
| CalRstdByHighPrecision(var, rstd, eps); | CalRstdByHighPrecision(var, rstd, eps); |
| - DataCopy<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(rstdLocal + i, rstd, pregMerge); | + StoreAlign<float, AscendC::MicroAPI::StoreDist::DIST_FIRST_ELEMENT_B32>(rstdLocal + i, rstd, pregMerge); |
| } | } |
| } | } |
| } | } |
| | |
| template <typename T> | template <typename T> |
| -__aicore__ inline void CalMeanAndRstd(__local_mem__ T* xLocal, __local_mem__ float* meanLocal, | +__aicore__ inline void CalMeanAndRstd(__ubuf__ T* xLocal, __ubuf__ float* meanLocal, __ubuf__ float* rstdLocal, |
| - __local_mem__ float* rstdLocal, __local_mem__ float* dichotomyAddLocal, | + __ubuf__ float* dichotomyAddLocal, uint16_t numPerCoreProcess, |
| - uint16_t numPerCoreProcess, uint32_t dichotomyAddPower, uint32_t dichotomyAddK, | + uint32_t dichotomyAddPower, uint32_t dichotomyAddK, uint32_t dichotomyAddLastNum, |
| - uint32_t dichotomyAddLastNum, uint64_t powerOfTwoForReduce, uint64_t reduceCount, | + uint64_t powerOfTwoForReduce, uint64_t reduceCount, float eps) |
| - float eps) | |
| { | { |
| if (dichotomyAddPower >= VL_FP32) { | if (dichotomyAddPower >= VL_FP32) { |
| CalMeanAndRstdByDichotomyAdd(xLocal, meanLocal, rstdLocal, dichotomyAddLocal, numPerCoreProcess, | CalMeanAndRstdByDichotomyAdd(xLocal, meanLocal, rstdLocal, dichotomyAddLocal, numPerCoreProcess, |
| @@ -1267,9 +1262,9 @@ __aicore__ inline void VFInnerNormalize(RegTensor<float>& x, RegTensor<float>& m |
| } | } |
| | |
| template <typename T1, typename T2, bool activateSilu, bool hasGamma, bool hasBeta> | template <typename T1, typename T2, bool activateSilu, bool hasGamma, bool hasBeta> |
| -__aicore__ inline void VFInnerNormalizeAndSwishUnAlign(__local_mem__ T1* xLocal, __local_mem__ T2* gammaLocal, | +__aicore__ inline void VFInnerNormalizeAndSwishUnAlign(__ubuf__ T1* xLocal, __ubuf__ T2* gammaLocal, |
| - __local_mem__ T2* betaLocal, __local_mem__ float* meanLocal, | + __ubuf__ T2* betaLocal, __ubuf__ float* meanLocal, |
| - __local_mem__ float* rstdLocal, __local_mem__ T1* yLocal, | + __ubuf__ float* rstdLocal, __ubuf__ T1* yLocal, |
| uint16_t rowsCount, int32_t reduceCount) | uint16_t rowsCount, int32_t reduceCount) |
| { | { |
| uint16_t VL = GetVLSize<T1>(); | uint16_t VL = GetVLSize<T1>(); |
| @@ -1291,11 +1286,11 @@ __aicore__ inline void VFInnerNormalizeAndSwishUnAlign(__local_mem__ T1* xLocal, |
| MaskReg pregLoop; | MaskReg pregLoop; |
| MaskReg pregMain = CreateMask<T1, AscendC::MicroAPI::MaskPattern::ALL>(); | MaskReg pregMain = CreateMask<T1, AscendC::MicroAPI::MaskPattern::ALL>(); |
| | |
| - UnalignReg uSrc; | + UnalignRegForLoad uSrc; |
| - UnalignReg uDst; | + UnalignRegForStore uDst; |
| - DataCopy<float, AscendC::MicroAPI::LoadDist::DIST_BRC_B32>(rstd, rstdLocal); | + LoadAlign<float, AscendC::MicroAPI::LoadDist::DIST_BRC_B32>(rstd, rstdLocal); |
| - DataCopy<float, AscendC::MicroAPI::LoadDist::DIST_BRC_B32>(mean, meanLocal); | + LoadAlign<float, AscendC::MicroAPI::LoadDist::DIST_BRC_B32>(mean, meanLocal); |
| - DataCopyUnAlignPre<T1>(uSrc, xLocal); | + LoadUnAlignPre<T1>(uSrc, xLocal); |
| for (uint16_t i = 0; i < rowsCount; i++) { | for (uint16_t i = 0; i < rowsCount; i++) { |
| LoadGammaAndBetaData<T2, hasGamma, hasBeta>(gamma, beta, gammaLocal, betaLocal, pregMain, i); | LoadGammaAndBetaData<T2, hasGamma, hasBeta>(gamma, beta, gammaLocal, betaLocal, pregMain, i); |
| if constexpr (IsSameType<T1, half>::value || IsSameType<T1, bfloat16_t>::value) { | if constexpr (IsSameType<T1, half>::value || IsSameType<T1, bfloat16_t>::value) { |
| @@ -1304,7 +1299,7 @@ __aicore__ inline void VFInnerNormalizeAndSwishUnAlign(__local_mem__ T1* xLocal, |
| RegTensor<T1> yOddTmp; | RegTensor<T1> yOddTmp; |
| RegTensor<T1> yTmp; | RegTensor<T1> yTmp; |
| for (uint16_t j = 0; j < loopCount; j++) { | for (uint16_t j = 0; j < loopCount; j++) { |
| - DataCopyUnAlign(xTmp, uSrc, xLocal, VL); | + LoadUnAlign(xTmp, uSrc, xLocal, VL); |
| Cast<float, T1, castTraitB162B32Even>(xEven, xTmp, pregMain); | Cast<float, T1, castTraitB162B32Even>(xEven, xTmp, pregMain); |
| Cast<float, T1, castTraitB162B32Odd>(xOdd, xTmp, pregMain); | Cast<float, T1, castTraitB162B32Odd>(xOdd, xTmp, pregMain); |
| if constexpr (activateSilu) { | if constexpr (activateSilu) { |
| @@ -1318,12 +1313,12 @@ __aicore__ inline void VFInnerNormalizeAndSwishUnAlign(__local_mem__ T1* xLocal, |
| Cast<T1, float, castTraitB322B16Odd>(yOddTmp, yOdd, pregMain); | Cast<T1, float, castTraitB322B16Odd>(yOddTmp, yOdd, pregMain); |
| Or((RegTensor<int16_t>&)yTmp, (RegTensor<int16_t>&)yEvenTmp, (RegTensor<int16_t>&)yOddTmp, | Or((RegTensor<int16_t>&)yTmp, (RegTensor<int16_t>&)yEvenTmp, (RegTensor<int16_t>&)yOddTmp, |
| pregMain); | pregMain); |
| - DataCopyUnAlign(yLocal, yTmp, uDst, VL); | + StoreUnAlign(yLocal, yTmp, uDst, VL); |
| } | } |
| uint32_t sreg0 = tailNum; | uint32_t sreg0 = tailNum; |
| for (uint16_t k = 0; k < tailLoop; k++) { | for (uint16_t k = 0; k < tailLoop; k++) { |
| pregLoop = UpdateMask<half>(sreg0); | pregLoop = UpdateMask<half>(sreg0); |
| - DataCopyUnAlign(xTmp, uSrc, xLocal, tailNum); | + LoadUnAlign(xTmp, uSrc, xLocal, tailNum); |
| Cast<float, T1, castTraitB162B32Even>(xEven, xTmp, pregLoop); | Cast<float, T1, castTraitB162B32Even>(xEven, xTmp, pregLoop); |
| Cast<float, T1, castTraitB162B32Odd>(xOdd, xTmp, pregLoop); | Cast<float, T1, castTraitB162B32Odd>(xOdd, xTmp, pregLoop); |
| if constexpr (activateSilu) { | if constexpr (activateSilu) { |
| @@ -1337,41 +1332,41 @@ __aicore__ inline void VFInnerNormalizeAndSwishUnAlign(__local_mem__ T1* xLocal, |
| Cast<T1, float, castTraitB322B16Odd>(yOddTmp, yOdd, pregLoop); | Cast<T1, float, castTraitB322B16Odd>(yOddTmp, yOdd, pregLoop); |
| Or((RegTensor<int16_t>&)yTmp, (RegTensor<int16_t>&)yEvenTmp, (RegTensor<int16_t>&)yOddTmp, | Or((RegTensor<int16_t>&)yTmp, (RegTensor<int16_t>&)yEvenTmp, (RegTensor<int16_t>&)yOddTmp, |
| pregLoop); | pregLoop); |
| - DataCopyUnAlign(yLocal, yTmp, uDst, tailNum); | + StoreUnAlign(yLocal, yTmp, uDst, tailNum); |
| } | } |
| - DataCopyUnAlignPost(yLocal, uDst, 0); | + StoreUnAlignPost(yLocal, uDst, 0); |
| } else { | } else { |
| for (uint16_t j = 0; j < loopCount; j++) { | for (uint16_t j = 0; j < loopCount; j++) { |
| - DataCopyUnAlign(x, uSrc, xLocal, VL_FP32); | + LoadUnAlign(x, uSrc, xLocal, VL_FP32); |
| if constexpr (activateSilu) { | if constexpr (activateSilu) { |
| VFInnerNormalizeAndSwish<hasGamma, hasBeta>(x, mean, rstd, gamma, beta, y, pregMain); | VFInnerNormalizeAndSwish<hasGamma, hasBeta>(x, mean, rstd, gamma, beta, y, pregMain); |
| } else { | } else { |
| VFInnerNormalize<hasGamma, hasBeta>(x, mean, rstd, gamma, beta, y, pregMain); | VFInnerNormalize<hasGamma, hasBeta>(x, mean, rstd, gamma, beta, y, pregMain); |
| } | } |
| - DataCopyUnAlign(yLocal, y, uDst, VL_FP32); | + StoreUnAlign(yLocal, y, uDst, VL_FP32); |
| } | } |
| uint32_t sreg0 = tailNum; | uint32_t sreg0 = tailNum; |
| for (uint16_t k = 0; k < tailLoop; k++) { | for (uint16_t k = 0; k < tailLoop; k++) { |
| pregLoop = UpdateMask<float>(sreg0); | pregLoop = UpdateMask<float>(sreg0); |
| - DataCopyUnAlign(x, uSrc, xLocal, tailNum); | + LoadUnAlign(x, uSrc, xLocal, tailNum); |
| if constexpr (activateSilu) { | if constexpr (activateSilu) { |
| VFInnerNormalizeAndSwish<hasGamma, hasBeta>(x, mean, rstd, gamma, beta, y, pregLoop); | VFInnerNormalizeAndSwish<hasGamma, hasBeta>(x, mean, rstd, gamma, beta, y, pregLoop); |
| } else { | } else { |
| VFInnerNormalize<hasGamma, hasBeta>(x, mean, rstd, gamma, beta, y, pregLoop); | VFInnerNormalize<hasGamma, hasBeta>(x, mean, rstd, gamma, beta, y, pregLoop); |
| } | } |
| - DataCopyUnAlign(yLocal, y, uDst, tailNum); | + StoreUnAlign(yLocal, y, uDst, tailNum); |
| } | } |
| - DataCopyUnAlignPost(yLocal, uDst, 0); | + StoreUnAlignPost(yLocal, uDst, 0); |
| } | } |
| } | } |
| } | } |
| } | } |
| | |
| template <typename T1, typename T2, bool activateSilu, bool hasGamma, bool hasBeta> | template <typename T1, typename T2, bool activateSilu, bool hasGamma, bool hasBeta> |
| -__aicore__ inline void VFInnerNormalizeAndSwishAlign(__local_mem__ T1* xLocal, __local_mem__ T2* gammaLocal, | +__aicore__ inline void VFInnerNormalizeAndSwishAlign(__ubuf__ T1* xLocal, __ubuf__ T2* gammaLocal, |
| - __local_mem__ T2* betaLocal, __local_mem__ float* meanLocal, | + __ubuf__ T2* betaLocal, __ubuf__ float* meanLocal, |
| - __local_mem__ float* rstdLocal, __local_mem__ T1* yLocal, | + __ubuf__ float* rstdLocal, __ubuf__ T1* yLocal, uint16_t rowsCount, |
| - uint16_t rowsCount, int32_t reduceCount) | + int32_t reduceCount) |
| { | { |
| uint16_t loopCount = CeilDiv(reduceCount, VL_FP32); | uint16_t loopCount = CeilDiv(reduceCount, VL_FP32); |
| uint32_t reduceCountAlign = RoundUp<T1>(reduceCount); | uint32_t reduceCountAlign = RoundUp<T1>(reduceCount); |
| @@ -1385,8 +1380,8 @@ __aicore__ inline void VFInnerNormalizeAndSwishAlign(__local_mem__ T1* xLocal, _ |
| RegTensor<float> y; | RegTensor<float> y; |
| MaskReg pregLoop; | MaskReg pregLoop; |
| MaskReg pregMain = CreateMask<float, AscendC::MicroAPI::MaskPattern::ALL>(); | MaskReg pregMain = CreateMask<float, AscendC::MicroAPI::MaskPattern::ALL>(); |
| - DataCopy<float, AscendC::MicroAPI::LoadDist::DIST_BRC_B32>(rstd, rstdLocal); | + LoadAlign<float, AscendC::MicroAPI::LoadDist::DIST_BRC_B32>(rstd, rstdLocal); |
| - DataCopy<float, AscendC::MicroAPI::LoadDist::DIST_BRC_B32>(mean, meanLocal); | + LoadAlign<float, AscendC::MicroAPI::LoadDist::DIST_BRC_B32>(mean, meanLocal); |
| for (uint16_t i = 0; i < rowsCount; i++) { | for (uint16_t i = 0; i < rowsCount; i++) { |
| uint32_t sreg0 = reduceCount; | uint32_t sreg0 = reduceCount; |
| LoadGammaAndBetaData<T2, hasGamma, hasBeta>(gamma, beta, gammaLocal, betaLocal, pregMain, i); | LoadGammaAndBetaData<T2, hasGamma, hasBeta>(gamma, beta, gammaLocal, betaLocal, pregMain, i); |
| @@ -1405,10 +1400,10 @@ __aicore__ inline void VFInnerNormalizeAndSwishAlign(__local_mem__ T1* xLocal, _ |
| } | } |
| | |
| template <typename T1, typename T2, bool activateSilu, bool hasGamma, bool hasBeta> | template <typename T1, typename T2, bool activateSilu, bool hasGamma, bool hasBeta> |
| -__aicore__ inline void VFInnerNormalizeAndSwishFold(__local_mem__ T1* xLocal, __local_mem__ T2* gammaLocal, | +__aicore__ inline void VFInnerNormalizeAndSwishFold(__ubuf__ T1* xLocal, __ubuf__ T2* gammaLocal, |
| - __local_mem__ T2* betaLocal, __local_mem__ float* meanLocal, | + __ubuf__ T2* betaLocal, __ubuf__ float* meanLocal, |
| - __local_mem__ float* rstdLocal, __local_mem__ T1* yLocal, | + __ubuf__ float* rstdLocal, __ubuf__ T1* yLocal, uint16_t groupNums, |
| - uint16_t groupNums, uint16_t rowsCount, int32_t reduceCount) | + uint16_t rowsCount, int32_t reduceCount) |
| { | { |
| uint16_t loopCount = CeilDiv(reduceCount, VL_FP32); | uint16_t loopCount = CeilDiv(reduceCount, VL_FP32); |
| uint32_t reduceCountAlign = RoundUp<T1>(reduceCount); | uint32_t reduceCountAlign = RoundUp<T1>(reduceCount); |
| @@ -1423,8 +1418,8 @@ __aicore__ inline void VFInnerNormalizeAndSwishFold(__local_mem__ T1* xLocal, __ |
| MaskReg pregLoop; | MaskReg pregLoop; |
| for (uint16_t i = 0; i < groupNums; i++) { | for (uint16_t i = 0; i < groupNums; i++) { |
| for (uint16_t j = 0; j < rowsCount; j++) { | for (uint16_t j = 0; j < rowsCount; j++) { |
| - DataCopy<float, AscendC::MicroAPI::LoadDist::DIST_BRC_B32>(rstd, rstdLocal + i * rowsCount + j); | + LoadAlign<float, AscendC::MicroAPI::LoadDist::DIST_BRC_B32>(rstd, rstdLocal + i * rowsCount + j); |
| - DataCopy<float, AscendC::MicroAPI::LoadDist::DIST_BRC_B32>(mean, meanLocal + i * rowsCount + j); | + LoadAlign<float, AscendC::MicroAPI::LoadDist::DIST_BRC_B32>(mean, meanLocal + i * rowsCount + j); |
| uint32_t sreg0 = reduceCount; | uint32_t sreg0 = reduceCount; |
| for (uint16_t k = 0; k < loopCount; k++) { | for (uint16_t k = 0; k < loopCount; k++) { |
| pregLoop = UpdateMask<float>(sreg0); | pregLoop = UpdateMask<float>(sreg0); |
| @@ -1450,11 +1445,10 @@ __aicore__ inline void VFInnerNormalizeAndSwishFold(__local_mem__ T1* xLocal, __ |
| } | } |
| | |
| template <typename T1, typename T2> | template <typename T1, typename T2> |
| -__aicore__ inline void VFNormalizeAndSwishUnAlign(__local_mem__ T1* xLocal, __local_mem__ T2* gammaLocal, | +__aicore__ inline void VFNormalizeAndSwishUnAlign(__ubuf__ T1* xLocal, __ubuf__ T2* gammaLocal, __ubuf__ T2* betaLocal, |
| - __local_mem__ T2* betaLocal, __local_mem__ float* meanLocal, | + __ubuf__ float* meanLocal, __ubuf__ float* rstdLocal, |
| - __local_mem__ float* rstdLocal, __local_mem__ T1* yLocal, | + __ubuf__ T1* yLocal, uint16_t rowsCount, int32_t reduceCount, |
| - uint16_t rowsCount, int32_t reduceCount, bool activateSilu, | + bool activateSilu, bool hasGamma, bool hasBeta) |
| - bool hasGamma, bool hasBeta) | |
| { | { |
| if (activateSilu) { | if (activateSilu) { |
| if (hasGamma && hasBeta) { | if (hasGamma && hasBeta) { |
| @@ -1488,11 +1482,10 @@ __aicore__ inline void VFNormalizeAndSwishUnAlign(__local_mem__ T1* xLocal, __lo |
| } | } |
| | |
| template <typename T1, typename T2> | template <typename T1, typename T2> |
| -__aicore__ inline void VFNormalizeAndSwishAlign(__local_mem__ T1* xLocal, __local_mem__ T2* gammaLocal, | +__aicore__ inline void VFNormalizeAndSwishAlign(__ubuf__ T1* xLocal, __ubuf__ T2* gammaLocal, __ubuf__ T2* betaLocal, |
| - __local_mem__ T2* betaLocal, __local_mem__ float* meanLocal, | + __ubuf__ float* meanLocal, __ubuf__ float* rstdLocal, |
| - __local_mem__ float* rstdLocal, __local_mem__ T1* yLocal, | + __ubuf__ T1* yLocal, uint16_t rowsCount, int32_t reduceCount, |
| - uint16_t rowsCount, int32_t reduceCount, bool activateSilu, | + bool activateSilu, bool hasGamma, bool hasBeta) |
| - bool hasGamma, bool hasBeta) | |
| { | { |
| if (activateSilu) { | if (activateSilu) { |
| if (hasGamma && hasBeta) { | if (hasGamma && hasBeta) { |
| @@ -1526,11 +1519,10 @@ __aicore__ inline void VFNormalizeAndSwishAlign(__local_mem__ T1* xLocal, __loca |
| } | } |
| | |
| template <typename T1, typename T2> | template <typename T1, typename T2> |
| -__aicore__ inline void VFNormalizeAndSwishFold(__local_mem__ T1* xLocal, __local_mem__ T2* gammaLocal, | +__aicore__ inline void VFNormalizeAndSwishFold(__ubuf__ T1* xLocal, __ubuf__ T2* gammaLocal, __ubuf__ T2* betaLocal, |
| - __local_mem__ T2* betaLocal, __local_mem__ float* meanLocal, | + __ubuf__ float* meanLocal, __ubuf__ float* rstdLocal, |
| - __local_mem__ float* rstdLocal, __local_mem__ T1* yLocal, | + __ubuf__ T1* yLocal, uint16_t groupNums, uint16_t rowsCount, |
| - uint16_t groupNums, uint16_t rowsCount, int32_t reduceCount, | + int32_t reduceCount, bool activateSilu, bool hasGamma, bool hasBeta) |
| - bool activateSilu, bool hasGamma, bool hasBeta) | |
| { | { |
| if (activateSilu) { | if (activateSilu) { |
| if (hasGamma && hasBeta) { | if (hasGamma && hasBeta) { |
| @@ -1596,7 +1588,7 @@ __aicore__ inline void CopyGammaAndBeta2UBByNDDMA(const GlobalTensor<T>& gammaGm |
| const uint16_t numGroups, const uint32_t shapeD, const uint16_t hwNum, | const uint16_t numGroups, const uint32_t shapeD, const uint16_t hwNum, |
| const uint32_t eleNumAlign, bool hasGamma = true, bool hasBeta = true) | const uint32_t eleNumAlign, bool hasGamma = true, bool hasBeta = true) |
| { | { |
| - MultiCopyLoopInfo<GAMMA_BETA_UB_DIM> loopInfo; | + NdDmaLoopInfo<GAMMA_BETA_UB_DIM> loopInfo; |
| loopInfo.loopSize[INDEX_0] = numGroups; | loopInfo.loopSize[INDEX_0] = numGroups; |
| loopInfo.loopSrcStride[INDEX_0] = shapeD; | loopInfo.loopSrcStride[INDEX_0] = shapeD; |
| loopInfo.loopDstStride[INDEX_0] = eleNumAlign; | loopInfo.loopDstStride[INDEX_0] = eleNumAlign; |
| @@ -1610,8 +1602,8 @@ __aicore__ inline void CopyGammaAndBeta2UBByNDDMA(const GlobalTensor<T>& gammaGm |
| loopInfo.loopDstStride[INDEX_2] = 1; | loopInfo.loopDstStride[INDEX_2] = 1; |
| | |
| T constValue = 0; | T constValue = 0; |
| - static constexpr MultiCopyConfig config = {false}; | + static constexpr NdDmaConfig config = {false}; |
| - MultiCopyParams<T, GAMMA_BETA_UB_DIM> paramsMain = {loopInfo, constValue}; | + NdDmaParams<T, GAMMA_BETA_UB_DIM> paramsMain = {loopInfo, constValue}; |
| | |
| if (hasGamma) { | if (hasGamma) { |
| DataCopy<T, GAMMA_BETA_UB_DIM, config>(gammaTensor, gammaGm, paramsMain); | DataCopy<T, GAMMA_BETA_UB_DIM, config>(gammaTensor, gammaGm, paramsMain); |
| @@ -1674,10 +1666,10 @@ __aicore__ inline void ProcessMeanAndRstd(LocalTensor<float>& meanTensor, LocalT |
| if constexpr (IsSameType<T1, float>::value) { | if constexpr (IsSameType<T1, float>::value) { |
| CopyMeanAndRstd2Gm<float>(meanGm[gmOffset], rstdGm[gmOffset], meanTensor, rstdTensor, 1, curNumPerCore); | CopyMeanAndRstd2Gm<float>(meanGm[gmOffset], rstdGm[gmOffset], meanTensor, rstdTensor, 1, curNumPerCore); |
| } else { | } else { |
| - __local_mem__ T1* meanOutLocal = (__local_mem__ T1*)meanOutTensor.GetPhyAddr(); | + __ubuf__ T1* meanOutLocal = (__ubuf__ T1*)meanOutTensor.GetPhyAddr(); |
| - __local_mem__ float* meanLocal = (__local_mem__ float*)meanTensor.GetPhyAddr(); | + __ubuf__ float* meanLocal = (__ubuf__ float*)meanTensor.GetPhyAddr(); |
| - __local_mem__ T1* rstdOutLocal = (__local_mem__ T1*)rstdOutTensor.GetPhyAddr(); | + __ubuf__ T1* rstdOutLocal = (__ubuf__ T1*)rstdOutTensor.GetPhyAddr(); |
| - __local_mem__ float* rstdLocal = (__local_mem__ float*)rstdTensor.GetPhyAddr(); | + __ubuf__ float* rstdLocal = (__ubuf__ float*)rstdTensor.GetPhyAddr(); |
| uint16_t loopCount = CeilDiv(curNumPerCore, VL_FP32); | uint16_t loopCount = CeilDiv(curNumPerCore, VL_FP32); |
| __VEC_SCOPE__ | __VEC_SCOPE__ |
| { | { |
| @@ -1689,14 +1681,14 @@ __aicore__ inline void ProcessMeanAndRstd(LocalTensor<float>& meanTensor, LocalT |
| RegTensor<T1> rstdOut; | RegTensor<T1> rstdOut; |
| for (uint16_t i = 0; i < loopCount; i++) { | for (uint16_t i = 0; i < loopCount; i++) { |
| pregLoop = UpdateMask<float>(sreg0); | pregLoop = UpdateMask<float>(sreg0); |
| - DataCopy(mean, meanLocal + i * VL_FP32); | + LoadAlign(mean, meanLocal + i * VL_FP32); |
| - DataCopy(rstd, rstdLocal + i * VL_FP32); | + LoadAlign(rstd, rstdLocal + i * VL_FP32); |
| Cast<T1, float, castTraitB322B16Even>(meanOut, mean, pregLoop); | Cast<T1, float, castTraitB322B16Even>(meanOut, mean, pregLoop); |
| Cast<T1, float, castTraitB322B16Even>(rstdOut, rstd, pregLoop); | Cast<T1, float, castTraitB322B16Even>(rstdOut, rstd, pregLoop); |
| - DataCopy<T1, AscendC::MicroAPI::StoreDist::DIST_PACK_B32>(meanOutLocal + i * VL_FP32, meanOut, | + StoreAlign<T1, AscendC::MicroAPI::StoreDist::DIST_PACK_B32>(meanOutLocal + i * VL_FP32, meanOut, |
| - pregLoop); | + pregLoop); |
| - DataCopy<T1, AscendC::MicroAPI::StoreDist::DIST_PACK_B32>(rstdOutLocal + i * VL_FP32, rstdOut, | + StoreAlign<T1, AscendC::MicroAPI::StoreDist::DIST_PACK_B32>(rstdOutLocal + i * VL_FP32, rstdOut, |
| - pregLoop); | + pregLoop); |
| } | } |
| } | } |
| event_t eventIdVToMte3 = static_cast<event_t>(GetTPipePtr()->FetchEventID(HardEvent::V_MTE3)); | event_t eventIdVToMte3 = static_cast<event_t>(GetTPipePtr()->FetchEventID(HardEvent::V_MTE3)); |
| |