_mm_cmpistrm SSE4.2 固有模式

Posted

技术标签:

【中文标题】_mm_cmpistrm SSE4.2 固有模式【英文标题】:Mode for _mm_cmpistrm SSE4.2 intrinsic 【发布时间】:2011-06-11 11:43:17 【问题描述】:

我试图弄清楚如何为 _mm_cmpistrm SSE4.2 内在函数设置“模式”标志。我有一个常规的 C 字符串 (char*),我正在使用 _mm_lddqu_si128 将其加载到 __m128i 类型中。我打算将无符号字节与常规字符串比较一起使用:

    _SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_EACH

但我对设置单位与位掩码的内容感到困惑。以下是 GCC 4.3.2 中 smmintrin.h 的宏:

    /* These macros specify the output selection in _mm_cmpXstrm ().  */
    #define _SIDD_BIT_MASK          0x00
    #define _SIDD_UNIT_MASK         0x40

我想我理解位掩码是什么:如果该位置的字符在两个字符串之间不同,我将在位 0..15 中得到 1。但是单位掩码有什么作用呢?

【问题讨论】:

【参考方案1】:

对于 _SIDD_BIT_MASK 你会得到一个掩码,如果字符串相等则全为 1,如果不相等则全为 0;如果您正在执行 _SIDD_UBYTE_OPS,那么您将获得 16 个 bits 返回(字符串中的每个字符一个)。

但是,使用 _SIDD_UNIT_MASK,您将获得相同的掩码,但会增加到 16 个 字节。例如,如果字符串中前两个字符的比较为真,则位 0..15 将全部为 1。以及字符 2 等的位 16..31。

【讨论】:

这是有道理的。感谢您的澄清!顺便说一句,您知道内部函数的良好参考或一组文档吗? MSDN 每次都为我工作 :-)

以上是关于_mm_cmpistrm SSE4.2 固有模式的主要内容,如果未能解决你的问题,请参考以下文章

ClickHouse 安装

ClickHouse 高可用集群安装测试

SSE4 1和SSE4 2 Intrinsics各函数介绍

定时器之基于模模式的间隔定时

win7上安装 clickhouse可以吗?

not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA