GetFmodMaxMinTmpSize 详解:Fmod 算子临时空间大小一次讲清
【免费下载链接】HiGHSLinear optimization software项目地址: https://gitcode.com/GitHub_Trending/hi/HiGHS
用 AscendC 开发 Fmod 算子时,kernel 侧计算要占用一块临时空间,开多大很难凭空拍板。GetFmodMaxMinTmpSize 让你在 host 侧直接查到这个范围的上下限:传入输入 shape 和元素字节数,它返回两个值,你照着区间挑好大小、作为 Tiling 参数传给 kernel 即可。读完本文,你就能独立完成“查询—决策—传参”这条链路,不再纠结空间边界。
什么时候需要它:两个典型场景
- 你在 kernel 侧实现 Fmod 计算,流程上必须先预留临时空间,但不知道这个数到底取多少;
- 你已经定了 Tiling 尺寸,想确认它落在接口能接受的合法区间里,而不是凭感觉蒙一个值。
只要遇到“Fmod 要多少临时空间”这类问题,先调一次它就心里有数。
接口速览:函数原型
void GetFmodMaxMinTmpSize(const ge::Shape& srcShape, const uint32_t typeSize, const bool isReuseSource, uint32_t& maxValue, uint32_t& minValue)输入输出关系很直接:shape、元素字节数、复用标志三个值进去,maxValue 和 minValue 两个参考值出来。
参数详解
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| srcShape | 输入 | 输入数据的 shape,用 ge::Shape 描述,几维数据就带几个维度。 |
| typeSize | 输入 | 单个输入元素占多少字节:half 传 2,float 传 4,其余类型以此类推。 |
| isReuseSource | 输入 | 给后续扩展留的位子,现阶段固定传 false。不要自行改动,传其他值没有意义。 |
| maxValue | 输出 | Fmod 计算可能用到的临时空间上限,单位字节;超过这个数,接口也不会多占。它是参考值而非硬指标,实际分配还得看 Unified Buffer 剩多少。 |
| minValue | 输出 | 保证计算正确的临时空间下限,单位字节。临时空间一旦低于这个值,算出来的结果就不可信,这是硬底线。 |
返回值与边界情况
函数本身是 void,没有返回值,查询结果全部通过 maxValue、minValue 两个引用参数带出,单位都是字节。
两个边界情况要留意:
- 两个值都是 0:说明当前 shape 和类型下,计算根本用不到临时空间,直接不用预留;
- maxValue 比 Unified Buffer 剩余空间还大:这并不矛盾,maxValue 只是理论参考上限。真正分配时以剩余空间为准往下收,但无论如何不能跌破 minValue 这条线。
示例解读:Fmod 临时空间查询怎么调
// 以 1024 个 half 元素为例,查询 Fmod 计算所需临时空间的范围 std::vector<int64_t> shape_vec = {1024}; ge::Shape shape(shape_vec); uint32_t maxValue = 0; uint32_t minValue = 0; AscendC::GetFmodMaxMinTmpSize(shape, 2, false, maxValue, minValue);关键点逐条拆开看:
shape_vec里的 1024 是可替换的输入,换成你实际的输入维度即可,多维数据就写多个值;- 第 4 个实参 2 对应 half(2 字节),输入换成 float 时改成 4;
- 第 3 个实参 false 是预留位,保持不动;
- 调用返回后,maxValue、minValue 被覆写成查询结果,后续用它俩来决定 Tiling 大小。
常见问题(FAQ)
临时空间到底开多大合适?
底线是不能低于 minValue,否则结果不可信;在此前提下,区间内空间越大,kernel 侧计算性能通常略好。内存宽裕就取大值,紧张就取个够用的中间值。
为什么查出来的 maxValue 比我可用的空间还大?
maxValue 代表“最多可能需要”,不承诺你一定能用满。它大于 Unified Buffer 剩余空间时属于正常现象,按剩余空间实际能给的量分配即可,别为了凑 maxValue 去挤占其他内存。
返回值都是 0,是不是出错了?
不是。0 表示当前输入条件下 Fmod 不需要任何临时空间,跳过预留直接计算即可。
【免费下载链接】HiGHSLinear optimization software项目地址: https://gitcode.com/GitHub_Trending/hi/HiGHS
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考