通过


更新了最低硬件要求

.NET 11 的最低硬件要求已更新,要求在 x86/x64 和 Arm64 体系结构上使用更现代的指令集。 此外,ReadyToRun (R2R) 编译目标已更新,以利用较新的硬件功能。

ARM64

就 Apple 来说,最低硬件要求或 ReadyToRun 目标没有变化。 芯片Apple M1大致相当于armv8.5-a,因此至少为 AdvSimd (NEON)、CRC、、DOTPRODLSERCPCRCPC2RDMA指令集提供支持。

对于 Linux,对最低硬件没有更改。 .NET 继续支持 Raspberry Pi 等设备,这些设备可能仅提供对 AdvSimd 指令集的支持。 目标 ReadyToRun 已更新为包含 LSE 指令集,这可能会导致在启动应用程序时产生额外的即时编译开销。

对于 Windows,基线将更新为需要 LSE 指令集。 这是 Windows 11Windows 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。 这会更改硬件,从仅保证CMOVCX8SSESSE2到也保证CX16POPCNTSSE3SSSE3SSE4.1SSE4.2。 Windows 11 和 Windows 10 上正式支持的所有 x86/x64 CPU 都需要此保证。 它包含所有仍然得到英特尔/AMD 官方支持的芯片,最后一批较旧的芯片在2013年左右停止支持。

目标ReadyToRun已更新为x86-64-v3适用于 Windows 和 Linux,而 Apple 的目标保持不变,此外AVX还包括、AVX2BMI1BMI2F16CFMA、和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。

另请参阅