C++ 从32个8位比较生成32位汉明字符串
我正在对图像执行普查变换,每像素进行32次比较。我可以有效地生成一个256位的向量0x0100010100010100。。。其中每个8位对应于0x00或0x01。该向量在下文中标识为“比较”。我需要折叠这个256位向量来生成一个32位的汉明字符串。数组“普查”是我存储8位比较的地方。请注意,在这一点上,我并不关心汉明距离,我只关心尽快生成字符串。我有AVX2可用。我当前的代码: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);
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,对吗?至少,通常比较会导致这种情况。我一发布这篇文章,就走了一小段路,心想,“为什么这还不是一个固有的特性?”果然是这样。我一发布这篇文章,就走了一小段路,心想:“为什么这还不是一种内在的东西呢?”果然是这样。