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.

Interoperabilitas

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.

Gunakan Arm64EC untuk membuat aplikasi yang ada lebih cepat di Windows 11 di Arm

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.

Example graph showing incremental update effects on Arm performance using Arm64EC

Gambar di atas menunjukkan contoh yang disederhanakan dari beban kerja x64 yang sepenuhnya ditiru membutuhkan waktu yang kemudian ditingkatkan secara bertahap menggunakan Arm64EC:

  1. Dimulai sebagai beban kerja x64 yang sepenuhnya ditimulasi
  2. Setelah mengkompilasi ulang bagian yang paling intensif CPU sebagai Arm64EC
  3. Setelah terus mengkombinasi ulang lebih banyak modul x64 dari waktu ke waktu
  4. 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.

Dependensi Aplikasi

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.

Mengidentifikasi biner dan aplikasi Arm64EC

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.

Screenshot of Task Manager showing ARM64 (x64 compatible) in Architecture details.

Langkah berikutnya

Lihat Mulai menggunakan Arm64EC untuk mempelajari cara membuat atau memperbarui aplikasi Win32 menggunakan Arm64EC.