假设我有四个__m128i
变量,其中包含一些计算产生的数据。例如,让我们说:
__m128i a = _mm_set_epi64x(1, 11);
__m128i b = _mm_set_epi64x(2, 22);
__m128i c = _mm_set_epi64x(3, 33);
__m128i d = _mm_set_epi64x(4, 44);
我想初始化两个__m256i
变量,其中第一个包含四个变量的所有高 64 位,第二个包含每个变量的低 64 位。所以我想拥有:
__m256i x = ...; // x = { 4, 3, 2, 1 };
__m256i y = ...; // y = { 44, 33, 22, 11 };
这样做的明显方法是使用_mm256_set_epi64x
and _mm_extract_epi64
。但是,它可能不是特别快。有没有更快的方法呢?特别是,对于访问 64 位高位,我没有看到合适的负载(SSE2 中有低 64 位的负载)或随机播放指令(似乎没有“64 位随机播放”)。