การแปล x86 ทำงานบน Windows on Arm อย่างไร

แอปพลิเคชั่น Windows จำนวนมากเขียนขึ้นสำหรับ x86 แต่ยังสามารถทำงานกับ Arm CPU ได้ นี่คือวิธีที่เป็นไปได้

Windows ถูกสร้างมาเพื่อเสมอมา ซีพียู x86 จาก Intel และ AMDแต่นับตั้งแต่ Windows RT เปิดตัวสำหรับสมาร์ทโฟนเมื่อทศวรรษที่แล้ว ระบบปฏิบัติการก็เริ่มเป็นมิตรต่อมากขึ้นอย่างช้าๆ แขนซีพียู. ปัจจุบันทั้ง Windows 10 และ Windows 11 ให้การสนับสนุน Arm CPU อย่างสมบูรณ์ แต่ก็มีข้อดีอยู่ แม้ว่าระบบปฏิบัติการจะทำงานได้ดีบน CPU เหล่านี้ แต่แอปพลิเคชันส่วนใหญ่ยังไม่ได้เปิดตัวเวอร์ชันที่เข้ากันได้กับ Arm แม้ว่า Windows จะสามารถทำงานบนชิป Arm ได้ แต่การมีโปรแกรมไม่กี่โปรแกรมที่ใช้งานจริงอาจเป็นปัญหาได้

อย่างไรก็ตาม Microsoft มีเคล็ดลับ: โปรแกรมจำลองเพื่อให้แอป x86 ทำงานบนเครื่องที่ใช้ Arm. นี่เป็นสิ่งสำคัญที่ทำให้ Windows on Arm มีแรงผลักดันนับตั้งแต่นักแปลเปิดตัวในปี 2560 นี่คือวิธีการทำงานของโปรแกรมจำลอง และเหตุใด Arm PC จึงจำเป็นต้องใช้โปรแกรมจำลองนี้หากต้องการใช้งานซอฟต์แวร์ที่สร้างขึ้นสำหรับชิป x86

การจำลองโค้ด x86 สำหรับ Arm CPU แบบเรียลไทม์

แนวคิดในการเลียนแบบโค้ดที่สร้างขึ้นสำหรับโปรเซสเซอร์ประเภทหนึ่งเพื่อให้สามารถรันบนโปรเซสเซอร์อีกประเภทหนึ่งได้ไม่ใช่เรื่องใหม่ นี่คือวิธีการทำงานของการจำลองเกม ซึ่งเป็นที่นิยมใช้ในการทำให้วิดีโอเกมเก่าทำงานบนอุปกรณ์ใหม่ที่มีฮาร์ดแวร์ที่แตกต่างกันอย่างมากมาย เมื่อคุณเรียกใช้แอป x86 บน Arm PC Windows จะนำบล็อกโค้ดของแอปและคอมไพล์เป็นสิ่งที่สามารถทำงานบนชิป Arm ได้ ทั้งหมดนี้ดำเนินการแบบเรียลไทม์ และ Windows จะต้องแคชโค้ดทั้งหมดที่แปล ซึ่งหมายความว่าไม่จำเป็นต้องแปลซ้ำแล้วซ้ำอีก

น่าเสียดายที่ประสิทธิภาพจะแย่ลงในแอปที่จำลองเมื่อเปรียบเทียบกับโค้ดที่ออกแบบมาสำหรับฮาร์ดแวร์ เป็นการยากที่จะบอกว่าคุณสูญเสียประสิทธิภาพไปมากเพียงใดจากการรันโค้ดจำลองบน Windows เนื่องจากข้อมูลการทดสอบมีน้อยมาก แต่สำหรับการเปรียบเทียบ นักแปล Rosetta 2 ของ Apple (ซึ่งแปลแอป x86 เป็น Arm ด้วย) สูญเสียประมาณ 20% เป็นไปได้ที่จะลดจำนวนนั้นลง แต่โดยปกติแล้วการจำลองและการแปลจะส่งผลให้ประสิทธิภาพลดลงไม่ว่าจะเกิดอะไรขึ้นก็ตาม

เหตุใดแอปพลิเคชัน x86 จึงไม่สามารถทำงานได้บน Arm หากไม่มีการจำลอง

คุณอาจสงสัยว่าเหตุใดจึงต้องเขียนซอฟต์แวร์สำหรับ x86, Arm และ CPU ประเภทอื่นๆ โดยเฉพาะ มันลงมาที่ ความแตกต่างทางสถาปัตยกรรมและในกรณีนี้ เรากำลังพูดถึงสถาปัตยกรรมชุดคำสั่ง (ISA) สิ่งเหล่านี้คือการออกแบบขั้นพื้นฐานที่สุดของโปรเซสเซอร์ และเป็นตัวกำหนดว่าบางสิ่งที่เรียบง่าย เช่น การคูณ หรือสิ่งที่ซับซ้อน เช่น AVX สามารถทำได้โดยกำเนิดหรือไม่ การเปลี่ยน ISA ส่งผลต่อวิธีการพื้นฐานที่สุดที่ซอฟต์แวร์โต้ตอบกับฮาร์ดแวร์ ไปจนถึงวิธีพื้นฐานและค่าศูนย์ที่ CPU อ่าน

x86 คือ ISA ของ CPU ของ Intel และ AMD ซึ่งในอดีตเป็น CPU เพียงตัวเดียวที่ Windows สามารถทำงานได้ด้วยซ้ำ ในขณะเดียวกัน Arm ส่วนใหญ่จะใช้สำหรับสมาร์ทโฟน และการทับซ้อนกันระหว่างซอฟต์แวร์พีซีและซอฟต์แวร์โทรศัพท์มีน้อยมาก โดยปกติแล้วโปรแกรมส่วนใหญ่จะสร้างขึ้นสำหรับ x86 หรือ Arm และสำหรับ Windows on Arm นี่เป็นปัญหาใหญ่เพราะ การแปลไม่ได้ออกมาในปี 2020 ในขณะที่ Windows RT (Windows รุ่นแรกที่รองรับ Arm) ออกมา 2012.

เป็นเวลาประมาณหนึ่งทศวรรษแล้วที่ Windows เริ่มสนับสนุน Arm แล้วแอพเนทีฟทั้งหมดอยู่ที่ไหน? ปัญหาหลักคือต้องใช้เวลาและความเชี่ยวชาญในการเขียนซอฟต์แวร์ใหม่สำหรับ ISA อื่น โดยเฉพาะอย่างยิ่งหากนักพัฒนาต้องการทำมันให้ดี นักพัฒนาที่ไม่ได้รับการดูแลอย่างเหมาะสมในการย้ายแอปจาก ISA หนึ่งไปยังอีก ISA อาจส่งผลให้เกิดข้อบกพร่องและจุดบกพร่อง ตัวอย่างที่ดีของสิ่งนี้คือ Photoshop สำหรับ Windows on Arm มันทำงานบน Windows on Arm ยังอยู่ในการตรวจสอบ Lenovo Thinkpad X13s ของเราเราพบข้อผิดพลาดหลายประการและมีคำเตือนมากมายว่า OpenCL และ OpenGL ไม่ได้รับการสนับสนุน เมื่อประกอบกับฐานผู้ใช้ที่เล็กกว่ามากที่ใช้ Arm บน Windows จึงมีแรงจูงใจให้นักพัฒนาดูแลน้อยลง

ดังนั้น เมื่อนักพัฒนาไม่สามารถหรือไม่ทุ่มเททรัพยากรเพื่อสร้างซอฟต์แวร์เนทีฟ ทางเลือกอื่นก็คือการจำลอง แม้ว่าการแปลแอป x86 สำหรับ Windows on Arm จะไม่สมบูรณ์แบบ แต่ก็น่าประทับใจที่มันใช้งานได้ และบางครั้งการสูญเสียประสิทธิภาพก็คุ้มค่าที่จะรู้ว่าแอปจะทำงานตามที่คาดไว้ อย่างน้อยจนกว่า Windows on Arm จะถึงจุดที่นักพัฒนาไม่สามารถเพิกเฉยได้อีกต่อไป การแปลและการจำลองจะช่วยส่งเสริมระบบนิเวศฮาร์ดแวร์-ซอฟต์แวร์ที่มีความจำเป็นอย่างมาก