【发布时间】:2016-08-28 04:02:32
【问题描述】:
我需要水平添加一个__m128i,即 16 x Epi8 值。 XOP 指令将使这变得微不足道,但我没有这些指令。
目前的方法是:
hd = _mm_hadd_epi16(_mm_cvtepi8_epi16(sum), _mm_cvtepi8_epi16(_mm_shuffle_epi8(sum, swap)));
hd = _mm_hadd_epi16(hd, hd);
hd = _mm_hadd_epi16(hd, hd);
SSE4.1 有没有更好的方法?
【问题讨论】:
-
Related: How to count character occurrences using SIMD 总结
_mm256_cmpeq_epi8结果,需要这个操作作为外循环中的步骤之一。 -
相关:How to horizontally sum signed bytes in XMM 展示了如何为有符号字节扩展它。 (并且可选地,如何只求和 9 个字节而不是完整的 16 个字节。)