☰
GetFmodMaxMinTmpSize:host 侧查询 Fmod 核函数的临时空间上下限
2026/10/23 2:22:33 网站建设 项目流程

GetFmodMaxMinTmpSize:host 侧查询 Fmod 核函数的临时空间上下限

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

为什么要在 host 侧先算一遍 📌

开发 Fmod(逐元素取模)算子时,核函数要靠一块芯片上的临时空间才能把计算做完。申请多少却是个麻烦事:给少了,结果直接算错;给多了,又挤占 Unified Buffer(芯片上供各算子共用的共享存储),把别的算子逼进角落。

GetFmodMaxMinTmpSize 接的正是"先估算"这一步:你在 host 侧把输入形状和元素大小告诉它,它回传核函数所需的临时空间下限与上限。拿这两个数去定传给核函数的 Tiling(分块处理)参数,就不用靠猜。

函数签名怎么读

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

一句话读法:前三个是输入(形状、元素字节数、源复用开关),后两个是引用型输出,空间上限、下限分别写回其中。

参数速查:每个入参管什么

参数方向类型说明
srcShape入const ge::Shape&输入张量的维度信息,如 {1024} 表示 1024 个元素
typeSize入const uint32_t每个元素占多少字节,half 传 2、float 传 4
isReuseSource入const bool预留开关,传默认值 false
maxValue出uint32_t&核函数可用临时空间的上限,0 表示用不到
minValue出uint32_t&算对结果所需空间下限,分配不能低于它

返回值与边界 ⚠️

  • 无返回值,结果全部经由引用写回 maxValue 与 minValue。
  • minValue 是硬下限,空间给少了,正确性没法保证。
  • maxValue 只是参考值,它可能超过 Unified Buffer 的剩余空间,届时按剩余量截断即可。
  • 两者同时为 0,说明核函数不占任何临时空间就能完成。

最小可跑示例

前提:输入为 1024 个元素的一维张量,元素类型 half(2 字节),源操作数不复用,故 isReuseSource 取 false。

// 1024 个元素,half 每元素 2 字节,源操作数不复用 std::vector<int64_t> dims = {1024}; ge::Shape src(dims); uint32_t maxBytes = 0; // 由接口回填的空间上限 uint32_t minBytes = 0; // 由接口回填的空间下限 AscendC::GetFmodMaxMinTmpSize(src, 2, false, maxBytes, minBytes);

选型与性能提示 ✅

空间下限怎么定

minBytes 就是保底线:你申请的临时空间只要不低于它,计算结果就有保障。

空间加大能快多少

在下限到上限之间,空间取得越大,核函数跑得越快,只是提升幅度有限,不必一味拉满。

实操顺序:先按 minBytes 把正确性锁住,再看 Unified Buffer 还剩多少余量,能放到 maxBytes 最好,放不下就按余量取。另外,maxBytes 为 0 表示 Fmod 用不到临时空间,此时什么都不必申请。

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

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

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

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

立即咨询