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

Get index of first element that is not zero in a __m256 variable

__m256  dst = _mm256_cmp_ps(value1, value2, _CMP_LE_OQ);

如果 dst[0,0,0,-nan, 0,0,0,-nan]; 我希望能够知道第一个 -nan 索引,在本例中为 3 而无需使用 8 迭代进行 for 循环。 这可能吗?

我会movmskps the result of the comparison and then do a 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);