gpt4 book ai didi

c - 测试两个 __m128i 变量之间的相等性

转载 作者:太空狗 更新时间:2023-10-29 16:46:23 38 4
gpt4 key购买 nike

如果我想在两个 __m128i 变量之间进行按位相等测试,我需要使用 SSE 指令还是可以使用 ==?如果不是,我应该使用哪个 SSE 指令?

最佳答案

尽管使用 _mm_movemask_epi8 是一种解决方案,但如果您的处理器带有 SSE4.1,我认为更好的解决方案是使用在 FLAGS 寄存器中设置零或进位标志的指令。 This saves a test or cmp instruction .

要做到这一点,你可以这样做:

if(_mm_test_all_ones(_mm_cmpeq_epi8(v1,v2))) {
//v0 == v1
}

编辑:正如 Paul R 指出的那样,_mm_test_all_ones 生成两条指令:pcmpeqdptest。使用 _mm_cmpeq_epi8 总共是三个指令。这是一个更好的解决方案,总共只使用两条指令:

__m128i neq = _mm_xor_si128(v1,v2);
if(_mm_test_all_zeros(neq,neq)) {
//v0 == v1
}

这产生

pxor    %xmm1, %xmm0
ptest %xmm0, %xmm0

关于c - 测试两个 __m128i 变量之间的相等性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26880863/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com