左包裝問題
考慮有一個輸入數組和一個輸出數組,但只需要滿足某些條件的元素的情況寫入輸出數組。使用 AVX2 實現此目的最有效的方法是什麼?
SSE 方法
SSE 方法涉及使用_mm_movemask_ps 從輸入掩碼中提取4 位元掩碼,然後使用此掩碼透過_mm_load_si128 產生隨機播放控制資料。最後,使用 _mm_shuffle_epi8 來排列值以對齊 SIMD 暫存器前面的有效元素。此方法適用於具有 16 項查找表 (LUT) 的 4 寬 SSE 向量。
AVX 限制
但是,對於8 寬AVX向量,LUT 將需要大量的條目(256),每個條目有32 位元組,從而導致8k 的內存使用量。令人驚訝的是,AVX 沒有提供簡化此過程的說明,例如帶包裝的蒙面商店。
AVX2 解決方案
儘管缺乏專門的說明,可以使用以下組合在AVX2 中實現高效的左打包技巧:
演算法
AVX2中的左打包演算法涉及以下步驟:
結論
這種方法提供了一種高效的解決方案用於 AVX2 中的左包裝。透過利用 vpermps、pext 和其他 BMI2 指令,可以以最小的開銷和延遲基於遮罩打包資料。
以上是如何最有效地使用 AVX2 進行帶有面罩的左包裝?的詳細內容。更多資訊請關注PHP中文網其他相關文章!