Tutup iklan

Mike Ash didedikasikan di blognya implikasi praktis peralihan ke arsitektur 64-bit di iPhone 5S. Artikel ini mengacu pada temuannya.

Alasan munculnya teks ini terutama karena banyaknya misinformasi yang tersebar tentang arti sebenarnya iPhone 5s baru dengan prosesor ARM 64-bit bagi pengguna dan pasar. Di sini kami akan mencoba memberikan informasi objektif tentang kinerja, kemampuan, dan implikasi transisi ini bagi pengembang.

"64bit"

Ada dua bagian prosesor yang dapat dirujuk oleh label "X-bit" - lebar register integer dan lebar pointer. Untungnya, pada sebagian besar prosesor modern, lebar ini sama, jadi dalam kasus A7 ini berarti register integer 64-bit dan pointer 64-bit.

Namun, penting juga untuk menunjukkan apa yang TIDAK dimaksud dengan "64bit": Ukuran alamat fisik RAM. Jumlah bit untuk berkomunikasi dengan RAM (dengan demikian jumlah RAM yang dapat didukung perangkat) tidak berhubungan dengan jumlah bit CPU. Prosesor ARM memiliki alamat antara 26 dan 40-bit dan dapat diubah secara independen dari sistem lainnya.

  • Ukuran bus data. Jumlah data yang diterima dari RAM atau memori buffer juga tidak bergantung pada faktor ini. Instruksi prosesor individual mungkin meminta jumlah data yang berbeda, namun dikirimkan dalam bentuk potongan atau diterima lebih dari yang dibutuhkan dari memori. Itu tergantung pada ukuran kuantum data. IPhone 5 sudah menerima data dari memori dalam kuanta 64-bit (dan memiliki prosesor 32-bit), dan kita dapat menemukan ukuran hingga 192 bit.
  • Segala sesuatu yang berhubungan dengan floating point. Ukuran register tersebut (FPU) sekali lagi tidak bergantung pada cara kerja internal prosesor. ARM telah menggunakan FPU 64-bit sejak sebelum ARM64 (prosesor ARM 64-bit).

Kelebihan dan kekurangan secara umum

Jika kita membandingkan arsitektur 32bit dan 64bit yang identik, secara umum keduanya tidak jauh berbeda. Inilah salah satu alasan kebingungan umum masyarakat mencari alasan mengapa Apple juga beralih ke 64bit di perangkat seluler. Namun, itu semua berasal dari parameter spesifik prosesor A7 (ARM64) dan cara Apple menggunakannya, bukan hanya dari fakta bahwa prosesor tersebut memiliki arsitektur 64-bit.

Namun jika kita tetap melihat perbedaan kedua arsitektur ini, kita akan menemukan beberapa perbedaan. Yang jelas adalah register bilangan bulat 64-bit dapat menangani bilangan bulat 64-bit dengan lebih efisien. Bahkan sebelumnya, dimungkinkan untuk bekerja dengan mereka pada prosesor 32-bit, tetapi ini biasanya berarti membaginya menjadi bagian-bagian yang panjangnya 32-bit, yang menyebabkan perhitungan lebih lambat. Jadi prosesor 64-bit umumnya dapat melakukan komputasi dengan tipe 64-bit sama cepatnya dengan komputasi 32-bit. Artinya, aplikasi yang umumnya menggunakan tipe 64-bit bisa berjalan jauh lebih cepat di prosesor 64-bit.

Meskipun 64bit tidak mempengaruhi jumlah total RAM yang dapat digunakan prosesor, namun hal ini dapat mempermudah bekerja dengan potongan RAM yang besar dalam satu program. Setiap program yang berjalan pada prosesor 32-bit hanya memiliki ruang alamat sekitar 4 GB. Mempertimbangkan bahwa sistem operasi dan perpustakaan standar memakan sesuatu, hal ini menyisakan program antara 1-3 GB untuk penggunaan aplikasi. Namun, jika sistem 32-bit memiliki RAM lebih dari 4 GB, penggunaan memori tersebut akan sedikit lebih rumit. Kita harus memaksa sistem operasi untuk memetakan potongan memori yang lebih besar ini untuk program kita (virtualisasi memori), atau kita dapat membagi program menjadi beberapa proses (di mana setiap proses secara teoritis memiliki 4 GB memori yang tersedia untuk pengalamatan langsung).

Namun, "peretasan" ini sangat sulit dan lambat sehingga hanya sedikit aplikasi yang menggunakannya. Dalam praktiknya, pada prosesor 32-bit, setiap program hanya akan menggunakan memorinya sebesar 1-3 GB, dan lebih banyak RAM yang tersedia dapat digunakan untuk menjalankan beberapa program secara bersamaan atau menggunakan memori ini sebagai buffer (caching). Penggunaan ini praktis, namun kami ingin program apa pun dapat dengan mudah menggunakan potongan memori yang lebih besar dari 4 GB.

Sekarang kita sampai pada klaim yang sering (sebenarnya salah) bahwa tanpa memori lebih dari 4GB, arsitektur 64-bit tidak ada gunanya. Ruang alamat yang lebih besar berguna bahkan pada sistem dengan memori lebih sedikit. File yang dipetakan memori adalah alat yang berguna di mana sebagian konten file dihubungkan secara logis ke memori proses tanpa seluruh file harus dimuat ke dalam memori. Dengan demikian, sistem dapat, misalnya, secara bertahap memproses file besar yang berkali-kali lipat lebih besar dari kapasitas RAM. Pada sistem 32-bit, file besar seperti itu tidak dapat dipetakan dengan andal di memori, sedangkan pada sistem 64-bit, hal ini mudah dilakukan, berkat ruang alamat yang jauh lebih besar.

Namun, ukuran pointer yang lebih besar juga membawa satu kelemahan besar: jika tidak, program yang identik memerlukan lebih banyak memori pada prosesor 64-bit (pointer yang lebih besar ini harus disimpan di suatu tempat). Karena pointer sering menjadi bagian dari program, perbedaan ini dapat membebani cache, yang pada gilirannya menyebabkan keseluruhan sistem berjalan lebih lambat. Jadi dalam perspektif, kita dapat melihat bahwa jika kita mengubah arsitektur prosesor menjadi 64-bit, hal itu justru akan memperlambat keseluruhan sistem. Jadi faktor ini harus diimbangi dengan lebih banyak optimasi di tempat lain.

ARM64

A7, prosesor 64-bit yang menggerakkan iPhone 5s baru, bukan sekadar prosesor ARM biasa dengan register yang lebih lebar. ARM64 berisi perbaikan besar dibandingkan versi 32-bit yang lebih lama.

Prosesor Apple A7.

pendaftaran

ARM64 menampung register bilangan bulat dua kali lebih banyak daripada ARM 32-bit (berhati-hatilah agar tidak membingungkan jumlah dan lebar register - kita berbicara tentang lebar di bagian "64-bit". Jadi ARM64 memiliki register dua kali lebih lebar dan dua kali lebih banyak register register). ARM 32-bit memiliki 16 register bilangan bulat: satu penghitung program (PC - berisi nomor instruksi saat ini), penunjuk tumpukan (penunjuk ke fungsi yang sedang berlangsung), register tautan (penunjuk ke kembali setelah akhir fungsi), dan 13 sisanya untuk penggunaan aplikasi. Namun, ARM64 memiliki 32 register bilangan bulat, termasuk satu register nol, register tautan, penunjuk bingkai (mirip dengan penunjuk tumpukan), dan satu lagi dicadangkan untuk masa depan. Ini menyisakan 28 register untuk penggunaan aplikasi, lebih dari dua kali lipat ARM 32-bit. Pada saat yang sama, ARM64 menggandakan jumlah register floating-point number (FPU) dari 16 menjadi 32 register 128-bit.

Tapi mengapa jumlah register begitu penting? Memori umumnya lebih lambat dibandingkan perhitungan CPU dan membaca/menulis bisa memakan waktu sangat lama. Hal ini akan membuat prosesor yang cepat harus terus menunggu memori dan kita akan mencapai batas kecepatan alami sistem. Prosesor mencoba menyembunyikan cacat ini dengan lapisan buffer, namun yang tercepat (L1) pun masih lebih lambat dibandingkan perhitungan prosesor. Namun, register adalah sel memori yang langsung ada di prosesor dan pembacaan/penulisannya cukup cepat sehingga tidak memperlambat prosesor. Jumlah register secara praktis berarti jumlah memori tercepat untuk perhitungan prosesor, yang sangat mempengaruhi kecepatan keseluruhan sistem.

Pada saat yang sama, kecepatan ini memerlukan dukungan optimasi yang baik dari kompiler agar bahasa dapat menggunakan register tersebut dan tidak harus menyimpan semuanya di memori aplikasi umum (yang lambat).

Kumpulan instruksi

ARM64 juga membawa perubahan besar pada set instruksi. Set instruksi adalah sekumpulan operasi atomik yang dapat dilakukan oleh prosesor (misalnya 'TAMBAHKAN register1 register2' menambahkan angka dalam dua register). Fungsi yang tersedia untuk masing-masing bahasa terdiri dari instruksi ini. Fungsi yang lebih kompleks harus menjalankan lebih banyak instruksi, sehingga bisa lebih lambat.

Yang baru di ARM64 adalah instruksi untuk enkripsi AES, fungsi hash SHA-1 dan SHA-256. Jadi alih-alih implementasi yang rumit, hanya bahasa yang akan memanggil instruksi ini - yang akan mempercepat komputasi fungsi-fungsi tersebut dan semoga menambah keamanan dalam aplikasi. Misalnya. Touch ID baru juga menggunakan instruksi ini dalam enkripsi, memungkinkan kecepatan dan keamanan nyata (secara teori, penyerang harus memodifikasi prosesor itu sendiri untuk mengakses data - setidaknya tidak praktis mengingat ukurannya yang mini).

Kompatibilitas dengan 32bit

Penting untuk disebutkan bahwa A7 dapat berjalan sepenuhnya dalam mode 32-bit tanpa memerlukan emulasi. Artinya, iPhone 5s baru dapat menjalankan aplikasi yang dikompilasi pada ARM 32-bit tanpa perlambatan apa pun. Namun, ia tidak dapat menggunakan fungsi ARM64 yang baru, jadi sebaiknya selalu membuat build khusus hanya untuk A7, yang seharusnya berjalan lebih cepat.

Perubahan waktu proses

Runtime adalah kode yang menambahkan fungsi ke bahasa pemrograman, yang dapat digunakan saat aplikasi sedang berjalan, hingga setelah terjemahan. Karena Apple tidak perlu menjaga kompatibilitas aplikasi (biner 64-bit berjalan pada 32-bit), mereka dapat melakukan beberapa perbaikan lagi pada bahasa Objective-C.

Salah satunya adalah yang disebut penunjuk yang ditandai (indikator yang ditandai). Biasanya, objek dan penunjuk ke objek tersebut disimpan di bagian memori yang terpisah. Namun, tipe pointer baru memungkinkan kelas dengan sedikit data untuk menyimpan objek secara langsung di pointer. Langkah ini menghilangkan kebutuhan untuk mengalokasikan memori secara langsung untuk objek, cukup buat pointer dan objek di dalamnya. Pointer yang diberi tag hanya didukung dalam arsitektur 64-bit juga karena fakta bahwa tidak ada lagi cukup ruang dalam pointer 32-bit untuk menyimpan cukup data berguna. Oleh karena itu, iOS, tidak seperti OS X, belum mendukung fitur ini. Namun, dengan hadirnya ARM64, hal ini berubah, dan iOS juga telah menyusul OS X dalam hal ini.

Meskipun panjang pointer adalah 64 bit, pada ARM64 hanya 33 bit yang digunakan untuk alamat pointer itu sendiri. Dan jika kita dapat membuka tabir sisa bit penunjuk dengan andal, kita dapat menggunakan ruang ini untuk menyimpan data tambahan – seperti dalam kasus penunjuk yang diberi tag yang disebutkan. Secara konseptual, ini adalah salah satu perubahan terbesar dalam sejarah Objective-C, meskipun ini bukan fitur yang dapat dipasarkan - sehingga sebagian besar pengguna tidak akan mengetahui bagaimana Apple memajukan Objective-C.

Adapun data berguna yang dapat disimpan di ruang tersisa dari penunjuk yang diberi tag, Objective-C, misalnya, sekarang menggunakannya untuk menyimpan apa yang disebut jumlah referensi (jumlah referensi). Sebelumnya, jumlah referensi disimpan di tempat berbeda di memori, dalam tabel hash yang disiapkan untuk itu, namun hal ini dapat memperlambat keseluruhan sistem jika terjadi panggilan alokasi/dealloc/retain/release dalam jumlah besar. Tabel harus dikunci karena keamanan thread, sehingga jumlah referensi dua objek di dua thread tidak dapat diubah secara bersamaan. Namun, nilai ini baru dimasukkan ke dalam nilai lainnya yang disebut isa indikator. Ini adalah keuntungan dan percepatan lain yang tidak mencolok namun sangat besar di masa depan. Namun, hal ini tidak akan pernah dapat dicapai dalam arsitektur 32-bit.

Informasi tentang objek terkait, apakah objek tersebut direferensikan dengan lemah, apakah perlu untuk menghasilkan destruktor untuk objek tersebut, dll., juga baru dimasukkan ke dalam sisa tempat penunjuk ke objek. Berkat informasi ini, Objective-C runtime mampu mempercepat runtime secara mendasar, yang tercermin dalam kecepatan setiap aplikasi. Dari pengujian, ini berarti percepatan sekitar 40-50% dari semua panggilan manajemen memori. Hanya dengan beralih ke pointer 64-bit dan menggunakan ruang baru ini.

záver

Meskipun pesaing akan mencoba menyebarkan gagasan bahwa berpindah ke arsitektur 64-bit tidak diperlukan, Anda pasti sudah tahu bahwa ini hanyalah opini yang kurang informasi. Memang benar bahwa beralih ke 64bit tanpa mengadaptasi bahasa atau aplikasi tidak berarti apa-apa - bahkan memperlambat keseluruhan sistem. Namun A7 baru menggunakan ARM64 modern dengan set instruksi baru, dan Apple telah bersusah payah memodernisasi seluruh bahasa Objective-C dan memanfaatkan kemampuan baru - oleh karena itu percepatan yang dijanjikan.

Di sini kami telah menyebutkan sejumlah besar alasan mengapa arsitektur 64-bit adalah langkah maju yang tepat. Ini adalah revolusi lain yang "tersembunyi", berkat Apple yang akan berusaha untuk tetap menjadi yang terdepan tidak hanya dengan desain, antarmuka pengguna, dan ekosistem yang kaya, tetapi terutama dengan teknologi paling modern di pasar.

Zdroj: mikeash.com
.