国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

MegEngine 使用小技巧:用 mperf 進(jìn)行安卓 opencl 算子的 roofline 分析

2023-05-16 16:51 作者:曠視天元MegEngine  | 我要投稿

前言

roofline 分析是一種簡單評(píng)估當(dāng)前計(jì)算任務(wù)對(duì)當(dāng)前平臺(tái)計(jì)算/訪存能力的利用情況的方法,可以幫助分析算子的優(yōu)化方向和優(yōu)化潛力。mperf 實(shí)現(xiàn)了安卓 mali/adreno 兩種 gpu 平臺(tái)的 roofline 分析能力,下面以 mali 平臺(tái)為例,簡單介紹一下操作步驟。

編譯和集成

  • 下載 repo 代碼

  • 編譯安裝

  • 項(xiàng)目集成

關(guān)于編譯和集成部分,詳見 mperf readme(https://github.com/MegEngine/mperf#readme)

獲取 roofline 數(shù)據(jù)

  • 獲取 opencl 算子執(zhí)行過程的 GFLOPs 和 GBPs

詳細(xì)測(cè)試樣例,參見 mali_gpu_pmu_test(https://github.com/MegEngine/mperf/blob/master/apps/gpu_mali_pmu_test.cpp)

  • 獲取當(dāng)前 gpu 平臺(tái)的峰值計(jì)算能力和訪存帶寬

  • 將編譯階段得到的 build_dir/apps 目錄下的 gpu_inst_gflops_latency 和 gpu_spec_dram_bw 拷貝到手機(jī)上執(zhí)行,即可拿到 gpu 的實(shí)際峰值算力和峰值帶寬

峰值性能測(cè)試的詳細(xì)邏輯,參見 gpu_inst_gflops_latency 和 gpu_spec_dram_bw

繪制 roofline

  • 上一步拿到了 opencl 算子執(zhí)行過程的 GFLOPs 和 GBPs 和 gpu 的實(shí)測(cè)峰值算力和峰值帶寬,現(xiàn)在可以借助 mperf plot_roofline(https://github.com/MegEngine/mperf/blob/master/apps/scripts/roofline/plot_roofline.py) 腳本繪制 roofline 曲線:

  • 編輯 roofline_data.txt:

  • 執(zhí)行 python 腳本:

  • 比如上面得到的 roofline 曲線中,算子的計(jì)算訪存比小于機(jī)器平衡點(diǎn)(通常將屋檐和屋頂轉(zhuǎn)折點(diǎn)的橫坐標(biāo)稱為機(jī)器平衡點(diǎn)),所以可以初步判斷該算子在該平臺(tái)上主要 bound 在訪存部分,平臺(tái)的算力資源對(duì)于該算子來說還是有富裕的。并且可以根據(jù)算子的實(shí)際帶寬跟機(jī)器的峰值帶寬的比值,來評(píng)估后續(xù)訪存優(yōu)化的空間有多大。

  • 同時(shí)提醒一點(diǎn),在獲取算子 GBPs 的時(shí)候,我們是拿到了算子實(shí)際發(fā)生的 ddr 訪存量的,這個(gè)訪存量可以跟算子輸入輸出變量總的內(nèi)存占用大小做一個(gè)比較,從而衡量出算子有多少重復(fù)訪存沒有被 cache 和寄存器 cover 住,而產(chǎn)生的對(duì) ddr 的重復(fù)訪問。如果觀察到 ddr 訪存量顯著大于輸入輸出總的內(nèi)存占用,那么我們就需要去審視算子的訪存邏輯是不是不夠 cache 友好,是不是有些重復(fù)訪存可以通過加一些緩存邏輯來避免等等。

拓展思考

  • 通過上面的步驟,我們獲取了 roofline 數(shù)據(jù),這可以幫助我們判斷當(dāng)前算子在當(dāng)前平臺(tái)是計(jì)算 bound 還是訪存 bound,以及相對(duì)峰值算力和峰值帶寬的 gap 大小。但是,單單依靠 roofline 分析又很難進(jìn)一步具化瓶頸的位置和緩解的對(duì)策,比如訪存 bound 的原因是因?yàn)槟囊患?jí)存儲(chǔ)的訪存效率低下?計(jì)算 bound 是因?yàn)橹噶钜蕾囘€是某一類 alu 硬件資源緊張?

  • 為了解決這些問題,mperf 還做了一些硬件參數(shù)探測(cè)、PMU 數(shù)據(jù)加工分析、opencl kernel 的動(dòng)靜態(tài)代碼分析(動(dòng)靜態(tài)代碼分析的功能,還在內(nèi)部迭代開發(fā)中,尚未推到開源 repo 中)等嘗試,盡可能讓算子性能分析和優(yōu)化更加有跡可循,或者說心智負(fù)擔(dān)更低。

附:

更多 MegEngine 信息獲取,您可以:查看文檔:https://www.megengine.org.cn/doc/stable/zh/

GitHub 項(xiàng)目: https://github.com/MegEngine

加入 MegEngine 用戶交流 QQ 群:1029741705

歡迎參與 MegEngine 社區(qū)貢獻(xiàn),成為?Awesome MegEngineerhttps://www.megengine.org.cn/community-AMGE,榮譽(yù)證書、定制禮品享不停。


MegEngine 使用小技巧:用 mperf 進(jìn)行安卓 opencl 算子的 roofline 分析的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
平舆县| 茂名市| 余江县| 合阳县| 冕宁县| 永登县| 榆社县| 璧山县| 大关县| 汉中市| 蓝田县| 子长县| 博爱县| 县级市| 岳池县| 册亨县| 九寨沟县| 阿坝县| 喜德县| 施甸县| 沐川县| 清远市| 阜阳市| 平乡县| 右玉县| 会泽县| 应城市| 镇江市| 怀来县| 晋宁县| 于都县| 朝阳区| 台山市| 宁晋县| 新竹县| 鄂温| 绥宁县| 南宫市| 岳阳市| 阳江市| 南投市|