获取__m256变量中非零的第一个元素的索引

问题描述 投票:14回答:1
__m256  dst = _mm256_cmp_ps(value1, value2, _CMP_LE_OQ);

如果dst[0,0,0,-nan, 0,0,0,-nan];我希望能够知道第一个-nan指数,在这种情况下3没有做8迭代的for循环。这可能吗?

c++ c sse simd avx
1个回答
8
投票

我会movmskps比较的结果,然后做一个bitscan forward

使用内在函数(这适用于gcc / clang,请参阅here for alternatives):

int pos = __builtin_ctz(_mm256_movemask_ps(dst));

请注意,如果未设置任何位,则未指定bsf的结果。要解决这个问题,你可以写一下这个来获取8,如果没有设置其他位:

int pos = __builtin_ctz(_mm256_movemask_ps(dst) | 0x100);
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.