快速拿到臨時空間的最大最小范圍)
GetFmodMaxMinTmpSize在 Host 側(cè)快速拿到臨時空間的最大最小范圍【免費下載鏈接】HiGHSLinear optimization software項目地址: https://gitcode.com/GitHub_Trending/hi/HiGHS寫 Fmod 算子、kernel 側(cè)執(zhí)行計算之前你需要先確定要預留多大的臨時空間。GetFmodMaxMinTmpSize 讓你在上 kernel 之前就在 Host 側(cè)算出這個范圍避免空間給少了出錯、給多了浪費。一次調(diào)用就拿到臨時空間大小范圍函數(shù)原型如下void GetFmodMaxMinTmpSize(const ge::Shape srcShape, const uint32_t typeSize, const bool isReuseSource, uint32_t maxValue, uint32_t minValue)以 1024 個 half 元素的數(shù)據(jù)為例完整調(diào)用寫法是// 輸入shape信息為1024;算子輸入的數(shù)據(jù)類型為half;不允許修改源操作數(shù) 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);上面這段調(diào)用依次傳入了 shape、元素大小half 占 2 字節(jié)和默認值 false空間上限、下限分別落到 maxValue 和 minValue 里。注意 typeSize 的單位是字節(jié)half 要傳 2。五個參數(shù)分別怎么填srcShape輸入— 輸入數(shù)據(jù)的 shape 信息比如 {1024}。它和 typeSize 一起決定這次計算的數(shù)據(jù)量。typeSize輸入— 單個數(shù)據(jù)元素的字節(jié)大小按實際數(shù)據(jù)類型填寫half 傳 2。isReuseSource輸入— 預留參數(shù)直接傳默認值 false 即可。maxValue輸出— 這個接口會動用的臨時空間上限預留的空間超出它也不會被使用。拿到值之后把它當作空間預留的參考上限。minValue輸出— 完成計算所需的臨時空間下限。預留時絕不能低于這個值否則無法保證計算正確。返回 0 或空間不足時怎么處理?? maxValue 只是參考值可能大于 Unified Buffer 的剩余空間。遇到這種情況按 Unified Buffer 的實際剩余空間來定預留大小同時保證不低于 minValue。maxValue 返回 0說明這次計算不需要任何臨時空間可以跳過預留。minValue 返回 0 同樣表示無需預留空間。在最小值到最大值之間預留得越大kernel 側(cè)計算性能提升越明顯。你可以結合實際內(nèi)存占用情況調(diào)節(jié)預留大小在正確性和性能之間取平衡。延伸閱讀完整的算子調(diào)用樣例可在 SDK 的數(shù)學計算類接口文檔中查閱編寫其他數(shù)學計算算子時都可以套用先在 Host 側(cè)查詢所需空間、再調(diào)用 kernel 側(cè)接口的套路?!久赓M下載鏈接】HiGHSLinear optimization software項目地址: https://gitcode.com/GitHub_Trending/hi/HiGHS創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考