Arm64EC - Membangun dan mem-port aplikasi untuk performa asli di Arm
Arm64EC ("Kompatibel Emulasi") memungkinkan Anda membangun aplikasi asli baru atau secara bertahap transisi aplikasi x64 yang ada untuk memanfaatkan kecepatan dan performa asli yang mungkin dilakukan dengan perangkat bertenaga Arm, termasuk konsumsi daya yang lebih baik, masa pakai baterai, dan beban kerja AI & ML yang dipercepat.
Arm64EC adalah antarmuka biner aplikasi baru (ABI) untuk aplikasi yang berjalan di perangkat Arm dengan Windows 11. Ini adalah fitur Windows 11 yang memerlukan penggunaan Windows 11 SDK dan tidak tersedia di Windows 10 di Arm.
Kode yang dibuat sebagai Arm64EC dapat dioperasikan dengan kode x64 yang berjalan di bawah emulasi dalam proses yang sama. Kode Arm64EC dalam proses berjalan dengan performa asli, sementara kode x64 berjalan menggunakan emulasi yang dilengkapi bawaan dengan Windows 11. Bahkan jika aplikasi Anda bergantung pada dependensi atau plugin yang ada yang belum mendukung Arm, Anda dapat mulai membangun kembali bagian aplikasi Anda sebagai Arm64EC untuk mendapatkan manfaat performa asli.
Arm64EC menjamin interoperabilitas dengan x64 dengan mengikuti konvensi perangkat lunak x64 termasuk konvensi panggilan, penggunaan tumpukan, tata letak struktur data, dan definisi praprosesor. Namun, kode Arm64EC tidak kompatibel dengan kode yang dibangun sebagai Arm64, yang menggunakan serangkaian konvensi perangkat lunak yang berbeda.
Sistem operasi Windows 11 pada Arm sendiri sangat bergantung pada interoperabilitas Arm64EC untuk memungkinkan menjalankan aplikasi x64. Sebagian besar kode sistem operasi yang dimuat oleh aplikasi x64 yang berjalan pada Windows 11 di Arm akan dikompilasi sebagai Arm64EC, memungkinkan performa asli untuk kode tersebut tanpa diketahui aplikasi.
Proses x64 atau Arm64EC dapat memuat dan memanggil biner x64 dan Arm64EC, sedangkan proses Arm64 hanya dapat memuat biner Arm64. Kedua arsitektur dapat memuat biner Arm64X karena berisi kode untuk x64 dan Arm64.
Arsitektur proses | biner x64 | Biner Arm64EC | Biner Arm64 |
---|---|---|---|
x64/Arm64EC | ✔ | ✔ | ❌ |
Arm64 | ❌ | ❌ | ✔ |
✔ = Didukung, ❌ = Tidak didukung
Demikian pula, pada waktu build, biner Arm64EC dapat menautkan di libs x64 dan Arm64EC, sementara biner Arm64 hanya dapat menautkan di arm64 libs.
Arsitektur PE | x64 lib | Arm64EC lib | Arm64 lib |
---|---|---|---|
Arm64EC | ✔ | ✔ | ❌ |
Arm64 | ❌ | ❌ | ✔ |
✔ = Didukung, ❌ = Tidak didukung
Untuk detail selengkapnya tentang bagaimana Arm64EC ABI memungkinkan interoperabilitas, lihat Memahami Arm64EC ABI dan kode perakitan.
Arm64EC memungkinkan Anda untuk secara bertahap mentransisikan kode di aplikasi yang ada dari yang ditiru ke asli. Pada setiap langkah di sepanjang jalan, aplikasi Anda terus berjalan dengan baik tanpa perlu dikompresi ulang sekaligus.
Gambar di atas menunjukkan contoh yang disederhanakan dari beban kerja x64 yang sepenuhnya ditiru membutuhkan waktu yang kemudian ditingkatkan secara bertahap menggunakan Arm64EC:
- Dimulai sebagai beban kerja x64 yang sepenuhnya ditimulasi
- Setelah mengkompilasi ulang bagian yang paling intensif CPU sebagai Arm64EC
- Setelah terus mengkombinasi ulang lebih banyak modul x64 dari waktu ke waktu
- Mengakhiri hasil dari aplikasi Arm64EC yang sepenuhnya asli
Dengan mengkompilasi ulang modul yang membutuhkan waktu paling lama atau merupakan yang paling intensif CPU dari x64 ke Arm64EC, beban kerja yang dihasilkan menerima peningkatan paling banyak untuk jumlah upaya paling sedikit setiap langkah.
Saat menggunakan Arm64EC untuk membangun kembali aplikasi, Anda ingin menggunakan dependensi versi Arm64EC tetapi Anda juga dapat mengandalkan dependensi versi x64. Versi dependensi Arm64 tidak akan dapat digunakan.
Kode x64 apa pun, termasuk kode dari dependensi, dalam proses Arm64EC akan berjalan di bawah emulasi di aplikasi Anda. Memprioritaskan dependensi yang paling intensif CPU ke transisi dari x64 ke Arm64EC akan memiliki dampak terbesar terhadap peningkatan performa aplikasi Anda.
Aplikasi yang berjalan di Windows 11 di Arm akan berinteraksi dengan biner Arm64EC seolah-olah mereka adalah biner x64. Aplikasi ini tidak perlu tahu sejauh mana kode dalam biner telah dikompilasi ulang sebagai Arm64EC.
Bagi pengembang yang tertarik untuk mengidentifikasi biner ini, Anda dapat melihatnya di prompt perintah pengembang menggunakan link /dump /headers
.
File Type: EXECUTABLE IMAGE
FILE HEADER VALUES
8664 machine (x64) (ARM64X)
Kombinasi (x64) dan (ARM64X) menunjukkan bahwa beberapa bagian biner telah dikompilasi ulang sebagai Arm64EC, meskipun biner masih tampak x64. Biner dengan header mesin yang berisi (ARM64) dan (ARM64X) adalah file Arm64X PE yang dapat dimuat ke dalam aplikasi x64 dan Arm64.
Windows Task Manager juga dapat digunakan untuk mengidentifikasi apakah aplikasi telah dikompilasi sebagai Arm64EC. Di tab Detail pengelola Tugas, kolom Arsitektur akan menampilkan ARM64 (kompatibel x64) untuk aplikasi yang dapat dieksekusi utamanya telah dikompilasi sebagian atau sepenuhnya sebagai Arm64EC.
Lihat Mulai menggunakan Arm64EC untuk mempelajari cara membuat atau memperbarui aplikasi Win32 menggunakan Arm64EC.
Umpan balik Windows on Arm
Windows on Arm adalah proyek sumber terbuka. Pilih tautan untuk memberikan umpan balik: