来自 32 个 8 位比较的 32 位汉明字符串形成
32-bit Hamming String formation from 32 8-bit comparisons
我正在对图像进行人口普查转换,每像素进行 32 次比较。我可以有效地生成一个 256 位的 0x0100010100010100 向量......其中每个 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));
这几乎正是_mm256_movemask_epi8的用途,除了它采用字节的顶部位而不是最低有效位。因此,只需先向左移动 7。
或者,改变你生成这些字节的方式,因为你可能把它们分别设置为假和真0x00或0xFF,对吧?至少,通常比较会导致这种事情。
相关文章:
- 为什么字符串比较的 == 运算符相对于任一字符串长度线性时间(似乎)?
- 字符串比较中的意外输出
- 如何执行不区分大小写的字符串比较?
- 使用 getline(cin, var) 两次在进行字符串比较时会产生错误 (==)
- <<运算符优先级与字符串比较
- ">"运算符和"<"运算符如何进行字符串比较?
- Qt C++11 字符串通过子字符串比较列出交集
- std::out_of_range字符串比较中的异常
- 我正在尝试从输入文件中读取,然后使用它们的子字符串比较字符串的特定部分
- 字符* 与uint8_t的字符串比较
- 用字符串 c++ 比较对向量的元素
- 使用循环进行词典字符串比较
- 如何为C++映射创建自己的字符串比较对象
- 不带比较()的字符串比较
- 与 IF 语句C++的字符串比较?
- 字符串比较在与变量一起使用时给出不同的输出
- 更快的字符串比较排序,用于唯一()
- C 字符串比较“祝您好运”&gt;“再见”
- C 奇怪的行为和字符串比较
- 子字符串与 std::memcmp 或字符串::比较的比较