SSE 向量重新对齐?
Posted
技术标签:
【中文标题】SSE 向量重新对齐?【英文标题】:SSE vector realign? 【发布时间】:2020-11-07 07:17:52 【问题描述】:有没有办法重新对齐已加载到 SSE/AVX 向量寄存器中的数据(比如实现滑动窗口)?还是我需要自己移动字节并再次从内存重新加载到向量寄存器中?
【问题讨论】:
您要按位、按字节还是按字对齐它们? 对于 128 位向量,SSSE3 / AVXpalignr
有效。对于 AVX2,2x 128 位通道行为对此几乎没有用处。不过,有时从内存重新加载会更好:如果您不跨越缓存线边界(在 Intel 上),则 2/时钟负载吞吐量不会受到影响。
@dai 位或字节
【参考方案1】:
对于 128 位向量,SSSE3 / AVX [v]palignr xmm
适用于一对寄存器上的任意字节窗口。对于 AVX2 ymm
寄存器,2x 128 位通道行为对此几乎没有用处。 _mm_alignr_epi8 (PALIGNR) equivalent in AVX2
不过,有时从内存重新加载会更好:如果您不跨越缓存线边界(在 Intel 上),则 2/时钟负载吞吐量不会受到任何惩罚,而 1/时钟 shuffle 吞吐量则是 1/时钟。缓存线拆分的吞吐量/延迟损失并不可怕。如果一个palignr
就足够了,通常使用它,但通常最好进行未对齐的加载,而不是尝试为 AVX2 模拟它。
【讨论】:
以上是关于SSE 向量重新对齐?的主要内容,如果未能解决你的问题,请参考以下文章