Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 获取_m256变量中第一个非零元素的索引_C++_C_Sse_Simd_Avx - Fatal编程技术网

C++ 获取_m256变量中第一个非零元素的索引

C++ 获取_m256变量中第一个非零元素的索引,c++,c,sse,simd,avx,C++,C,Sse,Simd,Avx,如果dst是[0,0,0,-nan,0,0,0,-nan] 我希望能够知道第一个-nan索引,在本例中是3,而无需使用8迭代执行for循环。 这是可能的吗?我会计算比较的结果,然后做一个比较 使用intrinsic(这适用于gcc/clang,请参阅): 请注意,如果未设置位,bsf的结果未指定。要解决此问题,例如,如果未设置其他位,则可以编写此代码以获取8: int pos = __builtin_ctz(_mm256_movemask_ps(dst)); 将比较结果视为整数或掩码,即使它位

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

我会计算比较的结果,然后做一个比较

使用intrinsic(这适用于gcc/clang,请参阅):

请注意,如果未设置位,
bsf
的结果未指定。要解决此问题,例如,如果未设置其他位,则可以编写此代码以获取
8

int pos = __builtin_ctz(_mm256_movemask_ps(dst));

将比较结果视为整数或掩码,即使它位于
\uuuum256
中。它是0或全1,这是2的补码-1=无符号0xFFFFFF。我的意思是,如果解释为IEEE binary32,它们是0或-NaN的位模式,但这很少是您想要使用它们的方式。请注意,在较新的CPU上,例如Intel Haswell或更新的CPU上,您可以使用
\u tzcnt\u u32()
而不是
\u builtin\u ctz()
。内在的
\u tzcnt\u u32()
可用于所有主要编译器(gcc、icc、clang、MSVC)。它映射到
tzcnt
指令,这也是为零输入定义的。
int pos = __builtin_ctz(_mm256_movemask_ps(dst));
int pos = __builtin_ctz(_mm256_movemask_ps(dst) | 0x100);