Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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++ 从32个8位比较生成32位汉明字符串_C++_C_Sse_Simd_Avx - Fatal编程技术网

C++ 从32个8位比较生成32位汉明字符串

C++ 从32个8位比较生成32位汉明字符串,c++,c,sse,simd,avx,C++,C,Sse,Simd,Avx,我正在对图像执行普查变换,每像素进行32次比较。我可以有效地生成一个256位的向量0x0100010100010100。。。其中每个8位对应于0x00或0x01。该向量在下文中标识为“比较”。我需要折叠这个256位向量来生成一个32位的汉明字符串。数组“普查”是我存储8位比较的地方。请注意,在这一点上,我并不关心汉明距离,我只关心尽快生成字符串。我有AVX2可用。我当前的代码: uint8_t* census = (uint8_t*) _mm_malloc(sizeof(int)*8,32);

我正在对图像执行普查变换,每像素进行32次比较。我可以有效地生成一个256位的向量0x0100010100010100。。。其中每个8位对应于0x00或0x01。该向量在下文中标识为“比较”。我需要折叠这个256位向量来生成一个32位的汉明字符串。数组“普查”是我存储8位比较的地方。请注意,在这一点上,我并不关心汉明距离,我只关心尽快生成字符串。我有AVX2可用。我当前的代码:

uint8_t* census = (uint8_t*) _mm_malloc(sizeof(int)*8,32);

...

_mm256_storeu_si256((__m256i*) census, comparisons);

uint32_t hammingString = (uint32_t) (census[0] +
                                    (census[1] << 1)   +
                                    (census[2] << 2)   +
                                    ...
                                    (census[31] << 31));
uint8_t*普查=(uint8_t*)\u mm_malloc(sizeof(int)*8,32);
...
_mm256(m256i*)普查、比较;
uint32_t hammingString=(uint32_t)(人口普查[0]+

(普查[1]这几乎就是它的目的,只是它取字节的最高位,而不是最低有效位。所以先向左移动7


或者,更改生成这些字节的方式,因为可能分别将它们设置为0x00或0xFF表示为false和true,对吗?至少,通常情况下,比较会导致这种情况。

这几乎就是原因所在,只是它取字节的顶部位,而不是最低有效位。所以先向左移动7


或者,改变生成这些字节的方式,因为可能分别将它们设置为0x00或0xFF,表示false和true,对吗?至少,通常比较会导致这种情况。

我一发布这篇文章,就走了一小段路,心想,“为什么这还不是一个固有的特性?”果然是这样。我一发布这篇文章,就走了一小段路,心想:“为什么这还不是一种内在的东西呢?”果然是这样。