SSE 4.2对两个 16个字节的操作数进行一次比较。但也可以将 8字节一次的两个操作数与普通处理器指令进行比较。
差异不是那么大,要有这种比较的特殊硬性实现。 SSE 4.2是如此不相关,还是我错过了什么?
答案 0 :(得分:2)
x64处理器只保证有SSE2,你需要使用CPUID来检查SSE 4.2支持(通过CPUID.01H:ECX.SSE42[Bit 20] flag
),但是,SSE 2支持16 byte 比较,通过_mm_cmpeq_epi8
。
答案 1 :(得分:1)
我不确定标准寄存器比较指令与其更宽的SSE等价物相比如何执行(标准比较指令可能需要更多周期),但吞吐量提高2倍并不是什么摇一摇。
我认为你问“为什么即使你有SSE 4.2,如果你得到的只是2次比较,而不是1?”我认为你忽视了一些事情:
正如我之前提到的,操作宽度的两倍是很好的。如果您正在开发一个可以进行大量比较的应用程序,那么您可能很高兴它就在那里。
将此指令添加到已存在的SSE执行单元的增量成本可能相对较小。已经有很多硬件可以执行已经为早期SSE指令集定义的各种操作。
如今,似乎要添加的说明要么更广泛 旧功能的版本(例如许多AVX指令)或 对某些特定应用程序很重要的操作(例如 CRC / AES指令,4元素点积。有可能 有一些应用程序从这种比较中受益匪浅 指导和添加它的成本值得营销利益 通过加快这些类型的代码来实现。
答案 2 :(得分:1)
虽然除了4.2之外的所有SSE都添加了“通常有用”的指令,但新的字符串操作非常普遍,以至于它们在字符串处理之外也有潜在的用途。我不知道任何实际上有帮助的情况,因为它们很慢。
答案 3 :(得分:0)
SSE4.2指令比较两个压缩操作数。因此,您不是在比较两个字节或字,而是在16个字节和另外16个字节之间进行非常复杂的比较。 (或8个单词和8个其他单词。)(在每种情况下“最多X”......)
SSE4.2指令通常比正常比较慢,因为它们几乎总是被微编码。但是,假设每个SSE4.2指令通过最多256个比较(在字节情况下)开始,然后计算一堆更有用的输出,通常可以节省算法性能,除非您的搜索模式无法跳过几个每次迭代的字符。