Hoe werkt x86-vertaling op Windows on Arm?

Veel Windows-applicaties zijn geschreven voor x86 en kunnen toch werken op Arm-CPU's. Hier ziet u hoe het mogelijk is.

Windows is er altijd voor gemaakt x86 CPU's van Intel en AMD, maar sinds Windows RT tien jaar geleden uitkwam voor smartphones, is het besturingssysteem langzaamaan vriendelijker geworden Bewapen CPU's. Tegenwoordig bieden zowel Windows 10 als Windows 11 volledige ondersteuning voor Arm-CPU's, maar er zit een addertje onder het gras. Hoewel het besturingssysteem zelf prima op deze CPU's draait, hebben de meeste applicaties nog geen Arm-compatibele versie gelanceerd. Hoewel Windows op Arm-chips kan draaien, zou het een probleem zijn om weinig programma's te hebben om daadwerkelijk te gebruiken.

Microsoft heeft echter een truc in petto: een emulator om x86-apps te laten draaien op Arm-gebaseerde machines. Het is het belangrijkste dat Windows on Arm zijn momentum heeft gegeven sinds de vertaler in 2017 uitkwam. Hier leest u hoe de emulator werkt en waarom Arm-pc's deze moeten gebruiken als ze software willen draaien die is gemaakt voor x86-chips.

Emuleert x86-code voor Arm-CPU's in realtime

Het idee om code die voor één soort processor is gemaakt te emuleren, zodat deze op een andere soort processor kan worden uitgevoerd, is niets nieuws. Dit is hoe game-emulatie werkt, die in de volksmond wordt gebruikt om oude videogames op nieuwe apparaten met enorm verschillende hardware te laten draaien. Wanneer u een x86-app op een Arm-pc uitvoert, neemt Windows blokken van de code van de app en compileert deze tot iets dat op een Arm-chip kan worden uitgevoerd. Dit gebeurt allemaal in realtime, en Windows moet alle vertaalde code in de cache opslaan, wat betekent dat het niet steeds opnieuw hoeft te vertalen.

Helaas zullen de prestaties bij geëmuleerde apps slechter zijn in vergelijking met de code die voor de hardware is ontworpen. Het is moeilijk te zeggen hoeveel prestatie je verliest door geëmuleerde code op Windows uit te voeren, omdat de testgegevens erg schaars zijn, maar ter vergelijking: Apple's Rosetta 2-vertaler (wat ook x86-apps in Arm vertaalt) verliest ongeveer 20%. Het is mogelijk om dat aantal terug te brengen, maar meestal resulteren emulatie en vertaling in een prestatieverlies, wat er ook gebeurt.

Waarom x86-applicaties niet op Arm kunnen draaien zonder emulatie

Je vraagt ​​je misschien af ​​waarom software specifiek moet worden geschreven voor x86, Arm en andere soorten CPU's. Het komt neer op de verschil in architectuur, en in dit geval hebben we het over de instructiesetarchitectuur (ISA). Ze vormen het meest fundamentele ontwerp van een processor en bepalen of iets eenvoudigs als vermenigvuldigen of iets complexs als AVX native kan worden gedaan. Het wijzigen van de ISA heeft invloed op de meest fundamentele manier waarop software met hardware interageert, tot aan de basiseenheden en nullen die de CPU leest.

x86 is de ISA van Intel- en AMD-CPU's, die historisch gezien de enige CPU's waren waarop Windows zelfs maar kon draaien. Arm wordt intussen vooral gebruikt voor smartphones, en de overlap tussen pc-software en telefoonsoftware is zeer klein. Uiteraard zijn de meeste programma's gemaakt voor x86 of Arm, en voor Windows on Arm was dit een enorm probleem vertaling kwam niet uit in 2020, terwijl Windows RT (de eerste versie van Windows die Arm ondersteunde) uitkwam in 2012.

Het is ongeveer tien jaar geleden dat Windows Arm begon te ondersteunen, dus waar zijn alle native apps? Het voornaamste probleem is dat het tijd en expertise kost om software te herschrijven voor een andere ISA, vooral als ontwikkelaars het goed willen doen. Ontwikkelaars die niet de juiste zorg besteden aan het overzetten van een app van de ene ISA naar de andere, kunnen tot storingen en bugs leiden. Een goed voorbeeld hiervan is Photoshop voor Windows on Arm. Het draait native op Windows on Arm, tot nu toe in onze recensie van de Lenovo Thinkpad X13s, kwamen we verschillende fouten en veel waarschuwingen tegen dat OpenCL en OpenGL niet werden ondersteund. Gecombineerd met een veel kleinere gebruikersbasis die Arm op Windows gebruikt, is er voor ontwikkelaars minder reden om zich er druk over te maken.

Dus als ontwikkelaars de middelen niet kunnen of willen besteden aan het maken van native software, is emulatie het alternatief. Hoewel het vertalen van x86-apps voor Windows on Arm niet perfect is, is het indrukwekkend dat het überhaupt werkt, en soms is prestatieverlies de moeite waard om te weten dat de app zal werken zoals verwacht. In ieder geval totdat Windows on Arm het punt bereikt waarop ontwikkelaars het niet langer kunnen negeren, geven vertaling en emulatie het een broodnodige boost aan zijn hardware-software-ecosysteem.