Tutup iklan

Mike Ash berdedikasi di blog beliau implikasi praktikal bertukar kepada seni bina 64-bit dalam iPhone 5S. Artikel ini merujuk kepada penemuannya.

Sebab teks ini adalah disebabkan oleh banyaknya maklumat salah yang disebarkan tentang maksud sebenar iPhone 5s baharu dengan pemproses ARM 64-bit untuk pengguna dan pasaran. Di sini kami akan cuba membawa maklumat objektif tentang prestasi, keupayaan dan implikasi peralihan ini untuk pembangun.

"64 bit"

Terdapat dua bahagian pemproses yang boleh dirujuk oleh label "X-bit" - lebar daftar integer dan lebar penunjuk. Nasib baik, pada kebanyakan pemproses moden, lebar ini adalah sama, jadi dalam kes A7 ini bermakna daftar integer 64-bit dan penunjuk 64-bit.

Walau bagaimanapun, adalah sama penting untuk menunjukkan apa yang "64bit" TIDAK bermaksud: Saiz alamat fizikal RAM. Bilangan bit untuk berkomunikasi dengan RAM (dengan itu jumlah RAM yang boleh disokong oleh peranti) tidak berkaitan dengan bilangan bit CPU. Pemproses ARM mempunyai mana-mana antara alamat 26- dan 40-bit dan boleh ditukar secara bebas daripada seluruh sistem.

  • Saiz bas data. Jumlah data yang diterima daripada RAM atau memori penimbal adalah sama bebas daripada faktor ini. Arahan pemproses individu mungkin meminta jumlah data yang berbeza, tetapi ia sama ada dihantar dalam ketulan atau menerima lebih daripada yang diperlukan daripada memori. Ia bergantung kepada saiz kuantum data. IPhone 5 sudah menerima data daripada memori dalam kuanta 64-bit (dan mempunyai pemproses 32-bit), dan kita boleh menemui saiz sehingga 192 bit.
  • Apa-apa sahaja yang berkaitan dengan titik terapung. Saiz daftar tersebut (FPU) sekali lagi tidak bergantung pada kerja dalaman pemproses. ARM telah menggunakan FPU 64-bit sejak sebelum ARM64 (pemproses ARM 64-bit).

Kelebihan dan keburukan am

Jika kita membandingkan seni bina 32bit dan 64bit yang serupa, ia biasanya tidak begitu berbeza. Ini adalah salah satu sebab kekeliruan umum orang ramai mencari sebab mengapa Apple beralih ke 64bit dalam peranti mudah alih juga. Walau bagaimanapun, semuanya datang daripada parameter khusus pemproses A7 (ARM64) dan cara Apple menggunakannya, bukan hanya dari fakta bahawa pemproses itu mempunyai seni bina 64-bit.

Walau bagaimanapun, jika kita masih melihat perbezaan antara kedua-dua seni bina ini, kita akan mendapati beberapa perbezaan. Yang jelas ialah daftar integer 64-bit boleh mengendalikan integer 64-bit dengan lebih cekap. Malah sebelum ini, adalah mungkin untuk bekerja dengan mereka pada pemproses 32-bit, tetapi ini biasanya bermakna membahagikannya kepada kepingan panjang 32-bit, yang menyebabkan pengiraan lebih perlahan. Jadi pemproses 64-bit secara amnya boleh mengira dengan jenis 64-bit sepantas dengan jenis 32-bit. Ini bermakna aplikasi yang biasanya menggunakan jenis 64-bit boleh berjalan dengan lebih pantas pada pemproses 64-bit.

Walaupun 64bit tidak menjejaskan jumlah RAM yang boleh digunakan oleh pemproses, ia boleh memudahkan untuk bekerja dengan sebahagian besar RAM dalam satu program. Mana-mana program tunggal yang dijalankan pada pemproses 32-bit hanya mempunyai kira-kira 4 GB ruang alamat. Dengan mengambil kira bahawa sistem pengendalian dan perpustakaan standard mengambil sesuatu, ini meninggalkan program dengan jarak antara 1-3 GB untuk kegunaan aplikasi. Walau bagaimanapun, jika sistem 32-bit mempunyai lebih daripada 4 GB RAM, menggunakan memori itu adalah sedikit lebih rumit. Kita perlu memaksa sistem pengendalian untuk memetakan cebisan memori yang lebih besar ini untuk atur cara kita (pemayaan memori), atau kita boleh membahagikan atur cara kepada beberapa proses (di mana setiap proses sekali lagi secara teorinya mempunyai 4GB memori yang tersedia untuk pengalamatan terus).

Walau bagaimanapun, "godam" ini sangat sukar dan perlahan sehinggakan sekurang-kurangnya aplikasi menggunakannya. Pada praktiknya, pada pemproses 32-bit, setiap program hanya akan menggunakan memori 1-3 GBnya, dan lebih banyak RAM yang tersedia boleh digunakan untuk menjalankan berbilang program pada masa yang sama atau menggunakan memori ini sebagai penimbal (caching). Kegunaan ini adalah praktikal, tetapi kami ingin mana-mana program boleh menggunakan cebisan memori yang lebih besar daripada 4GB dengan mudah.

Sekarang kita sampai kepada dakwaan yang kerap (sebenarnya tidak betul) bahawa tanpa lebih daripada 4GB memori, seni bina 64-bit tidak berguna. Ruang alamat yang lebih besar berguna walaupun pada sistem yang kurang memori. Fail yang dipetakan memori ialah alat yang berguna di mana sebahagian daripada kandungan fail dipautkan secara logik ke memori proses tanpa keseluruhan fail perlu dimuatkan ke dalam memori. Sistem boleh, sebagai contoh, memproses fail besar secara beransur-ansur berkali-kali lebih besar daripada kapasiti RAM. Pada sistem 32-bit, fail besar seperti itu tidak boleh dipetakan memori dengan pasti, manakala pada sistem 64-bit, ia adalah sekeping kek, terima kasih kepada ruang alamat yang lebih besar.

Walau bagaimanapun, saiz penunjuk yang lebih besar juga membawa satu kelemahan besar: jika tidak program yang sama memerlukan lebih banyak memori pada pemproses 64-bit (penunjuk yang lebih besar ini perlu disimpan di suatu tempat). Memandangkan penunjuk adalah bahagian yang kerap dalam program, perbezaan ini boleh membebankan cache, yang seterusnya menyebabkan keseluruhan sistem berjalan lebih perlahan. Jadi dalam perspektif, kita dapat melihat bahawa jika kita hanya menukar seni bina pemproses kepada 64-bit, ia sebenarnya akan melambatkan keseluruhan sistem. Jadi faktor ini perlu diimbangi dengan lebih banyak pengoptimuman di tempat lain.

ARM64

A7, pemproses 64-bit yang menjanakan iPhone 5s baharu, bukan sekadar pemproses ARM biasa dengan daftar yang lebih luas. ARM64 mengandungi peningkatan besar berbanding versi 32-bit yang lebih lama.

Pemproses Apple A7.

pendaftaran

ARM64 memegang dua kali lebih banyak daftar integer berbanding ARM 32-bit (berhati-hati agar tidak mengelirukan nombor dan lebar daftar - kami bercakap tentang lebar dalam bahagian "64-bit". Jadi ARM64 mempunyai kedua-dua daftar dua kali lebih lebar dan dua kali lebih banyak daftar). ARM 32-bit mempunyai 16 daftar integer: satu pembilang program (PC - mengandungi nombor arahan semasa), penuding tindanan (penunjuk kepada fungsi yang sedang berjalan), daftar pautan (penunjuk ke pemulangan selepas tamat. fungsi), dan baki 13 adalah untuk kegunaan aplikasi. Walau bagaimanapun, ARM64 mempunyai 32 daftar integer, termasuk satu daftar sifar, daftar pautan, penunjuk bingkai (serupa dengan penuding tindanan), dan satu dikhaskan untuk masa hadapan. Ini memberikan kami 28 daftar untuk kegunaan aplikasi, lebih daripada dua kali ganda ARM 32-bit. Pada masa yang sama, ARM64 menggandakan bilangan daftar nombor titik terapung (FPU) daripada 16 kepada 32 daftar 128-bit.

Tetapi mengapa bilangan daftar begitu penting? Memori biasanya lebih perlahan daripada pengiraan CPU dan membaca/menulis boleh mengambil masa yang sangat lama. Ini akan menjadikan pemproses pantas perlu terus menunggu memori dan kami akan mencapai had kelajuan semula jadi sistem. Pemproses cuba menyembunyikan kecacatan ini dengan lapisan penimbal, tetapi walaupun yang terpantas (L1) masih lebih perlahan daripada pengiraan pemproses. Walau bagaimanapun, daftar ialah sel memori terus dalam pemproses dan bacaan/penulisannya cukup pantas untuk tidak memperlahankan pemproses. Bilangan daftar secara praktikal bermaksud jumlah memori terpantas untuk pengiraan pemproses, yang sangat mempengaruhi kelajuan keseluruhan sistem.

Pada masa yang sama, kelajuan ini memerlukan sokongan pengoptimuman yang baik daripada pengkompil supaya bahasa boleh menggunakan daftar ini dan tidak perlu menyimpan segala-galanya dalam memori aplikasi umum (perlahan).

Set arahan

ARM64 juga membawa perubahan besar pada set arahan. Set arahan ialah satu set operasi atom yang boleh dilakukan oleh pemproses (cth 'TAMBAH daftar1 daftar2' menambah nombor dalam dua daftar). Fungsi yang tersedia untuk bahasa individu terdiri daripada arahan ini. Fungsi yang lebih kompleks mesti melaksanakan lebih banyak arahan, supaya ia boleh menjadi lebih perlahan.

Baharu dalam ARM64 ialah arahan untuk penyulitan AES, fungsi cincang SHA-1 dan SHA-256. Oleh itu, bukannya pelaksanaan yang rumit, hanya bahasa yang akan memanggil arahan ini - yang akan membawa kelajuan yang besar kepada pengiraan fungsi tersebut dan diharapkan menambah keselamatan dalam aplikasi. Cth. Touch ID baharu juga menggunakan arahan ini dalam penyulitan, membenarkan kelajuan dan keselamatan sebenar (secara teori, penyerang perlu mengubah suai pemproses itu sendiri untuk mengakses data - tidak praktikal untuk mengatakan sekurang-kurangnya memandangkan saiz kecilnya).

Keserasian dengan 32bit

Adalah penting untuk menyebut bahawa A7 boleh berjalan sepenuhnya dalam mod 32-bit tanpa memerlukan emulasi. Ini bermakna bahawa iPhone 5s baharu boleh menjalankan aplikasi yang disusun pada ARM 32-bit tanpa sebarang kelembapan. Walau bagaimanapun, ia tidak boleh menggunakan fungsi ARM64 baharu, jadi ia sentiasa berbaloi untuk membuat binaan khas hanya untuk A7, yang sepatutnya berjalan lebih pantas.

Perubahan masa jalan

Runtime ialah kod yang menambah fungsi pada bahasa pengaturcaraan, yang ia boleh gunakan semasa aplikasi berjalan, sehingga selepas terjemahan. Memandangkan Apple tidak perlu mengekalkan keserasian aplikasi (bahawa perduaan 64-bit berjalan pada 32-bit), mereka mampu untuk membuat beberapa penambahbaikan lagi pada bahasa Objektif-C.

Salah satunya adalah yang dipanggil penunjuk bertanda (penunjuk bertanda). Biasanya, objek dan penunjuk kepada objek tersebut disimpan dalam bahagian memori yang berasingan. Walau bagaimanapun, jenis penuding baharu membenarkan kelas dengan sedikit data untuk menyimpan objek terus dalam penuding. Langkah ini menghapuskan keperluan untuk memperuntukkan memori secara langsung untuk objek, hanya buat penunjuk dan objek di dalamnya. Penunjuk bertanda hanya disokong dalam seni bina 64-bit juga disebabkan oleh fakta bahawa tiada lagi ruang yang cukup dalam penuding 32-bit untuk menyimpan data berguna yang mencukupi. Oleh itu, iOS, tidak seperti OS X, belum lagi menyokong ciri ini. Walau bagaimanapun, dengan ketibaan ARM64, ini berubah, dan iOS telah mengejar OS X dalam hal ini juga.

Walaupun penunjuk adalah 64 bit panjang, pada ARM64 hanya 33 bit digunakan untuk alamat penuding sendiri. Dan jika kami dapat membuka topeng bit penuding yang lain dengan pasti, kami boleh menggunakan ruang ini untuk menyimpan data tambahan - seperti dalam kes penunjuk berteg yang disebutkan. Dari segi konsep, ini adalah salah satu perubahan terbesar dalam sejarah Objektif-C, walaupun ia bukan ciri yang boleh dipasarkan - jadi kebanyakan pengguna tidak akan tahu bagaimana Apple menggerakkan Objektif-C ke hadapan.

Bagi data berguna yang boleh disimpan dalam ruang baki penunjuk yang ditandakan, Objective-C, sebagai contoh, kini menggunakannya untuk menyimpan apa yang dipanggil kiraan rujukan (bilangan rujukan). Sebelum ini, kiraan rujukan disimpan di tempat yang berbeza dalam ingatan, dalam jadual cincang yang disediakan untuknya, tetapi ini boleh melambatkan keseluruhan sistem dalam kes sejumlah besar panggilan alloc/dealloc/retain/release. Meja terpaksa dikunci kerana keselamatan benang, jadi kiraan rujukan dua objek dalam dua utas tidak boleh ditukar pada masa yang sama. Walau bagaimanapun, nilai ini baru dimasukkan ke dalam yang lain yang dipanggil isa penunjuk. Ini adalah satu lagi kelebihan dan pecutan yang tidak mencolok, tetapi besar pada masa hadapan. Walau bagaimanapun, ini tidak boleh dicapai dalam seni bina 32-bit.

Maklumat tentang objek yang berkaitan, sama ada objek dirujuk dengan lemah, sama ada perlu untuk menjana pemusnah untuk objek, dsb., juga baru dimasukkan ke dalam baki tempat penunjuk ke objek. Terima kasih kepada maklumat ini, Objektif-C runtime mampu mempercepatkan runtime secara asasnya, yang ditunjukkan dalam kelajuan setiap aplikasi. Daripada ujian, ini bermakna kira-kira 40-50% mempercepatkan semua panggilan pengurusan memori. Hanya dengan bertukar kepada penunjuk 64-bit dan menggunakan ruang baharu ini.

Kesimpulan

Walaupun pesaing akan cuba menyebarkan idea bahawa beralih kepada seni bina 64-bit adalah tidak perlu, anda akan tahu bahawa ini hanyalah pendapat yang tidak dimaklumkan. Memang benar bahawa menukar kepada 64-bit tanpa menyesuaikan bahasa atau aplikasi anda tidak bermakna apa-apa - malah ia memperlahankan keseluruhan sistem. Tetapi A7 baharu menggunakan ARM64 moden dengan set arahan baharu, dan Apple telah mengambil masalah untuk memodenkan keseluruhan bahasa Objektif-C dan memanfaatkan keupayaan baharu - justeru mempercepatkan yang dijanjikan.

Di sini kami telah menyebut sejumlah besar sebab mengapa seni bina 64-bit adalah langkah yang betul ke hadapan. Ia adalah satu lagi revolusi "di bawah hud", yang mana Apple akan cuba kekal di barisan hadapan bukan sahaja dengan reka bentuk, antara muka pengguna dan ekosistem yang kaya, tetapi terutamanya dengan teknologi paling moden di pasaran.

Sumber: Mikeash.com
.