是否有任何仍然相关的CPU(Intel / AMD / Atom)不支持SSSE3指令?
没有SSSE3的最新CPU是什么?
没有SSSE3的最新CPU基于AMD K10 microarchitecture:
K10 CPU支持SSE3(像movddup
和haddps
这样的FP指令)和仅支持AMD的SSE4a。一些早期的K8核心只有SSE2,但后来K8也有SSE3。
请注意,https://en.wikipedia.org/wiki/SSSE3#CPUs_with_SSSE3中列出的AMD CPU仅从Bulldozer开始,但确实包含AMD的低功耗Bobcat / Jaguar CPU。
如果你谷歌AMD Phenom II ssse3
,你会发现一些关于删除SSSE3要求的游戏的页面,以便他们可以使用Phenom II。
在Intel上你必须回到Pentium M / Core,因为SSSE3是在Core 2中引入的。(第一代core2(Conroe / Merom)只有64位宽的shuffle执行单元,所以pshufb
相对较慢。但是SSE2 pshufd
也是如此。请参阅Fastest way to do horizontal float vector sum on x86。)
我认为即使是第一代Atom也有SSSE3。 https://en.wikipedia.org/wiki/Intel_Atom。
像AMD Geode这样的CPU完全没有SSE,但我认为问题的关键在于CPU有SSE2 / 3而不是SSSE3。
没有新的主流CPU没有SSE4.2,但有些Phenom II CPU甚至可能在2018年仍在使用。它们越老,预计新软件可能无法使用它们。
不幸的是,仍有全新的主流CPU没有AVX和BMI:Intel的Pentium和Celeron型号,甚至是Skylake / Kaby Lake。据推测,当管芯在其矢量ALU的高128位中存在缺陷时,例如,大型FMA单元,它们将其熔断并禁用VEX前缀的解码,并将其标记为Pentium或Celeron1。 (这可能是为什么Pentium / Celeron模型也不支持BMI1 / BMI2;除了pext
/ pdep
之外,那些需要琐碎的裸片区域。)
所以我们在未来的某个时刻没有接近BMI1 / BMI2作为基线,这实在令人遗憾,因为它需要Intel CPU上的单uop可变计数转换。 (shl cl,reg
是3 uops,因为cl = 0 no-flag-update情况是可能的; SHLX / SHRX是1 uop)。 BMI1 / 2在整个代码中使用时非常有用,而不仅仅是在几个函数中使用。
脚注1:当然,一些完全工作的芯片也会得到这种处理,特别是一旦新工艺的产量提高,但为了保持一致性/市场细分,它们仍然是残缺的。
但我认为rep movs/rep stos
ERMSB仍然可以使用256位加载/存储,因此FP寄存器文件,加载/存储单元和旁路转发网络都需要支持全宽。 (而ERMSB对矢量循环变得更具吸引力,因为它可以使用两倍的宽度。
我想知道是否有一种方法可以让CPU重新连接保险丝,这样它就可以使用正在工作的4个128位FMA单元中的任意2个。我们知道Skylake-AVX512可以将FMA单元与端口0,1和5进行混合和匹配,仅为p5 FMA(如果可用)为512位向量供电,并将p0和p1上的256位FMA单元组合为一个512位FMA单元。静态地使用保险丝做类似的事情可能会让英特尔使用的芯片有一个缺陷影响到一个FMA单元的两个通道。
无论如何,这是纯粹的猜测。这很可能,但不知道我们是否有任何可靠的消息来源,英特尔实际上这样做是为了销售具有FMA缺陷的芯片。我们知道,整个物理核心中存在缺陷的芯片可以作为较低核心数的SKU出售,就像四核芯片的双核芯片一样。而四核i5 CPU只有6MB的L3缓存而不是8MB,这意味着它们的4个L3缓存中的一个被禁用,这可能也是为了挽救缺陷。