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