NCHW与NC4HW4数据排布在卷积优化上的优劣分析
生活随笔
收集整理的這篇文章主要介紹了
NCHW与NC4HW4数据排布在卷积优化上的优劣分析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
數據布局對性能影響巨大。
先來看一看在 NCHW 的布局下,怎么利用 SIMD 加速 3x3 的 depth-wise 卷積。
首先,讀取數據時,需要一次性讀取四個 float 作為第一行的數據,后兩行的讀取也是相似的;此時,讀取出的三行數據已經足夠計算兩列輸出,即,可以復用部分數據;而后,為了提高數據復用,會再讀取出第四行數據,一次計算兩行兩列,即,可以引入循環展開;然而,殘留的 5~25 和 21~25 亮度眼邊界無法利用 SIMD 計算,只能逐一循環讀寫完成計算;按照這樣的方式,就可以相應完成后幾個通道的計算。
但是, NCHW 布局下,無法充分利用 SIMD 進行加速,同時,實現優化分支越多,占用包大小也就越多。
再來看一看 NC/4HW4 布局下,利用 SIMD 加速的情況又是怎樣的。
這里的 "C/4" 指的是按照 4 個通道對齊的方式重排數據。重排所有輸入和權重數據后,每次 SIMD 讀寫都天然是 4 個通道的輸入數據和 4 個通道的權重數據。這樣,不論 kernel、stride、dilation 怎么變化,我們都可以簡單地使用 for 循環和 SIMD 的一套通用優化完成卷積計算。既不會有邊緣數據無法加速的問題,也不會對包大小造成影響。
總結
以上是生活随笔為你收集整理的NCHW与NC4HW4数据排布在卷积优化上的优劣分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RK1109 RK1126等芯片来袭,2
- 下一篇: 完全平方数—leetcode279