ISA tidak memaafkan kesalahan

–X86 adalah kesalahpahaman historis, - master dan 80 tidak kehilangan antusiasme polemik.
"Sebenarnya, dia memiliki 95% pasar server," jawab saya lamban. Saya tidak ingin berdebat seratus kali tentang topik basi
- Dan saya sudah bingung dalam awalan-awalan ini, - sang akademisi tidak menyerah. - 15 byte per instruksi, ini tidak terpikirkan!
- Yah, bukan es, tentu saja. Tapi siapa yang lebih baik?
- Ya, siapa pun, setidaknya ARM-a.
"Aku masih belum mengerti." Penambahan dengan multiplikasi harus?
- Sebaiknya.
- Dan bergeser dengan operasi logis?
- Iya.
- Dan unduhan dengan menghemat juga. Apa perbedaan dalam bagaimana mereka dipanggil dan disandikan?

Seperti biasa, saya menyadari kebenaran guru itu kemudian. Ketika saya duduk untuk menulis dekoder perintah di malam musim dingin suram untuk entah bagaimana menghibur diri. Saya berhasil menggambarkan decoder sederhana untuk ARM di VHDL (dan saya tahu begitu-begitu) dalam beberapa hari. Benar, saya bertobat, saya punya lembar contekan. :)

gambar

Untuk X86 itu tidak mungkin selama seminggu, atau untuk dua, atau selama satu bulan ... Bahkan untuk set dasar.

Perbedaannya di sini bukan hanya di RISC (Reduced Instruction Set Computing) untuk ARM dan CISC (Complex Instruction Set) untuk X86. Perbedaannya agak di jalur perkembangan sejarah. Lebih dari 40 tahun yang lalu, dan semuanya dimulai pada tahun 1978, X86 ISA (Instruction Set Architecture) adalah seperangkat perintah yang cukup kompak dengan logika internalnya sendiri. Tetapi waktu berlalu, kapasitas bus meningkat, register bertambah (termasuk SIMD), dan jumlah tim terus bertambah. Kemudian seorang pria melakukan upaya yang menarik untuk hanya menghitung jumlah instruksi di X86. Apakah dia terlalu malas untuk membuka manualdan menghitungnya, entah dia tahu tentang keberadaan opcode "tak bernama" (tim yang bahkan tidak memiliki nama), atau dia percaya pada kemahahuan logika. Mudah dipahami bahwa logika ternyata tidak berdaya. :) Ngomong-ngomong, saya mencoba mencari grafik pertumbuhan jumlah instruksi X86 berdasarkan tahun (atau berdasarkan generasi). Saya belum bisa (mungkin seseorang memilikinya?). Tapi saya menemukan di sini gambar seperti itu .

gambar

Sejujurnya, saya tidak tahu berapa banyak instruksi yang ada di X86 ISA. Tapi saya ingat dengan baik semua yang saya investasikan dalam pengembangan itu sendiri, tanpa menyadari bahwa setiap bit baru di ISA diberi label "simpan selamanya". Dan ada beberapa ribu "pencipta" seperti saya di Intel. Dan bit untuk menyandikan semua fantasi mereka terus-menerus kurang. :) Semua awalan baru ditambahkan ke set perintah yang ada: REX, VEX ... Ekstensi empat byte (EVEX) terakhir diperkenalkan untuk AVX-512. By the way, seluruh rangkaian perintah ARM (bahkan dengan mempertimbangkan SVE ) dihapus dalam 4 byte yang sama. ARM awalnya bergerak ke arah sebaliknya, membangun sistem komandonya berdasarkan prinsip-prinsip dasar kesederhanaan, kekompakan dan ekstensibilitas.

Perbedaannya bisa dipahami jika kita beralih dari sudut pandang programmer ke sudut pandang perancang sirkuit. Dan diketahui bahwa transistor adalah hal yang hebat, tetapi ia beralih secara perlahan dan menghilangkan energi tanpa malu-malu. Dan hal-hal lain dianggap sama, akan lebih baik jika jumlahnya lebih sedikit. Sekarang, lihat algoritma decoding untuk instruksi x86 (masalah yang saya coba selesaikan).

gambar

Dan seperti yang mereka katakan, rasakan perbedaan dalam jalur input (ujung depan) untuk ARM dan X86. Di sini dapat diperdebatkan bahwa front end adalah bagian yang sangat kecil dari kernel, hanya sekitar 10%. Ya, tapi jangan lupa bahwa semua logika ini dikalikan dengan jumlah core pada chip. Dan ini serius.

Pertimbangan lain adalah bahwa ujung depan hanyalah bagian yang bertanggung jawab atas kompatibilitas ke belakang. Anda dapat dengan aman menyekop atau bahkan membuang ujungnya. Intel, mengambil keuntungan dari hal ini di awal tahun 2000, menggantikan arsitektur NetBurst (P4) dengan Core-M (P3). Tetapi ujung depan tidak dapat sangat dikurangi. Meskipun kadang-kadang saya benar-benar ingin, karena ISA X86 yang ada, sekitar 20% sekarang digunakan. Sisanya adalah sisa-sisa masa lalu.

Kerugian lain dari panjangnya instruksi adalah relatif seringnya kesalahan dalam cache instruksi. Secara kasar, dengan ukuran cache yang sama, jumlah kesalahan akan semakin besar, semakin besar panjang instruksi. Tentu saja, ukuran cache dapat ditingkatkan. Tetapi sekali lagi, ini adalah transistor yang mungkin tidak ada jika instruksinya lebih pendek. Untuk alasan yang sama, saya sangat waspada terhadap berbagai jenis arsitektur VLIW (Very Long Instruction World). Namun, mereka juga memiliki kelemahan yaitu sangat sulit bagi mereka untuk mengembangkan kompiler. Sampai sekarang, saya sengaja menghindari topik penyusun, karena saya tidak pernah mengembangkannya sendiri. Saya ingin mendengarkan apa yang orang-orang berpengetahuan akan katakan tentang kesenangan mengembangkan kompiler untuk RISC, CISC dan VLIW.

Namun, meskipun akumulasi banyak warisan, dan mungkin berkat dia, para pengembang X86 tepat di utama. Prinsip kompatibilitas ke belakang telah dipatuhi dalam arsitektur sejak awal. Semua perangkat lunak yang ada berfungsi pada perangkat keras baru di luar kotak. Inilah yang memungkinkan untuk membangun ekosistem yang begitu dalam dan berkembang di sekitar arsitektur. Dan itu tetap hanya untuk melepas topi di depan Intel dan insinyur AMD, yang, meskipun desain ISA tidak sama sekali sempurna, telah mempertahankan kepemimpinan di segmen server selama bertahun-tahun. Namun, beban warisan semakin sulit.

All Articles