【发布时间】:2019-12-21 15:01:14
【问题描述】:
AVX2 中引入的vpbroadcastw 指令方便地 (?) 将低 16 位 WORD 广播到 32 字节 ymm 寄存器中的所有位置。
因为我是个逆势者,我想改为将 AVX2 寄存器的 high 字(位 255:240)广播给所有元素。
我能想到的最好的方法是交叉车道随机播放,然后是 pshufb 逐字节随机播放,如下所示:
inline __m256i bcast_mse(__m256i v) {
__m256i temp = _mm256_permute2x128_si256(v, v, 0x11);
__m256i ctrl = _mm256_set_epi8( // clang-format off
15, 14, 15, 14, 15, 14, 15, 14,
15, 14, 15, 14, 15, 14, 15, 14,
15, 14, 15, 14, 15, 14, 15, 14,
15, 14, 15, 14, 15, 14, 15, 14
); // clang-format on
return _mm256_shuffle_epi8(temp, ctrl);
}
还有什么更好的吗?显然我更喜欢单指令,但假设这不会发生,可能需要这个 32 字节的随机播放控制。
【问题讨论】:
标签: x86 intel simd micro-optimization avx2