【问题标题】:sse fast load first half of an arraysse 快速加载数组的前半部分
【发布时间】:2013-09-08 08:12:08
【问题描述】:

假设我有一个大小为 8 的数组,用 unsigned int 填充。

unsigned int t[8]

现在我想将每个元素的前 16 位加载到 128 位寄存器中:

__m128i to_fill

有没有快速的方法来做到这一点?而不是使用循环和屏蔽位 每个元素?

【问题讨论】:

    标签: c++ sse


    【解决方案1】:

    您需要加载两个 4 x 32 位整数的向量,屏蔽每个元素的高 16 位,然后将它们打包成一个 8 x 16 位整数的单个向量。

    __m128i v_lo = _mm_loadu_si128((__m128i *)&t[0]);
    __m128i v_hi = _mm_loadu_si128((__m128i *)&t[4]);
    v_lo = _mm_and_si128(v_lo, _mm_set1_epi32(0xffff));
    v_hi = _mm_and_si128(v_hi, _mm_set1_epi32(0xffff));
    __m128i v = _mm_packs_epi32(v_lo, v_hi);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-21
      • 1970-01-01
      • 2019-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-01
      • 1970-01-01
      相关资源
      最近更新 更多