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