1. MegPeak——讓你更懂你的處理器

        共 2813字,需瀏覽 6分鐘

         ·

        2022-08-09 09:38


        在算力需求爆炸的大背景下,如何發(fā)揮出已有硬件的最大算力變得非常重要,直觀一點是:我們需要對現(xiàn)有算法針對特定的處理器進行極致的性能優(yōu)化,盡量滿足目前AI算法對算力的高要求。


        為了能夠做到極致的性能優(yōu)化,我們可能的方向有:

        • 優(yōu)化算法,使得算法能夠在滿足準確度前提下,訪存和計算量盡量小

        • 優(yōu)化程序,使得實現(xiàn)這些算法的程序最大限度發(fā)揮處理器性能

        在優(yōu)化程序的過程中,首先要解決的問題是:如何評估程序發(fā)揮了處理器幾成的算力,以及進一步優(yōu)化空間和優(yōu)化方向。


        為了更懂我們的處理器,曠視MegEngine 團隊開發(fā)了一個工具MegPeak,可以幫助開發(fā)人員進行性能評估,開發(fā)指導等,目前已經(jīng)開源。

        GitHub項目地址:https://github.com/MegEngine/MegPeak。

        點擊文末的閱讀原文,可了解更多MegPeak的使用方法、原理等


        MegPeak功能


        通過 MegPeak ,用戶可以測試目標處理器:

        • 指令的峰值帶寬

        • 指令延遲

        • 內(nèi)存峰值帶寬

        • 任意指令組合峰值帶寬

        雖然上面的部分信息可以通過芯片的數(shù)據(jù)手冊查詢相關(guān)數(shù)據(jù),然后結(jié)合理論計算得到,但是很多情況下無法獲取目標處理器詳盡的性能文檔,另外通過 MegPeak 進行測量更直接和準確,并且可以測試特定指令組合的峰值帶寬。MegEngine團隊使用MegPeak在幾種常用ARM架構(gòu)CPU上進行測試,根據(jù)對指令fmla的測試結(jié)果整理出下表。



        其中,GFLOPS指標可以衡量設(shè)備的算力,而 FLOPS/Cycle指標可以幫助推測CPU的硬件特征。下面以A55/A77/Apple M1分別舉例說明。

        • A55:由于每條指令fmla可執(zhí)行兩次浮點運算(包括一次乘法和一次加法),且測試得到的FLOPS/Cycle指標接近8,故可以推測A55的后端執(zhí)行單元有一個128位浮點向量乘加單元或有兩個64位浮點向量乘加單元。

        • A77:其FLOPS/Cycle指標約為16,所以每個周期A77可以執(zhí)行2條SIMD的fmla指令,所以其后端有兩個SIMD fmla執(zhí)行單元,且后端至少是雙發(fā)射的。

        • Apple M1:Apple M1的FLOPS/Cycle指標達到了32,說明其擁有4個SIMD執(zhí)行單元

        用 MegPeak 測到的數(shù)據(jù),可以用來干什么

        MegPeak可以測試出處理器的內(nèi)存帶寬,指令的理論計算峰值,指令的延遲等信息,因此可以幫助我們:

        • 繪制 Roofline Model 指導我們優(yōu)化模型性能

        • 評估程序的優(yōu)化空間

        • 探索指令組合的理論計算峰值

        另外MegPeak還可以提供對理論的驗證,如我們通過處理器頻率*單核單周期指令發(fā)射數(shù)量*每條指令執(zhí)行的計算量可以計算出理論計算峰值,然后我們可以通過MegPeak進行實際測量進行驗證。


        繪制指令相關(guān)的 Roofline Model



        Roofline 模型被大量的使用在高性能計算中,是評估算法的可優(yōu)化程度和優(yōu)化方向的重要工具。使用 MegPeak 可以繪制出更加具體的關(guān)于指令對應的Roofline模型,如:在CPU中,不同的數(shù)據(jù)類型,雖然訪存帶寬不會改變,但是計算峰值差距比較大,比如在arm上 float 的計算峰值和 int8 的計算峰值差距很大。


        評估代碼優(yōu)化空間

        在優(yōu)化具體算法的時候,可以通過MegPeak測試出kernel里面的主要指令的最大峰值,如在Arm上優(yōu)化 fp32 Matmul 的時候,主要用到的指令是 fmla 指令,這時候可以測試程序?qū)嶋H運行的峰值,指令的峰值和程序的峰值差距越小,說明代碼優(yōu)化的越好。


        另外,可以根據(jù)算法實現(xiàn)計算出計算量和訪存量,并使用MegPeak繪制出上面的Roofline,通過計算實際的計算密度,然后再對應到Roofline中,如果計算密度落在上圖中的綠色區(qū)域,說明程序需要更多考慮優(yōu)化訪存,提供更優(yōu)的訪存模型,如分塊,提前pack數(shù)據(jù)等。如果計算強度的點落在灰色區(qū)域說明,代碼已經(jīng)最優(yōu)了,如果還想進一步提速,只能考慮從算法角度進行優(yōu)化了,如:在卷積中使用FFT,Winograd等算法進行優(yōu)化。


        探索最優(yōu)指令組合

        很多Kernel的優(yōu)化不是單純的某一條指令就可以衡量,可能需要多條指令的組合才能代表整個Kernel的計算,因此我們需要探索如何組織這些指令使其達到處理器最優(yōu)的性能。下面列舉在A53小核優(yōu)化fp32 Matmul的過程中,由于Matmul是計算密集型算子, 考慮通過多發(fā)射隱藏訪存指令的開銷,使用 MegPeak 配合進行分析,探索如何組合指令實現(xiàn)盡可能多的多發(fā)射。


        因為小核上面資源有限,指令多發(fā)射有很多限制:

        • 首先使用MegPeak測試出 A53 上 fp32 的 fmla 指令的計算峰值,將其定義為100%峰值計算性能

        • 測試哪些指令組合可以支持雙發(fā)射

        • 在MegPeak中添加vector load 和 fmla 1:1組合的代碼,然后測試其峰值僅僅為float峰值的36%,表明Vector load和 fmla不能雙發(fā)射

        • 同樣可以測得通用寄存器load指令ldr+fmla的組合可以達到float峰值的93%,說明 ldr 可以和 fmla雙發(fā)射

        • 同上可以測得 ins+fmla 能雙發(fā)射,ins + vector load 64位 可以雙發(fā)射

        • 根據(jù)Matmul最內(nèi)層Kernel的計算原理,如最內(nèi)層Kernel的分塊大小是8x12,那最內(nèi)層需要讀?。?0個float數(shù)據(jù),計算24次fmla計算

        • 結(jié)合上面的 MegPeak 測試的信息,我們需要找到用最少時鐘完成這20個float數(shù)據(jù)load,和24次fmla數(shù)據(jù)計算的指令組合,因此需要將盡可能多的數(shù)據(jù)load和fmla進行雙發(fā)射,隱藏數(shù)據(jù)load的耗時

        • 最后的指令組合是:

        • 使用vector load 64指令 + ldr + ins組合成為一個neon寄存器數(shù)據(jù),因為ldr和ins都可以和fmla雙發(fā)射,把他們和fmla放在一起可以隱藏他們的耗時

        • 在這3條指令中穿插fmla指令,并盡可能解決數(shù)據(jù)依賴

        根據(jù)上面的指令組合可以使得Matmul在小核上達到計算峰值的70%左右。


        總結(jié)

        MegPeak 作為一個進行高性能計算的輔助工具,能夠使得開發(fā)人員輕松獲得目標處理器的內(nèi)在的詳細信息,輔助進行對代碼的性能評估,以及優(yōu)化方法設(shè)計。但是MegPeak也有一些需要豐富的方向:

        • 支持獲取更多的處理器性能數(shù)據(jù),如:L1,L2 cache的大小,自動探索各種指令組合的雙發(fā)射情況,并大概繪制出一個處理器后端的縮略圖。如:https://en.wikichip.org/w/images/5/57/cortex-a76_block_diagram.svg

        • 支持測量移動端OpenCL的更多細節(jié)信息,如:warp size,local memory 大小等。


        如果有同學對上面的功能感興趣,歡迎大家提交代碼。最后歡迎大家使用 MegPeak。

        瀏覽 40
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
          
          

            1. 无尽~捆绑~强制~露出~3d | 久久国产乱子伦精品免费午夜... 中国老女人操逼 | 日日摸夜夜添夜夜躁好吊 | 好大好紧好爽好湿h视频 | 好大好粗好多水 |