CeilDivision
Applicability
Product |
Supported |
|---|---|
Atlas 350 Accelerator Card |
√ |
x |
|
x |
|
x |
|
x |
|
x |
|
x |
Function Usage
Rounds up the result of dividing two integers, num1 and num2.
Prototype
1 | __aicore__ constexpr inline int32_t CeilDivision(int32_t num1, int32_t num2) |
Parameters
Parameter |
Description |
|---|---|
num1 |
Dividend. |
num2 |
Divisor. |
Returns
Rounded-up result of dividing two integers.
Restrictions
- If num2 is 0, the result is 0.
- This API can only be used when num1 and num2 are positive numbers.
Example
In this example, CeilDivision is used to calculate the number of iterations (repeatTimes). By performing ceiling division on the data size (count) and the amount of data processed at a time, it ensures that all data (including the tail block) is fully processed.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | template <typename T> __aicore__ inline void AddCustomImpl(__local_mem__ T *dst, __local_mem__ T *src0, __local_mem__ T *src1, uint32_t count) { AscendC::Reg::RegTensor<T> srcReg0; AscendC::Reg::RegTensor<T> srcReg1; AscendC::Reg::RegTensor<T> dstReg; AscendC::Reg::MaskReg mask; constexpr uint32_t oneRepeatSize = AscendC::GetVecLen() / sizeof(T); uint16_t repeatTime = AscendC::CeilDivision(count, oneRepeatSize); for (uint16_t i = 0; i < repeatTime; ++i) { mask = AscendC::Reg::UpdateMask<T>(calCount); AscendC::Reg::LoadAlign(srcReg0, src0 + i * oneRepeatSize ); AscendC::Reg::LoadAlign(srcReg1, src1 + i * oneRepeatSize ); AscendC::Reg::Add(dstReg, srcReg0, srcReg1, mask); AscendC::Reg::StoreAlign(dst + i * repeatElm, reg2, mask); } } |
Parent topic: Tool Functions