將8 個字元從記憶體載入到__m256 變數中作為打包單精確度浮點數
在高斯模糊演算法中,可以實現優化以加快執行速度透過有效地將資料載入到向量暫存器中。其中一種最佳化涉及用 __m256 變數取代浮點數組。本文利用 AVX2 指令的強大功能,為此任務提供了最佳解決方案。
使用AVX2 指令的解決方案
有效地將8 個字元從記憶體載入到__m256 變數中使用AVX2,以下指令是建議:
VPMOVZXBD ymm0, [rsi] ; or SX to sign-extend (Byte to DWord) VCVTDQ2PS ymm0, ymm0 ; convert to packed foat
指令細節
其他最佳化
要進一步最佳化此流程,請考慮使用廣播負載來提供高 64 位元的 VPMOVZXBD 指令和 Vpshufb 指令。此策略減少了整體uop 計數,提高了效率:
<code class="pseudocode">__m256 b = [float(new_image[x+7]), float(new_image[x+6]), ... , float(new_image[x])]; __m256 b = _mm256_broadcast_ss(&new_image[x]) _mm256_shuffle_epi8(b, _mm256_set1_epi8(0)); // fills upper 64 bits with zeroes _mm256_cvtps_epu32(b); // convert to integers _mm256_cvtepu32_ps(b); // convert back to floats</code>
避免次優技術
其他注意事項
以上是如何使用 AVX2 將 8 個字元從記憶體載入到 __m256 變數作為打包單精度浮點數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!