自从我开始组装电脑以来,这让我很困惑。游戏和应用程序都是以二进制可执行文件的形式给出的,但是我如何才能充分利用我的CPU的高级指令集。Intel和AMD CPU之间肯定有区别,但在下载页面上他们只关心你的操作系统。操作系统是否为所有规范提供抽象层?
自从我开始组装电脑以来,这让我很困惑。游戏和应用程序都是以二进制可执行文件的形式给出的,但是我如何才能充分利用我的CPU的高级指令集。Intel和AMD CPU之间肯定有区别,但在下载页面上他们只关心你的操作系统。操作系统是否为所有规范提供抽象层?
数量很少。所有 64 位 Intel CPU 本质上都使用“AMD64”指令集,AMD64 和 Intel 的 EM64T 之间只有细微差别。
(当然,实际的底层架构完全不同,但微代码从外部视图中隐藏了所有这些。操作系统唯一看到的是 x86 或 AMD64 指令。)
虽然较新的 CPU 通常比较旧的 CPU 支持更多的指令,即使在相同的基础架构中也是如此,但这种差异通常只对特定情况才真正重要,因此可以构建软件来自动使用最佳变体。(例如,TLS库会自动检测系统是否支持AES指令)
AMD64本身实际上是基于Intel自己的32位“x86”指令集构建的,并且仍然属于“Intel架构”作为通用术语。(AMD 早在 Am486 就开始制造与 Intel 兼容的 CPU。)
Intel确实尝试创建全新的64位架构Itanium(IA64),但失败了。
其他不兼容的架构确实存在,其中 Arm64 是最突出的一种,是的,缺乏这些架构的二进制可执行文件通常是一个问题。
一般来说,他们不会。
但在某些特定情况下,它们会这样做-例如,Apple 的 macOS 在 Intel CPU 上运行时会自动翻译旧的 PowerPC 二进制文件,而现在在 Apple Silicon(即 Arm64)上运行时会自动翻译 Intel 二进制文件。
同样,Windows过去在Alpha上提供x86模拟,现在在Arm64上提供x86和Arm32模拟。
Linux 默认情况下不会模拟任何东西,特别是大多数软件都可以重新编译(发行版通常为相当多的体系结构构建软件包),但它确实有可用于各种体系结构的“qemu-user”。
最后,默认情况下,在“字节码”平台(例如 .NET 或 Java)上构建的程序或多或少是跨体系结构的。