我試圖找到一種更有效的方法來「旋轉」或將avx _m256矢量中的32位浮點值向右或向左移動一個地方。Shuffle AVX 256矢量元素左移/右移1位C內部函數
使得:
A7,A6,A5,A4,A3,A2,A1,A0
變得
0,A7,A6,A5,A4,A3,A2,A1
(我不介意,因爲我反正更換單元中的數據丟失。)
我已經查看了這個線程:Emulating shifts on 32 bytes with AVX 但我不雷爾y理解正在發生的事情,並且它不會解釋_MM_SHUFFLE(0,0,3,0)作爲輸入參數的功能。
我試圖優化此代碼:
_mm256_store_ps(temp, array[POS(ii, jj)]);
_mm256_store_ps(left, array[POS(ii, jj-1)]);
tmp_array[POS(ii, jj)] = _mm256_set_ps(left[0], temp[7], temp[6], temp[5], temp[4], temp[3], temp[2], temp[1]);
我知道一旦一個轉變是在地方,我可以用插入來代替剩餘的細胞。我覺得這樣做會更有效率,然後拆開浮動陣列並重建。
- 我還希望能夠左右移動,因爲我需要在別處執行類似的操作。
任何幫助,非常感謝!謝謝!
我們稱之爲洗牌,因爲你四處移動元素,不移動或旋轉的內部元件的鑽頭。 –
感謝您的術語更正,恰當地更名問題! – MishMash95
什麼是緊接在前面的代碼,填充什麼將會被移動,以及緊接着的將使用移位結果的代碼是什麼?也許外部部件可以集成到優化工作中。 –