繁体   English   中英

由32个8位比较得出的32位汉明字符串

[英]32-bit Hamming String formation from 32 8-bit comparisons

我正在对图像进行普查转换,每个像素进行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));

几乎是_mm256_movemask_epi8的用途,除了它使用字节的最高位而不是最低有效位。 所以先左移7。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM