AMD 近乎古老的 3DNow! 指令已逐渐淡出人们的视线。开源编译器 LLVM最终取消了对自 2011 年以来 AMD CPU 不再支持的指令集的支持。
3DNow! 指令集于 1998 年推出,旨在与英特尔的 MMX 竞争。它在 AMD 的基础 x86 指令集中添加了单指令、多数据 (SIMD) 指令,帮助 CPU 使用矢量寄存器对浮点运算进行矢量处理。
AMD于 2011 年用更新的 SSE 等效产品取代了 3DNow!,并从 K10 Bulldozer CPU 开始停止包含该功能标志位。不过,由于 CPU 仍在使用相当长一段时间,编译器确实花了一些时间才开始放弃对该指令集的支持。
2021 年,Linux 从其内核中淘汰了该指令集,但 LLVM 在其他所有人都放弃它之后仍然长期保持支持。LLVM 编译器背后的开发人员还致力于从该工具中删除 MMX 类型和指令。
LLVM 19 的提交预计将于九月或十月发布,证实了即将被删除。
“这组指令仅受 K6-2(1998 年推出)及“Bulldozer”系列(2011 年)之前的 AMD 芯片支持。它们从未被广泛使用,因为它们实际上已被更广泛实施的 SSE(2001 年首次在 AMD 的 Athlon XP 中实施)所取代。
这是为了全面移除 MMX 寄存器的使用而采取的措施。由于 3DNow! 内部函数几乎没有用处,而且现代硬件甚至都没有实现它们,因此简单的移除似乎是最佳选择。”
AMD 3DNow! 指令在 20 世纪 90 年代末和 21 世纪初非常流行,用于改进游戏、视频播放和 Adobe Photoshop 工作流程。随后,英特尔发布了 SSE 指令,该指令在整体上占据了主导地位。当英特尔发布 SSE2 时,AMD 采用了它并放弃了其较旧的 SIMD 指令集。
需要为旧 AMD 处理器编写代码的开发人员仍可使用汇编语言中的 3DNow! 指令,包括使用 LLVM 的内联汇编代码。除此之外,与 3DNow! 相关的所有内容都应视为已弃用且不再使用。
其实早在2010年,就有相关报道表示,AMD 告别 3DNow! 指令集。
3DNow! 于 1998 年推出,是 AMD 为满足当时 K6-2 芯片日益增长的多媒体需求而推出的。但到了2010年左右,AMD 宣布该指令集将被弃用。
AMD 在 K6-2 时代就引入了 3DNow! ?指令集来执行单指令多数据 (SIMD) 指令,也称为矢量化指令。这些指令主要用于图形密集型应用程序甚至音频处理。从那时起,我们在处理器中添加了许多 SIMD 指令集,例如广泛使用的流式 SIMD 扩展 (SSE) 指令集及其后续版本。
3DNow! 指令已被弃用,某些即将推出的 AMD 处理器将不再支持这些指令。在这些处理器中,不会设置3DNow! 指令功能标志位。这由 CPUID 函数 8000_0001h 的 EDX 位 31 指示。现在是时候提醒开发人员在使用功能之前检查运行时支持的功能有多么重要了。我们一直建议在运行时检查此功能,这是最佳实践,但现在,如果程序尝试执行此指令而不先检查该功能是否受支持,则检查此功能非常重要,有助于防止程序失败。在开发 3DNow! 指令的同时,程序员习惯于使用“尝试并捕获”模型来检查处理器是否支持指令或指令集。这是当应用程序“尝试”执行指令以查看它是否可用时。如果应用程序从处理器收到未定义异常 (#UD),则它认为指令集不可用。这些类型的应用程序在较新的虚拟机下可能运行得不太好。不过这是另一篇博客的主题。
尽管 3DNow! 在当时具有革命性,但它并不十分流行,并且已被无数次迭代的 SSE 指令集所取代。然而,对于使用它的任何开发人员以及管理使用它的虚拟化环境的人来说,这则消息非常重要。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。