news 2026/10/23 4:05:47

GetFmodMaxMinTmpSize 详解:Fmod 算子临时空间大小一次讲清

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GetFmodMaxMinTmpSize 详解:Fmod 算子临时空间大小一次讲清

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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/23 4:05:12

30元Arduino完整BMS修复指南:让被锁定的电池重获新生

30元Arduino完整BMS修复指南&#xff1a;让被锁定的电池重获新生 【免费下载链接】open-battery-information 项目地址: https://gitcode.com/GitHub_Trending/op/open-battery-information bms repair起点&#xff1a;一块30元arduino给电池做体检 Open Battery Info…

作者头像 李华
网站建设 2026/10/23 4:03:50

linux软连接和硬链接

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/23 4:02:58

【c++】c语言入门到c++使用高手: c语言入门之编译预处理(一)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/23 4:02:25

【python】Python ERROR: IndexError

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华