Dela via


Lägsta maskinvarukrav har uppdaterats

Minimikraven för maskinvara för .NET 11 har uppdaterats för att kräva modernare instruktionsuppsättningar för både x86/x64- och Arm64-arkitekturer. Dessutom har kompileringsmålen för ReadyToRun (R2R) uppdaterats för att dra nytta av nyare maskinvarufunktioner.

Arm64

För Apple sker ingen ändring av minimimaskinvaran ReadyToRun eller målet. Chipsen Apple M1 är ungefär likvärdiga armv8.5-a med och ger därför stöd för åtminstone AdvSimd (NEON), CRC, DOTPROD, LSE, RCPC, RCPC2och RDMA instruktionsuppsättningar.

För Linux sker ingen ändring av den minsta maskinvaran. .NET fortsätter att stödja enheter som Raspberry Pi som kanske endast stöder instruktionsuppsättningen AdvSimd . Målet ReadyToRun har uppdaterats för att inkludera instruktionsuppsättningen LSE, vilket kan leda till ytterligare jittingkostnader om du startar ett program.

För Windows uppdateras baslinjen för att kräva instruktionsuppsättningen LSE . Detta krävs av Windows 11 och av alla Arm64-processorer som officiellt stöds av Windows 10. Dessutom är den i linje med Arm SBSA (Server Base System Architecture) kraven. Målet ReadyToRun har uppdaterats till armv8.2-a + RCPC (detta ger stöd för minst AdvSimd, CRC, LSE, RCPC, och RDMA), vilket täcker majoriteten av maskinvaran som stöds officiellt.

OS Föregående JIT/AOT minimum Ny JIT/AOT minimum Föregående R2R-mål Nytt R2R-mål
Äpple Apple M1 (Ingen ändring) Apple M1 (Ingen ändring)
Linux armv8.0-a (Ingen ändring) armv8.0-a armv8.0-a + LSE
Windows armv8.0-a armv8.0-a + LSE armv8.0-a armv8.2-a + RCPC

x86/x64

För alla tre operativsystemen (Apple, Linux och Windows) uppdateras baslinjen från x86-64-v1 till x86-64-v2. Detta ändrar maskinvaran från att endast garantera CMOV, CX8, SSE och SSE2 till att även garantera CX16, POPCNT, SSE3, SSSE3, SSE4.1 och SSE4.2. Den här garantin krävs av Windows 11 och av alla x86/x64-processorer som stöds officiellt i Windows 10. Den innehåller alla chips som fortfarande stöds officiellt av Intel/AMD, där de sista äldre chipsen har gått ur support runt 2013.

Målet ReadyToRun har uppdaterats till x86-64-v3 för Windows och Linux, medan det förblir oförändrat för Apple, vilket dessutom innehåller instruktionsuppsättningarna AVX, AVX2, BMI1, BMI2, F16C, FMALZCNToch MOVBE .

OS Föregående minimum för JIT/AOT Ny JIT/AOT minimum Föregående R2R-mål Nytt R2R-mål
Äpple x86-64-v1 x86-64-v2 x86-64-v2 (Ingen ändring)
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

Version lanserad

.NET 11 Förhandsversion 1

Tidigare beteende

Som standard har .NET startats och körts på äldre maskinvara. Enskilda program kan ha valt högre baslinjer eller uttryckligen använt maskinvaruinbyggda objekt som höjde baslinjen för deras scenario.

Nytt beteende

Från och med .NET 11 kan .NET inte köras på äldre maskinvara och kan skriva ut ett meddelande som liknar följande. (I vissa scenarier kan ett mer beskrivande meddelande tillhandahållas som visar de konkreta maskinvarukraven för ett visst operativsystem och en viss arkitektur.)

Den aktuella processorn saknar en eller flera av baslinjeinstruktionsuppsättningarna.

För ReadyToRun-kompatibla sammansättningar kan det finnas ytterligare startkostnader för viss maskinvara som stöds och som inte uppfyller det förväntade stödet för en typisk enhet.

Typ av brytande ändring

Den här ändringen är en beteendeförändring.

Orsak till ändring

.NET har stöd för ett brett utbud av maskinvara, ofta utöver de minimikrav på maskinvara som det underliggande operativsystemet (OS) ställer. .NET har också inbyggt stöd för att dra nytta av den maskinvara som det aktivt körs på för JIT-scenarier. Det här stödet lägger dock till betydande komplexitet i kodbasen, särskilt för mycket äldre maskinvara som sannolikt inte fortfarande används. Dessutom definierar den en "minsta gemensamma nämnare" som AOT-mål måste vara standard för, vilket i vissa domänspecifika scenarier kan leda till lägre prestanda för program.

Uppdateringen av den minsta baslinjen gjordes för att minska underhållskomplexiteten för kodbasen och för att bättre anpassa till de dokumenterade (och ofta framtvingade) maskinvarukraven för det underliggande operativsystemet.

Om du använder maskinvara som inte längre stöds kan du överväga att uppdatera. Sådan maskinvara saknar officiellt stöd och kanske inte startar på operativsystemversioner som stöds av .NET.

Berörda API:er

Den här ändringen påverkar hela .NET.

Se även