☰
GetFmodMaxMinTmpSize:在 Host 侧快速拿到临时空间的最大最小范围
2026/10/23 6:00:08 网站建设 项目流程

GetFmodMaxMinTmpSize:在 Host 侧快速拿到临时空间的最大最小范围

【免费下载链接】HiGHSLinear optimization software项目地址: https://gitcode.com/GitHub_Trending/hi/HiGHS

写 Fmod 算子、kernel 侧执行计算之前,你需要先确定要预留多大的临时空间。GetFmodMaxMinTmpSize 让你在上 kernel 之前就在 Host 侧算出这个范围,避免空间给少了出错、给多了浪费。

一次调用就拿到临时空间大小范围

函数原型如下:

void GetFmodMaxMinTmpSize(const ge::Shape& srcShape, const uint32_t typeSize, const bool isReuseSource, uint32_t& maxValue, uint32_t& minValue)

以 1024 个 half 元素的数据为例,完整调用写法是:

// 输入shape信息为1024;算子输入的数据类型为half;不允许修改源操作数 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、元素大小(half 占 2 字节)和默认值 false,空间上限、下限分别落到 maxValue 和 minValue 里。注意 typeSize 的单位是字节,half 要传 2。

五个参数分别怎么填

  • srcShape(输入)— 输入数据的 shape 信息,比如 {1024}。它和 typeSize 一起决定这次计算的数据量。
  • typeSize(输入)— 单个数据元素的字节大小,按实际数据类型填写,half 传 2。
  • isReuseSource(输入)— 预留参数,直接传默认值 false 即可。
  • maxValue(输出)— 这个接口会动用的临时空间上限,预留的空间超出它也不会被使用。拿到值之后,把它当作空间预留的参考上限。
  • minValue(输出)— 完成计算所需的临时空间下限。预留时绝不能低于这个值,否则无法保证计算正确。

返回 0 或空间不足时怎么处理

  • ⚠️ maxValue 只是参考值,可能大于 Unified Buffer 的剩余空间。遇到这种情况,按 Unified Buffer 的实际剩余空间来定预留大小,同时保证不低于 minValue。
  • maxValue 返回 0,说明这次计算不需要任何临时空间,可以跳过预留。
  • minValue 返回 0 同样表示无需预留空间。
  • 在最小值到最大值之间,预留得越大,kernel 侧计算性能提升越明显。你可以结合实际内存占用情况调节预留大小,在正确性和性能之间取平衡。

延伸阅读

完整的算子调用样例可在 SDK 的数学计算类接口文档中查阅;编写其他数学计算算子时,都可以套用先在 Host 侧查询所需空间、再调用 kernel 侧接口的套路。

【免费下载链接】HiGHSLinear optimization software项目地址: https://gitcode.com/GitHub_Trending/hi/HiGHS

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询