最新的处理器不支持 SSSE3 指令? [关闭]

2024-02-13

是否有任何不支持 SSSE3 指令的仍然相关的 CPU(Intel/AMD/Atom)?

没有 SSSE3 的最新 CPU 是什么?


没有 SSSE3 的最新 CPU 基于AMD K10 微架构 https://en.wikipedia.org/wiki/AMD_10h:

  • AMD 羿龙 II https://en.wikipedia.org/wiki/Phenom_II,Bulldozer 系列之前的最后一代 K10 插座桌面 CPU。他们是2008年至2012年生产.
  • AMD Llano APU https://en.wikipedia.org/wiki/AMD_Accelerated_Processing_Unit#K10_architecture_(2011):_Llano,2011 年 6 月推出。 (基于推土机的 APU 于 2012 年 10 月推出,IDK 是在最后一批 Llano APU 制造/销售时)。同样基于 K10 内核,但报告 CPUID“系列”= 12h。

K10 CPU 支持 SSE3(FP 指令,例如movddup and haddps)和仅限 AMD 的 SSE4a。一些早期的K8核心只有SSE2,但后来的K8也有SSE3。

请注意,AMD CPU 列于https://en.wikipedia.org/wiki/SSSE3#CPUs_with_SSSE3 https://en.wikipedia.org/wiki/SSSE3#CPUs_with_SSSE3仅从 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. See 在 x86 上进行水平浮点向量和的最快方法 https://stackoverflow.com/questions/6996764/fastest-way-to-do-horizontal-float-vector-sum-on-x86/35270026#35270026.)

我认为即使是第一代 Atom 也有 SSSE3。https://en.wikipedia.org/wiki/Intel_Atom https://en.wikipedia.org/wiki/Intel_Atom.

有像这样的CPUAMD Geode https://en.wikipedia.org/wiki/Geode_(processor)根本没有 SSE,但我认为问题的关键在于CPUdo有 SSE2/3 但没有 SSSE3。


没有任何新的主流 CPU 不具备 SSE4.2,但一些 Phenom II CPU 甚至在 2018 年可能仍在使用。它们越旧,新软件就越可能无法在它们上运行。

There are unfortunately still brand-new mainstream CPUs being made without AVX and BMI: Intel's Pentium and Celeron models, even for Skylake / Kaby Lake. Presumably when a die has defects in the upper 128-bits of its vector ALUs, e.g. the large FMA units, they fuse it off and disable decoding of VEX prefixes, and label it as a Pentium or Celeron1. (This is presumably why Pentium/Celeron models don't support BMI1/BMI2 either; other than pext/pdep those take trivial die area.)

因此,在未来的某个时刻,我们不会更接近 BMI1/BMI2 的基线,这确实很不幸,因为它是英特尔 CPU 上的单微指令变量计数移位所必需的。 (shl cl,reg是 3 uop,因为 cl=0 no-flag-update 情况是可能的; SHLX / SHRX 为 1 uop)。 BMI1/2 在整个代码中使用时最有用,而不仅仅是在几个函数中。


脚注1:当然,一些完全工作的芯片也得到了这种待遇,特别是一旦新工艺的产量提高了,但对于一致性/市场细分,它们仍然受到削弱。

But I think rep movs/rep stosERMSB 仍可使用 256 位加载/存储,因此 FP 寄存器文件、加载/存储单元和旁路转发网络仍需要支持全宽度。 (与矢量循环相比,ERMSB 变得更具吸引力,因为它可以使用两倍的宽度。

我想知道是否有办法用保险丝重新连接 CPU,以便它可以使用正在工作的 FMA 单元的 4 个 128 位通道中的任意 2 个。我们知道 Skylake-AVX512 可以混合和匹配端口 0、1 和 5 的 FMA 单元,仅为 512 位向量启动 p5 FMA(如果可用),并将 p0 和 p1 上的 256 位 FMA 单元组合为一个512 位 FMA 单元。静态地对熔丝进行类似的操作可能会让英特尔使用存在缺陷的芯片,该缺陷会影响一个 FMA 单元的两个通道。

无论如何,这纯粹是猜测。有可能,但不知道我们是否有任何可靠的消息来源表明英特尔实际上曾经这样做过作为销售具有 FMA 缺陷的芯片的一种方式。我们确实知道,整个物理核心存在缺陷的芯片会作为较低核心数的 SKU 出售,就像四核芯片上的双核芯片一样。四核 i5 CPU 只有 6MB 的 L3 缓存而不是 8MB,这意味着它们禁用了 4 个 L3 缓存片之一,这可能也是为了挽救缺陷。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

最新的处理器不支持 SSSE3 指令? [关闭] 的相关文章

  • x86 平台中的 KVM 影子页表处理

    据我了解 在没有硬件支持来宾虚拟到主机物理地址转换的处理器上 KVM 使用影子页表 当来宾操作系统修改其页表时 会构建和更新影子页表 硬件中有没有专门的指令 以x86为参考 来修改页表 除非有特殊说明 否则不会对VMM 造成陷阱 Linux
  • 如何使用 Neon SIMD 将无符号字符转换为有符号整数

    如何转换变量的数据类型uint8 t to int32 t使用霓虹灯 我找不到执行此操作的任何内在因素 假设您想要将 16 x 8 位整数的向量转换为 4 个 4 x 32 位整数的向量 您可以通过首先解压缩为 16 位 然后再次解压缩为
  • 排列 SSE __m128i 寄存器内的字节

    我有以下问题 In m128i寄存器有 16 个 8bit 值 顺序如下 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16 我想要实现的是有效地洗牌字节以获得此排序 1 2 3 4 5 6 7 8 9 10 11
  • Visual Studio 2017 上的简单装配程序

    386 model flat c stack 100h printf PROTO arg1 Ptr Byte data msg1 byte Hello World 0Ah 0 code main proc INVOKE printf ADD
  • 利用 SSE 和其他 CPU 扩展

    在我的代码库中有几个地方 对于大型数据集 相同的操作会重复很多次 在某些情况下 处理这些需要花费相当长的时间 我相信使用SSE来实现这些循环应该可以显着提高它们的性能 特别是在对同一组数据执行许多操作的情况下 因此一旦数据最初被读入缓存 就
  • 近调用/跳转表并不总是在引导加载程序中工作

    一般问题 我一直在开发一个简单的引导加载程序 并在某些环境中偶然发现了一个问题 在这些环境中 此类指令不起作用 mov si call tbl SI Call table pointer call call tbl Call print c
  • 什么是 __ext_vector_type__ 和 simd?

    我正在使用 Apple Metal API 以及所谓的simd图书馆 标题中有这样的代码 typedef attribute ext vector type 3 float vector float3 我很好奇它实际上做了什么以及为什么编译
  • Intel 64 和 IA-32 上的 MESI 有何意义

    MESI 的要点是保留共享内存系统的概念 然而 对于存储缓冲区 事情就变得复杂了 一旦数据到达 MESI 实现的缓存 下游内存就会保持一致 然而 在此之前 每个核心可能对内存位置 X 中的内容存在分歧 具体取决于每个核心的本地存储缓冲区中的
  • 大会,你好世界问题

    我正在 Linux 上学习 asm noobuntu 10 04 我得到了以下代码 http asm sourceforge net intro hello html http asm sourceforge net intro hello
  • 程序集比较标志理解

    我正在努力理解汇编程序中的以下代码片段 if EAX gt 5 EBX 1 else EBX 2 在汇编程序中 可以写如下 根据我的书 模拟jge操作说明 https www felixcloutier com x86 jcc您通常会使用
  • 什么是“矢量化”?

    现在好几次了 我在 matlab fortran 其他一些 中遇到这个术语 但我从来没有找到解释它是什么意思 它有什么作用 所以我在这里问 什么是矢量化 例如 循环矢量化 是什么意思 许多CPU具有 向量 或 SIMD 指令集 它们同时对两
  • X86 预取优化:“计算 goto”线程代码

    我有一个相当重要的问题 我的计算图有循环和多个 计算路径 我没有制作一个调度程序循环 其中每个顶点将被一一调用 而是将所有预先分配的 框架对象 放置在堆中 代码 数据 这有点类似于线程代码 甚至更好 CPS 只是在堆中跳转 执行代码 每个代
  • 如何在程序中将自己缝合到自己的尾部,无限循环地封装 64KB 代码段?

    如果指令的顺序执行经过偏移量 65535 则8086将从同一代码段中的偏移量 0 处获取下一个指令字节 接下来的 COM 程序利用这一事实 不断将其整个代码 总共 32 个字节 缝合到自己的尾部 环绕在 64KB 代码段中 你可以称之为二元
  • 在 x86 程序集中存储大量布尔值的最佳方法是什么?

    最近我一直在处理充满布尔值的大型数组 目前 我将它们存储在 bss部分有一个 space指令 它允许我创建字节数组 但是 由于我只需要存储布尔值 因此我希望从数组中逐位读取和写入数据 目前 我能想到的最好方法是有一个 space指令所需存储
  • gdb查找行号的内存地址

    假设我已将 gdb 附加到一个进程 并且在其内存布局中有一个文件和行号 我想要其内存地址 如何获取文件x中第n行的内存地址 这是在 Linux x86 上 gdb info line test c 56 Line 56 of test c
  • SIMD 和 VLIW 指令是一样的吗?

    SIMD 单指令多数据 和 VLIW 超长指令字 到底有什么区别 其中一个是另一个的子集吗 或者它们是两个完全不同的东西 完全不相关且正交 一台机器可以有一个或两个 或者两者都没有 SIMD 指令可以作为扩展添加到 VLIW ISA 但 V
  • 为什么X86中没有NAND、NOR和XNOR指令?

    它们是您可以在计算机上执行的最简单的 指令 之一 它们是我亲自实施的第一个指令 执行 NOT AND x y 会使执行时间和依赖链长度和代码大小加倍 BMI1 引入了 andnot 这是一个有意义的补充 是一个独特的操作 为什么不是这个问题
  • 何时可以重用avx指令中的源寄存器

    在 avx 指令中用作源的寄存器何时可以在指令开始处理后重用 例如 我想使用vgatherdps该指令消耗两个 ymm 寄存器 其中之一是位移索引 我意识到vgatherdps由于数据的局部性较差 因此需要花费大量时间来收集 位移索引寄存器
  • 整数溢出问题

    我不断遇到整数溢出问题 我不知道如何解决它 有人可以帮忙吗 edx 包含 181 eax 包含 174 xor eax edx mov edx 2 div edx 假设你谈论的是x86 div edx这实际上没有意义 32位div将edx
  • 英特尔的最后分支记录功能是英特尔处理器独有的吗?

    最后分支记录是指存储与最近执行的分支相关的源地址和目标地址的寄存器对 MSR 的集合 它们受英特尔酷睿 2 英特尔至强和英特尔凌动处理器系列的支持 http css csail mit edu 6 858 2012 readings ia3

随机推荐