gpt4 book ai didi

c++ - SSE 中的条件结构

转载 作者:行者123 更新时间:2023-11-30 01:19:46 26 4
gpt4 key购买 nike

我在使用 SSE/C++ 中的一种“特殊”条件结构时遇到了一些麻烦。下面的伪代码说明了我想要做什么:

    for-loop ...
// some SSE calculations
__m128i a = ... // a contains four 32-bit ints
__m128i b = ... // b contains four 32-bit ints

if any of the four ints in a is less than its corresponding int in b
vector.push_back(e.g. first component of a)

所以我做了很多 SSE 计算,作为这些计算的结果,我有两个 __m128i 值,每个值包含四个 32 位整数。这部分工作正常。但现在我想将某些东西放入 vector 中,如果 a 中的四个整数中至少有一个小于 b 中的相应整数。我不知道如何实现这一目标。

我知道 _mm_cmplt_epi32 函数,但到目前为止我没能用它来解决我的具体问题。

编辑:

是的,实际上我正在寻找一个聪明的解决方案。我有一个解决方案,但这看起来非常非常奇怪。

for-loop ...
// some SSE calculations
__m128i a = ... // a contains four 32-bit ints
__m128i b = ... // b contains four 32-bit ints

long long i[2] __attribute__((aligned (16)));

__m128i cmp = _mm_cmplt_epi32(a, b);
_mm_store_si128(reinterpret_cast<__m128i*>(i), cmp);

if(i[0] || i[1]) {
vector.push_back(...)

我希望,有更好的方法...

最佳答案

您想使用 _mm_movemask_ps 函数,它将返回一个您可以测试的合适的位掩码:

cmp = _mm_cmplt_epi32(a, b);

if(_mm_movemask_ps(cmp))
{
vector.push_back(...);
}

记录在此处:http://msdn.microsoft.com/en-us/library/4490ys29%28v=vs.90%29.aspx

关于c++ - SSE 中的条件结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20414630/

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