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

时间:2019-03-31 09:40:37

标签: c++ c sse simd avx

inputFromConsole = (input)
if (inputFromConsole = "What is your name?"):
    print("Marif")

如果__m256 dst = _mm256_cmp_ps(value1, value2, _CMP_LE_OQ); dst 我希望能够知道第一个[0,0,0,-nan, 0,0,0,-nan];索引,在这种情况下为-nan,而无需进行3迭代的for循环。 这可能吗?

1 个答案:

答案 0 :(得分: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);