已合并
batch_norm_v3/rms_norm_grad : 还原 infer/dgamma 计算的内联写法 #8107
rk创建于 7月30日
batch_norm_v3/rms_norm_grad : 还原 infer/dgamma 计算的内联写法 #8107
已合并
共 5 个文件变更+100-58
| @@ -156,8 +156,25 @@ private: | |||
| 156 | 156 | ||
| 157 | __aicore__ inline void Compute(int64_t curTileBLen) | 157 | __aicore__ inline void Compute(int64_t curTileBLen) |
| 158 | { | 158 | { |
| 159 | - InferComputeImpl<BatchNormV3InferLastChannelContinuousA, T>( | 159 | + LocalTensor<T> x = xQueue_.DeQue<T>(); |
| 160 | - *this, xQueue_, yQueue_, betaFp32Buf_, gammaFp32Buf_, meanFp32Buf_, rstdFp32Buf_, curTileBLen); | 160 | + LocalTensor<T> y = yQueue_.AllocTensor<T>(); |
| 161 | + LocalTensor<float> betaFp32 = betaFp32Buf_.Get<float>(); | ||
| 162 | + LocalTensor<float> gammaFp32 = gammaFp32Buf_.Get<float>(); | ||
| 163 | + LocalTensor<float> meanFp32 = meanFp32Buf_.Get<float>(); | ||
| 164 | + LocalTensor<float> rstdFp32 = rstdFp32Buf_.Get<float>(); | ||
| 165 | + | ||
| 166 | + __local_mem__ T* xLocal = (__local_mem__ T*)x.GetPhyAddr(); | ||
| 167 | + __local_mem__ T* yLocal = (__local_mem__ T*)y.GetPhyAddr(); | ||
| 168 | + __local_mem__ float* betaFp32Local = (__local_mem__ float*)betaFp32.GetPhyAddr(); | ||
| 169 | + __local_mem__ float* gammaFp32Local = (__local_mem__ float*)gammaFp32.GetPhyAddr(); | ||
| 170 | + __local_mem__ float* meanFp32Local = (__local_mem__ float*)meanFp32.GetPhyAddr(); | ||
| 171 | + __local_mem__ float* rstdFp32Local = (__local_mem__ float*)rstdFp32.GetPhyAddr(); | ||
| 172 | + | ||
| 173 | + VFNormalize(xLocal, gammaFp32Local, betaFp32Local, meanFp32Local, rstdFp32Local, yLocal, curTileBLen); | ||
| 174 | + | ||
| 175 | + yQueue_.EnQue(y); | ||
| 176 | + | ||
| 177 | + xQueue_.FreeTensor<T>(x); | ||
| 161 | } | 178 | } |
| 162 | 179 | ||
| 163 | __aicore__ inline void VFPrepareParamCache(__local_mem__ T_GAMMA* gammaLocal, __local_mem__ T_GAMMA* betaLocal, | 180 | __aicore__ inline void VFPrepareParamCache(__local_mem__ T_GAMMA* gammaLocal, __local_mem__ T_GAMMA* betaLocal, |
| @@ -195,7 +212,6 @@ private: | |||
| 195 | } | 212 | } |
| 196 | } | 213 | } |
| 197 | 214 | ||
| 198 | -public: | ||
| 199 | __aicore__ inline void VFNormalize(__local_mem__ T* xLocal, __local_mem__ float* gammaFp32Local, | 215 | __aicore__ inline void VFNormalize(__local_mem__ T* xLocal, __local_mem__ float* gammaFp32Local, |
| 200 | __local_mem__ float* betaFp32Local, __local_mem__ float* meanFp32Local, | 216 | __local_mem__ float* betaFp32Local, __local_mem__ float* meanFp32Local, |
| 201 | __local_mem__ float* rstdFp32Local, __local_mem__ T* yLocal, int64_t curTileBLen) | 217 | __local_mem__ float* rstdFp32Local, __local_mem__ T* yLocal, int64_t curTileBLen) |
| @@ -233,7 +249,6 @@ public: | |||
| 233 | } | 249 | } |
| 234 | } | 250 | } |
| 235 | 251 | ||
| 236 | -private: | ||
| 237 | template <typename T_SRC> | 252 | template <typename T_SRC> |
| 238 | __aicore__ inline void LoadParamForDtypeT(__local_mem__ T_SRC* src, RegTensor<float>& dst, MaskReg& preg, | 253 | __aicore__ inline void LoadParamForDtypeT(__local_mem__ T_SRC* src, RegTensor<float>& dst, MaskReg& preg, |
| 239 | uint32_t offset) | 254 | uint32_t offset) |
| @@ -144,11 +144,28 @@ private: | |||
| 144 | 144 | ||
| 145 | __aicore__ inline void Compute(int64_t curTileBLen, int64_t curTileALen) | 145 | __aicore__ inline void Compute(int64_t curTileBLen, int64_t curTileALen) |
| 146 | { | 146 | { |
| 147 | - InferComputeImpl<BatchNormV3InferLastChannelSmallA, T>(*this, xQueue_, yQueue_, betaFp32Buf_, gammaFp32Buf_, | 147 | + LocalTensor<T> x = xQueue_.DeQue<T>(); |
| 148 | - meanFp32Buf_, rstdFp32Buf_, curTileBLen * curTileALen); | 148 | + LocalTensor<T> y = yQueue_.AllocTensor<T>(); |
| 149 | + LocalTensor<float> betaFp32 = betaFp32Buf_.Get<float>(); | ||
| 150 | + LocalTensor<float> gammaFp32 = gammaFp32Buf_.Get<float>(); | ||
| 151 | + LocalTensor<float> meanFp32 = meanFp32Buf_.Get<float>(); | ||
| 152 | + LocalTensor<float> rstdFp32 = rstdFp32Buf_.Get<float>(); | ||
| 153 | + | ||
| 154 | + __local_mem__ T* xLocal = (__local_mem__ T*)x.GetPhyAddr(); | ||
| 155 | + __local_mem__ T* yLocal = (__local_mem__ T*)y.GetPhyAddr(); | ||
| 156 | + __local_mem__ float* betaFp32Local = (__local_mem__ float*)betaFp32.GetPhyAddr(); | ||
| 157 | + __local_mem__ float* gammaFp32Local = (__local_mem__ float*)gammaFp32.GetPhyAddr(); | ||
| 158 | + __local_mem__ float* meanFp32Local = (__local_mem__ float*)meanFp32.GetPhyAddr(); | ||
| 159 | + __local_mem__ float* rstdFp32Local = (__local_mem__ float*)rstdFp32.GetPhyAddr(); | ||
| 160 | + | ||
| 161 | + VFNormalize(xLocal, gammaFp32Local, betaFp32Local, meanFp32Local, rstdFp32Local, yLocal, | ||
| 162 | + curTileBLen * curTileALen); | ||
| 163 | + | ||
| 164 | + yQueue_.EnQue(y); | ||
| 165 | + | ||
| 166 | + xQueue_.FreeTensor<T>(x); | ||
| 149 | } | 167 | } |
| 150 | 168 | ||
| 151 | -public: | ||
| 152 | __aicore__ inline void VFNormalize(__local_mem__ T* xLocal, __local_mem__ float* gammaFp32Local, | 169 | __aicore__ inline void VFNormalize(__local_mem__ T* xLocal, __local_mem__ float* gammaFp32Local, |
| 153 | __local_mem__ float* betaFp32Local, __local_mem__ float* meanFp32Local, | 170 | __local_mem__ float* betaFp32Local, __local_mem__ float* meanFp32Local, |
| 154 | __local_mem__ float* rstdFp32Local, __local_mem__ T* yLocal, uint32_t curElemLen) | 171 | __local_mem__ float* rstdFp32Local, __local_mem__ T* yLocal, uint32_t curElemLen) |
| @@ -188,7 +205,6 @@ public: | |||
| 188 | } | 205 | } |
| 189 | } | 206 | } |
| 190 | 207 | ||
| 191 | -private: | ||
| 192 | __aicore__ inline void CopyOutY(int64_t yGmOffset, int64_t curTileBLen, int64_t curTileALen) | 208 | __aicore__ inline void CopyOutY(int64_t yGmOffset, int64_t curTileBLen, int64_t curTileALen) |
| 193 | { | 209 | { |
| 194 | LocalTensor<T> y = yQueue_.DeQue<T>(); | 210 | LocalTensor<T> y = yQueue_.DeQue<T>(); |
| @@ -134,11 +134,27 @@ private: | |||
| 134 | 134 | ||
| 135 | __aicore__ inline void Compute(int64_t curTileB0Len) | 135 | __aicore__ inline void Compute(int64_t curTileB0Len) |
| 136 | { | 136 | { |
| 137 | - InferComputeImpl<BatchNormV3InferSmallAB1, T>(*this, xQueue_, yQueue_, betaFp32Buf_, gammaFp32Buf_, | 137 | + LocalTensor<T> x = xQueue_.DeQue<T>(); |
| 138 | - meanFp32Buf_, rstdFp32Buf_, curTileB0Len); | 138 | + LocalTensor<T> y = yQueue_.AllocTensor<T>(); |
| 139 | + LocalTensor<float> betaFp32 = betaFp32Buf_.Get<float>(); | ||
| 140 | + LocalTensor<float> gammaFp32 = gammaFp32Buf_.Get<float>(); | ||
| 141 | + LocalTensor<float> meanFp32 = meanFp32Buf_.Get<float>(); | ||
| 142 | + LocalTensor<float> rstdFp32 = rstdFp32Buf_.Get<float>(); | ||
| 143 | + | ||
| 144 | + __local_mem__ T* xLocal = (__local_mem__ T*)x.GetPhyAddr(); | ||
| 145 | + __local_mem__ T* yLocal = (__local_mem__ T*)y.GetPhyAddr(); | ||
| 146 | + __local_mem__ float* betaFp32Local = (__local_mem__ float*)betaFp32.GetPhyAddr(); | ||
| 147 | + __local_mem__ float* gammaFp32Local = (__local_mem__ float*)gammaFp32.GetPhyAddr(); | ||
| 148 | + __local_mem__ float* meanFp32Local = (__local_mem__ float*)meanFp32.GetPhyAddr(); | ||
| 149 | + __local_mem__ float* rstdFp32Local = (__local_mem__ float*)rstdFp32.GetPhyAddr(); | ||
| 150 | + | ||
| 151 | + VFNormalize(xLocal, gammaFp32Local, betaFp32Local, meanFp32Local, rstdFp32Local, yLocal, curTileB0Len); | ||
| 152 | + | ||
| 153 | + yQueue_.EnQue(y); | ||
| 154 | + | ||
| 155 | + xQueue_.FreeTensor<T>(x); | ||
| 139 | } | 156 | } |
| 140 | 157 | ||
| 141 | -public: | ||
| 142 | __aicore__ inline void VFNormalize(__local_mem__ T* xLocal, __local_mem__ float* gammaFp32Local, | 158 | __aicore__ inline void VFNormalize(__local_mem__ T* xLocal, __local_mem__ float* gammaFp32Local, |
| 143 | __local_mem__ float* betaFp32Local, __local_mem__ float* meanFp32Local, | 159 | __local_mem__ float* betaFp32Local, __local_mem__ float* meanFp32Local, |
| 144 | __local_mem__ float* rstdFp32Local, __local_mem__ T* yLocal, | 160 | __local_mem__ float* rstdFp32Local, __local_mem__ T* yLocal, |
| @@ -180,7 +196,6 @@ public: | |||
| 180 | } | 196 | } |
| 181 | } | 197 | } |
| 182 | 198 | ||
| 183 | -private: | ||
| 184 | __aicore__ inline uint32_t GetSmallAB1ParamCacheElemLen() const | 199 | __aicore__ inline uint32_t GetSmallAB1ParamCacheElemLen() const |
| 185 | { | 200 | { |
| 186 | uint32_t abLen = static_cast<uint32_t>(tilingData_->totalALen * tilingData_->totalB1Len); | 201 | uint32_t abLen = static_cast<uint32_t>(tilingData_->totalALen * tilingData_->totalB1Len); |
| @@ -59,32 +59,6 @@ struct RLessThanParams { | |||
| 59 | uint32_t remainderTailOffset3; | 59 | uint32_t remainderTailOffset3; |
| 60 | }; | 60 | }; |
| 61 | 61 | ||
| 62 | -template <typename Self, typename T> | ||
| 63 | -__aicore__ inline void InferComputeImpl(Self& self, TQue<QuePosition::VECIN, 1>& xQueue, | ||
| 64 | - TQue<QuePosition::VECOUT, 1>& yQueue, TBuf<TPosition::VECCALC>& betaBuf, | ||
| 65 | - TBuf<TPosition::VECCALC>& gammaBuf, TBuf<TPosition::VECCALC>& meanBuf, | ||
| 66 | - TBuf<TPosition::VECCALC>& rstdBuf, int64_t vfLen) | ||
| 67 | -{ | ||
| 68 | - LocalTensor<T> x = xQueue.template DeQue<T>(); | ||
| 69 | - LocalTensor<T> y = yQueue.template AllocTensor<T>(); | ||
| 70 | - LocalTensor<float> betaFp32 = betaBuf.template Get<float>(); | ||
| 71 | - LocalTensor<float> gammaFp32 = gammaBuf.template Get<float>(); | ||
| 72 | - LocalTensor<float> meanFp32 = meanBuf.template Get<float>(); | ||
| 73 | - LocalTensor<float> rstdFp32 = rstdBuf.template Get<float>(); | ||
| 74 | - | ||
| 75 | - __local_mem__ T* xLocal = (__local_mem__ T*)x.GetPhyAddr(); | ||
| 76 | - __local_mem__ T* yLocal = (__local_mem__ T*)y.GetPhyAddr(); | ||
| 77 | - __local_mem__ float* betaFp32Local = (__local_mem__ float*)betaFp32.GetPhyAddr(); | ||
| 78 | - __local_mem__ float* gammaFp32Local = (__local_mem__ float*)gammaFp32.GetPhyAddr(); | ||
| 79 | - __local_mem__ float* meanFp32Local = (__local_mem__ float*)meanFp32.GetPhyAddr(); | ||
| 80 | - __local_mem__ float* rstdFp32Local = (__local_mem__ float*)rstdFp32.GetPhyAddr(); | ||
| 81 | - | ||
| 82 | - self.VFNormalize(xLocal, gammaFp32Local, betaFp32Local, meanFp32Local, rstdFp32Local, yLocal, vfLen); | ||
| 83 | - | ||
| 84 | - yQueue.EnQue(y); | ||
| 85 | - xQueue.template FreeTensor<T>(x); | ||
| 86 | -} | ||
| 87 | - | ||
| 88 | __aicore__ inline RLessThanParams GetRLessThanParams(uint32_t scaleCoef, uint32_t currentANumAlign, uint32_t r1) | 62 | __aicore__ inline RLessThanParams GetRLessThanParams(uint32_t scaleCoef, uint32_t currentANumAlign, uint32_t r1) |
| 89 | { | 63 | { |
| 90 | RLessThanParams params; | 64 | RLessThanParams params; |
| @@ -226,10 +226,14 @@ public: | |||
| 226 | } | 226 | } |
| 227 | } | 227 | } |
| 228 | 228 | ||
| 229 | - __aicore__ inline void ComputePreDgamma(LocalTensor<DY_TYPE>& dyLocal, LocalTensor<X_TYPE>& xLocal, | 229 | + __aicore__ inline void CalcDgamma(uint32_t inputOffset, uint32_t currentCols, bool isWithPad) |
| 230 | - LocalTensor<RSTD_TYPE>& rstdLocal, LocalTensor<float>& dgammaOutLocal, | ||
| 231 | - uint32_t currentCols, __local_mem__ float*& dgammaOutAddr) | ||
| 232 | { | 230 | { |
| 231 | + LocalTensor<RSTD_TYPE> rstdLocal = rstdQueue_.template AllocTensor<RSTD_TYPE>(); | ||
| 232 | + LocalTensor<DY_TYPE> dyLocal = dyQueue_.template AllocTensor<DY_TYPE>(); | ||
| 233 | + LocalTensor<X_TYPE> xLocal = xQueue_.template AllocTensor<X_TYPE>(); | ||
| 234 | + LocalTensor<float> dgammaOutLocal = dgammaQueue_.template AllocTensor<float>(); | ||
| 235 | + | ||
| 236 | + CopyInputsToUB(dyLocal, xLocal, rstdLocal, inputOffset, currentCols, rowsPerUB_, 0); | ||
| 233 | xQueue_.EnQue(xLocal); | 237 | xQueue_.EnQue(xLocal); |
| 234 | rstdQueue_.EnQue(rstdLocal); | 238 | rstdQueue_.EnQue(rstdLocal); |
| 235 | dyQueue_.EnQue(dyLocal); | 239 | dyQueue_.EnQue(dyLocal); |
| @@ -241,24 +245,12 @@ public: | |||
| 241 | __local_mem__ DY_TYPE* dyAddr = (__local_mem__ DY_TYPE*)dyLocal[0].GetPhyAddr(); | 245 | __local_mem__ DY_TYPE* dyAddr = (__local_mem__ DY_TYPE*)dyLocal[0].GetPhyAddr(); |
| 242 | __local_mem__ X_TYPE* xAddr = (__local_mem__ X_TYPE*)xLocal[0].GetPhyAddr(); | 246 | __local_mem__ X_TYPE* xAddr = (__local_mem__ X_TYPE*)xLocal[0].GetPhyAddr(); |
| 243 | __local_mem__ RSTD_TYPE* rstdAddr = (__local_mem__ RSTD_TYPE*)rstdLocal[0].GetPhyAddr(); | 247 | __local_mem__ RSTD_TYPE* rstdAddr = (__local_mem__ RSTD_TYPE*)rstdLocal[0].GetPhyAddr(); |
| 244 | - dgammaOutAddr = (__local_mem__ float*)dgammaOutLocal[0].GetPhyAddr(); | 248 | + __local_mem__ float* dgammaOutAddr = (__local_mem__ float*)dgammaOutLocal[0].GetPhyAddr(); |
| 245 | 249 | ||
| 246 | VFCalcPreDgamma(dyAddr, xAddr, rstdAddr, dgammaOutAddr, currentCols, rowsPerUB_); | 250 | VFCalcPreDgamma(dyAddr, xAddr, rstdAddr, dgammaOutAddr, currentCols, rowsPerUB_); |
| 247 | dyQueue_.FreeTensor(dyLocal); | 251 | dyQueue_.FreeTensor(dyLocal); |
| 248 | xQueue_.FreeTensor(xLocal); | 252 | xQueue_.FreeTensor(xLocal); |
| 249 | rstdQueue_.FreeTensor(rstdLocal); | 253 | rstdQueue_.FreeTensor(rstdLocal); |
| 250 | - } | ||
| 251 | - | ||
| 252 | - __aicore__ inline void CalcDgamma(uint32_t inputOffset, uint32_t currentCols, bool isWithPad) | ||
| 253 | - { | ||
| 254 | - LocalTensor<RSTD_TYPE> rstdLocal = rstdQueue_.template AllocTensor<RSTD_TYPE>(); | ||
| 255 | - LocalTensor<DY_TYPE> dyLocal = dyQueue_.template AllocTensor<DY_TYPE>(); | ||
| 256 | - LocalTensor<X_TYPE> xLocal = xQueue_.template AllocTensor<X_TYPE>(); | ||
| 257 | - LocalTensor<float> dgammaOutLocal = dgammaQueue_.template AllocTensor<float>(); | ||
| 258 | - | ||
| 259 | - CopyInputsToUB(dyLocal, xLocal, rstdLocal, inputOffset, currentCols, rowsPerUB_, 0); | ||
| 260 | - __local_mem__ float* dgammaOutAddr; | ||
| 261 | - ComputePreDgamma(dyLocal, xLocal, rstdLocal, dgammaOutLocal, currentCols, dgammaOutAddr); | ||
| 262 | if (isWithPad) { | 254 | if (isWithPad) { |
| 263 | uint32_t mainRows = rows_ - tiling_->rowsTailDG; | 255 | uint32_t mainRows = rows_ - tiling_->rowsTailDG; |
| 264 | VFDuplicateRows(dgammaOutAddr, vlFp32_, rows_ * vlFp32_); | 256 | VFDuplicateRows(dgammaOutAddr, vlFp32_, rows_ * vlFp32_); |
| @@ -287,8 +279,23 @@ public: | |||
| 287 | uint32_t rstdOffset = i * rowsPerUB_; | 279 | uint32_t rstdOffset = i * rowsPerUB_; |
| 288 | 280 | ||
| 289 | CopyInputsToUB(dyLocal, xLocal, rstdLocal, inputOffset, currentCols, rowsPerUB_, rstdOffset); | 281 | CopyInputsToUB(dyLocal, xLocal, rstdLocal, inputOffset, currentCols, rowsPerUB_, rstdOffset); |
| 290 | - __local_mem__ float* dgammaOutAddr; | 282 | + xQueue_.EnQue(xLocal); |
| 291 | - ComputePreDgamma(dyLocal, xLocal, rstdLocal, dgammaOutLocal, currentCols, dgammaOutAddr); | 283 | + rstdQueue_.EnQue(rstdLocal); |
| 284 | + dyQueue_.EnQue(dyLocal); | ||
| 285 | + | ||
| 286 | + dyLocal = dyQueue_.template DeQue<DY_TYPE>(); | ||
| 287 | + xLocal = xQueue_.template DeQue<X_TYPE>(); | ||
| 288 | + rstdLocal = rstdQueue_.template DeQue<RSTD_TYPE>(); | ||
| 289 | + | ||
| 290 | + __local_mem__ DY_TYPE* dyAddr = (__local_mem__ DY_TYPE*)dyLocal[0].GetPhyAddr(); | ||
| 291 | + __local_mem__ X_TYPE* xAddr = (__local_mem__ X_TYPE*)xLocal[0].GetPhyAddr(); | ||
| 292 | + __local_mem__ RSTD_TYPE* rstdAddr = (__local_mem__ RSTD_TYPE*)rstdLocal[0].GetPhyAddr(); | ||
| 293 | + __local_mem__ float* dgammaOutAddr = (__local_mem__ float*)dgammaOutLocal[0].GetPhyAddr(); | ||
| 294 | + | ||
| 295 | + VFCalcPreDgamma(dyAddr, xAddr, rstdAddr, dgammaOutAddr, currentCols, rowsPerUB_); | ||
| 296 | + dyQueue_.FreeTensor(dyLocal); | ||
| 297 | + xQueue_.FreeTensor(xLocal); | ||
| 298 | + rstdQueue_.FreeTensor(rstdLocal); | ||
| 292 | 299 | ||
| 293 | VFBinaryReduceSumWithoutTail(dgammaOutAddr, currentCols, rowsPerUB_); | 300 | VFBinaryReduceSumWithoutTail(dgammaOutAddr, currentCols, rowsPerUB_); |
| 294 | UpdateCache(binaryAddCacheLocal, dgammaOutAddr, cacheID, vlFp32_); | 301 | UpdateCache(binaryAddCacheLocal, dgammaOutAddr, cacheID, vlFp32_); |
| @@ -307,8 +314,23 @@ public: | |||
| 307 | int64_t cacheID = GetCacheID(i); | 314 | int64_t cacheID = GetCacheID(i); |
| 308 | 315 | ||
| 309 | CopyInputsToUB(dyLocal, xLocal, rstdLocal, inputOffset, currentCols, rowsPerUB_, rstdOffset); | 316 | CopyInputsToUB(dyLocal, xLocal, rstdLocal, inputOffset, currentCols, rowsPerUB_, rstdOffset); |
| 310 | - __local_mem__ float* dgammaOutAddr; | 317 | + xQueue_.EnQue(xLocal); |
| 311 | - ComputePreDgamma(dyLocal, xLocal, rstdLocal, dgammaOutLocal, currentCols, dgammaOutAddr); | 318 | + rstdQueue_.EnQue(rstdLocal); |
| 319 | + dyQueue_.EnQue(dyLocal); | ||
| 320 | + | ||
| 321 | + dyLocal = dyQueue_.template DeQue<DY_TYPE>(); | ||
| 322 | + xLocal = xQueue_.template DeQue<X_TYPE>(); | ||
| 323 | + rstdLocal = rstdQueue_.template DeQue<RSTD_TYPE>(); | ||
| 324 | + | ||
| 325 | + __local_mem__ DY_TYPE* dyAddr = (__local_mem__ DY_TYPE*)dyLocal[0].GetPhyAddr(); | ||
| 326 | + __local_mem__ X_TYPE* xAddr = (__local_mem__ X_TYPE*)xLocal[0].GetPhyAddr(); | ||
| 327 | + __local_mem__ RSTD_TYPE* rstdAddr = (__local_mem__ RSTD_TYPE*)rstdLocal[0].GetPhyAddr(); | ||
| 328 | + __local_mem__ float* dgammaOutAddr = (__local_mem__ float*)dgammaOutLocal[0].GetPhyAddr(); | ||
| 329 | + | ||
| 330 | + VFCalcPreDgamma(dyAddr, xAddr, rstdAddr, dgammaOutAddr, currentCols, rowsPerUB_); | ||
| 331 | + dyQueue_.FreeTensor(dyLocal); | ||
| 332 | + xQueue_.FreeTensor(xLocal); | ||
| 333 | + rstdQueue_.FreeTensor(rstdLocal); | ||
| 312 | 334 | ||
| 313 | // 处理累加的尾块 | 335 | // 处理累加的尾块 |
| 314 | LocalTensor<RSTD_TYPE> rstdLocal1 = rstdQueue_.template AllocTensor<RSTD_TYPE>(); | 336 | LocalTensor<RSTD_TYPE> rstdLocal1 = rstdQueue_.template AllocTensor<RSTD_TYPE>(); |