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