我正在对每个像素执行32次比较的图像执行人口普查变换.我可以有效地生成一个0x0100010100010100的256位向量...其中每个8位对应于0x00或0x01.该载体在下面标识为"比较".我需要折叠这个256位向量来生成一个32位的汉明字符串.数组'census'是我存储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));
Run Code Online (Sandbox Code Playgroud)