【问题标题】:SSE vector realign?SSE 向量重新对齐?
【发布时间】:2020-11-07 07:17:52
【问题描述】:

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

【问题讨论】:

  • 您要按位、按字节还是按字对齐它们?
  • 对于 128 位向量,SSSE3 / AVX palignr 有效。对于 AVX2,2x 128 位通道行为对此几乎没有用处。不过,有时从内存重新加载会更好:如果您不跨越缓存线边界(在 Intel 上),则 2/时钟负载吞吐量不会受到影响。
  • @dai 位或字节

标签: sse avx avx2


【解决方案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 模拟它。

【讨论】:

    猜你喜欢
    • 2016-09-19
    • 2012-03-16
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    相关资源
    最近更新 更多