我试图找到一种更有效的方法来“旋转”或将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
什么是紧接在前面的代码,填充什么将会被移动,以及紧接着的将使用移位结果的代码是什么?也许外部部件可以集成到优化工作中。 –