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