將8 個字元從記憶體載入到__m256 變數中作為打包單精度浮點數
為了優化高斯模糊演算法,您尋求用__m256 內在變數取代浮點緩衝區的使用。本問題旨在確定此任務的最佳指令。
AVX2 架構說明:
; rsi = new_image VPMOVZXBD ymm0, [rsi] ; or SX to sign-extend (Byte to DWord) VCVTDQ2PS ymm0, ymm0 ; convert to packed foat
其他策略:
請考慮使用128 位元廣播負載來提供vpmovzxbd ymm,xmm 和&&]考慮使用128 位元廣播負載來提供vpmovzxbd ymm,xmm 和vps )高64 位。這種方法減少了 uop 數量,並且對 Ryzen CPU 有益。
避免使用額外的 shuffle 指令,因為當 shuffle 已經成為限制時,它們可能會成為瓶頸。VPMOVZXBD xmm0, [rsi] VPMOVZXBD xmm1, [rsi 4] VINSERTF128 ymm0, ymm0, xmm1, 1 ; put the 2nd load of data into the high128 of ymm0 VCVTDQ2PS ymm0, ymm0 ; convert to packed float
AVX1 架構說明:
VPMOVZXBD xmm0, [rsi] VPMOVZXBD xmm1,[rsi 4] VINSERTF128 ymm0, ymm0, xmm1, 1 ;將第二次載入的資料放入 ymm0 的高點 128 VCVTDQ2PS ymm0, ymm0 ;轉換為打包浮點
內在函數注意事項:
GCC 和MSVC 可能需要特殊處理,以確保在使用內在函數時實現最佳程式碼產生VPMOVZXBD ymm,[mem].請考慮使用_mm_loadl_epi64 內在函數,它可以折疊到記憶體運算元中,以便在GCC 版本9 及更高版本上使用GCC 在-O3 處實現最佳asm。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3