GetAcosTmpBufferFactorSize
Function
Obtains maxLiveNodeCount and extraBuf to calculate the maximum number of elements in a single computation of an operator when the space is fixed. maxLiveNodeCount indicates how many times the temporary space is relative to the data volume in a single computation. extraBuf indicates the size of the extra temporary space.
Example:
- The Acos API needs to be called for operator implementation. Developers need to reserve space of the currBuff size and use the GetAcosTmpBufferFactorSize API to obtain the output values of maxLiveNodeCount and extraBuf, to calculate the maximum number of elements in a single computation of an operator.
currentShapeSize = (currBuff – extraBuf)/maxLiveNodeCount/typeSize
- To implement the operator, two kernel APIs KernelIntf1 and KernelIntf2 need to be called. Two output values (maxLiveNodeCount and extraBuf) of two GetXxxTmpBufferFactorSize API functions (Xxx indicates the two high-level APIs to be called) and the existing temporary space are used to compute the maximum number of elements in a single computation (currentShapeSize).
currentShapeSize1 = (currBuff – extraBuf1)/maxLiveNodeCount1/typeSize
currentShapeSize2 = (currBuff – extraBuf2)/maxLiveNodeCount2/typeSize
currentShapeSize = min(currentShapeSize1, currentShapeSize2)
Note that currBuff indicates the available space for API computation. The space used for purposes, such as input and output, must be excluded. In addition, the output value of maxLiveNodeCount might be 0. Ensure that the value is not 0 to avoid the division-by-zero error.
Prototype
1 | void GetAcosTmpBufferFactorSize(const uint32_t typeSize, uint32_t& maxLiveNodeCount, uint32_t& extraBuffer) |
Parameters
Parameter |
Input/Output |
Description |
|---|---|---|
typeSize |
Input |
Size of the input data type, in bytes. For example, if the input data type is half, set this parameter to 2. |
maxLiveNodeCount |
Output |
Maximum number of active nodes, indicating how many times the temporary space is the data size computed per time. |
extraBuffer |
Output |
Size of the used extra temporary space. The unit is byte. |
Returns
None
Restrictions
If currentShapeSize × typeSize < 256B is obtained based on maxLiveNodeCount and extraBuffer, currentShapeSize should be rounded up based on the value of 256B/typeSize.
Example
1 2 3 | uint32_t maxLiveNodeCount = 0; uint32_t extraBuf = 0; AscendC::GetAcosTmpBufferFactorSize(typeSize, maxLiveNodeCount, extraBuf); |