SSE 向量重新对齐?

SSE vector realign?

有没有办法重新对齐已加载到 SSE/AVX 向量寄存器中的数据(比如实现滑动 window)?或者我是否需要自己移动字节并再次从内存中重新加载到向量寄存器中?

对于 128 位向量,SSSE3/AVX [v]palignr xmm works for arbitrary byte-windows on a pair of registers. For AVX2 ymm registers, the 2x 128-bit lane behaviour is nearly useless for this. _mm_alignr_epi8 (PALIGNR) equivalent in AVX2

有时从内存重新加载更好,但是:2/时钟加载吞吐量,如果您不跨越 cache-line 边界(在 Intel 上)则不会受到惩罚,而 1/时钟洗牌吞吐量。 cache-line 拆分的吞吐量/延迟损失并不可怕。如果一个 palignr 就足够了,通常使用它,但通常最好进行未对齐的加载,而不是尝试为 AVX2 模拟它。