.NET 11 的最低硬件要求已更新,要求在 x86/x64 和 Arm64 体系结构上使用更现代的指令集。 此外,ReadyToRun (R2R) 编译目标已更新,以利用较新的硬件功能。
ARM64
就 Apple 来说,最低硬件要求或 ReadyToRun 目标没有变化。 芯片Apple M1大致相当于armv8.5-a,因此至少为 AdvSimd (NEON)、CRC、、DOTPROD、LSERCPC、 RCPC2和RDMA指令集提供支持。
对于 Linux,对最低硬件没有更改。 .NET 继续支持 Raspberry Pi 等设备,这些设备可能仅提供对 AdvSimd 指令集的支持。 目标 ReadyToRun 已更新为包含 LSE 指令集,这可能会导致在启动应用程序时产生额外的即时编译开销。
对于 Windows,基线将更新为需要 LSE 指令集。
这是 Windows 11 和 Windows 10 正式支持的所有 Arm64 CPU 所必需的。 此外,它还符合 Arm SBSA (服务器基础系统体系结构)要求。 目标ReadyToRun已更新为armv8.2-a + RCPC,这至少提供了对AdvSimdCRCLSERCPCRDMA的支持,涵盖了大多数正式支持的硬件。
| 操作系统 | 以前的 JIT/AOT 最小值 | 新的 JIT/AOT 最小值 | 以前的 R2R 目标 | 新的 R2R 目标 |
|---|---|---|---|---|
| 苹果 | Apple M1 | (无变化) | Apple M1 | (无变化) |
| Linux | armv8.0-a | (无变化) | armv8.0-a | armv8.0-a + LSE |
| Windows操作系统 | armv8.0-a | armv8.0-a + LSE | armv8.0-a | armv8.2-a + RCPC |
x86/x64
对于所有三个操作系统(Apple、Linux 和 Windows),将基线从 x86-64-v1 更新为 x86-64-v2。 这会更改硬件,从仅保证CMOV、CX8、SSE、SSE2到也保证CX16、POPCNT、SSE3、SSSE3、SSE4.1和SSE4.2。 Windows 11 和 Windows 10 上正式支持的所有 x86/x64 CPU 都需要此保证。 它包含所有仍然得到英特尔/AMD 官方支持的芯片,最后一批较旧的芯片在2013年左右停止支持。
目标ReadyToRun已更新为x86-64-v3适用于 Windows 和 Linux,而 Apple 的目标保持不变,此外AVX还包括、AVX2、BMI1BMI2、F16C、FMA、和LZCNTMOVBE指令集。
| 操作系统 | 以前的 JIT/AOT 最小值 | 新的 JIT/AOT 最小值 | 以前的 R2R 目标 | 新的 R2R 目标 |
|---|---|---|---|---|
| 苹果 | x86-64-v1 | x86-64-v2 | x86-64-v2 | (无变化) |
| Linux | x86-64-v1 | x86-64-v2 | x86-64-v2 | x86-64-v3 |
| Windows操作系统 | x86-64-v1 | x86-64-v2 | x86-64-v2 | x86-64-v3 |
已引入的版本
.NET 11 预览版 1
以前的行为
默认情况下,.NET 已成功启动并在较旧的硬件上运行。 单个应用程序可能已选择加入更高的基线或显式使用硬件内部函数,从而提高其方案的基线。
新行为
从 .NET 11 开始,.NET 无法在较旧的硬件上运行,并且可能会输出如下所示的消息。 (在某些情况下,可能会提供更具描述性的消息,其中列出了给定作系统和体系结构的具体硬件要求。
当前 CPU 缺少一个或多个基线指令集。
对于 ReadyToRun兼容的程序集,在某些受支持的硬件上,可能会出现额外的启动开销,因为这些硬件没有达到典型设备的预期支持要求。
破坏性变更的类型
此更改为行为更改。
更改原因
.NET 支持广泛的硬件,通常超过基础作系统(OS)提出的最低硬件要求。 .NET 还提供内置支持,可以在 JIT 方案中利用其当前运行的硬件。 但是,此支持为代码库增加了重要的复杂性,尤其是对于不太可能仍在使用的较旧硬件而言。 此外,它定义了 AOT 目标必须默认为的“最低通用分母”,在某些特定于域的方案中,可能会导致应用程序的性能降低。
对最低基线的更新是为了降低基本代码库的维护复杂性,并更好地符合基础 OS 的记录(通常强制实施)硬件要求。
建议的措施
如果使用的是不再支持的硬件,请考虑更新。 此类硬件正式不受支持,可能无法在 .NET 支持的作系统版本上启动。
受影响的 API
此更改会影响所有 .NET。