Memahami Arsitektur CPU Modern dari Mikroarsitektur

 

Memahami Arsitektur CPU Modern dari Mikroarsitektur

Pada artikel terakhir, kita berbicara tentang arsitektur CPU modern. Kami membahas apa itu CPU, sejarah singkat CPU, menjelaskan konsep lapisan abstraksi komputasi, dan struktur set instruksi. ISA adalah apa yang biasanya kita sebut sebagai arsitektur CPU. Hari ini kita akan menyelami apa yang terdiri dari mikroarsitektur CPU. Dengan kata lain, bagaimana tepatnya standar ISA diterapkan, apa blok bangunannya dan bagaimana cara kerjanya. Ini adalah penjelasan mendalam.

Blok pembangun dasar ISA untuk CPU

Mikroarsitektur merupakan implementasi dari arsitektur set instruksi. Mikroarsitektur beroperasi pada siklus empat langkah:

  • Langkah pertama “fetch” adalah mengekstrak informasi dari memori sehingga CPU tahu persis apa yang ingin dilakukan program.
  • Langkah selanjutnya dari “decoding” mengharuskan informasi dipecah menjadi bit bit data (operasi asli). Pada titik ini, beberapa proses internal dibuat sebagai hasil dari pembagian fragmen instruksi.
  • Setelah instruksi didekodekan, CPU perlu menjalankannya, dan ini membawa kita ke langkah berikutnya “Eksekusi”. Ada banyak jenis implementasi, seperti aritmatika (menambahkan, mengalikan, membagi, dll.), Operasi logika (AND, NOT, OR, XOR dll.), membandingkan data, dan kemudian memutuskan ke mana Anda ingin pergi selanjutnya Dalam kode, proses seperti itu dikenal sebagai ‘cabang’ karena dapat mengarahkan kode ke tempat yang berbeda. Fase eksekusi CPU bervariasi tergantung pada ISA, karena banyak CPU dengan standar ISA yang lebih kompleks dapat melakukan lebih banyak operasi.
  • Terakhir, CPU menyimpan hasilnya, dan terkadang hasil tersebut disimpan secara lokal di register, atau memori, ini dikenal sebagai langkah penulisan ulang.

Proses-proses ini merupakan blok bangunan dasar dari CPU, ketika dikelompokkan bersama mereka disebut sebagai “pipa” dari CPU.

Kedalaman Pipa

Sekarang setelah kami menjelaskan seperti apa saluran pipa, seperti apa mikroprosesor modern? Selama bertahun-tahun jumlah rata-rata tahap pipa telah tumbuh. Pipa mirip dengan jalur perakitan. Semakin banyak tahap yang ditambahkan, semakin sedikit yang dilakukan di setiap tahap individu. Semakin banyak tahapan dalam saluran Anda, semakin cepat setiap tahapan dapat berjalan dan semakin banyak tahapan yang dieksekusi secara paralel. Sebuah mikroprosesor modern memiliki sekitar 15-20 tahap.

Siklus fetch dan decode biasanya terdiri dari 6 hingga 10 fase, dan ini secara kolektif disebut ujung depan mikroprosesor. Proses implementasi dan penulisannya juga telah berkembang kira-kira menjadi 6 sampai 10 tahap. Backend ini disebut mikroprosesor. Pipeline CPU bersifat sinkron, artinya setiap pipeline dikendalikan oleh sinyal clock, dan setiap data berpindah dari satu tahap pipeline ke tahap berikutnya saat clock CPU menyelesaikan satu siklus. Jumlah fase sebagian menentukan frekuensi puncak CPU. CPU modern dapat beroperasi hingga 5GHz, dan jumlah logika dalam fase ini menentukan seberapa cepat fase, atau jam, dapat berjalan. Jika CPU berjalan pada 5GHz, ini berarti bahwa setiap fase harus berjalan dan selesai dalam 5 miliar detik.

Trending :   AI- Kecerdasan Buatan Untuk Analisis Data Bisnis. Apakah Mungkin?

Spekulasi

Jika Anda ingat pipa dasar yang dijelaskan di atas, pada awalnya kami mengambil instruksi dan pada akhirnya, kami menjalankan instruksi tersebut.

Beberapa dari instruksi ini dikenal sebagai cabang. Ini mewakili titik keputusan atau persimpangan di jalan seperti pintu keluar di jalan raya. Apakah kita ingin melanjutkan atau keluar sekarang dan mengambil jalan yang berbeda? Ketika sebuah cabang dieksekusi, Anda membuat keputusan itu. Seiring pertumbuhan pipa, Anda akan semakin jauh dari jawaban ke jalan mana yang harus Anda ambil.

Ketika cabang meminta untuk mengambil jalur yang berbeda, kita perlu memberi tahu awal pipa untuk mengarahkan ulang ke instruksi yang berbeda. Pekerjaan yang sedang berlangsung telah dibuang. Ini buruk untuk kinerja dan juga daya, karena kami menghabiskan waktu untuk mengeksekusi instruksi yang tidak diperlukan untuk menjalankan program. Kita dapat menghindari spekulasi hanya dengan berhenti setiap kali kita melihat cabang dan hanya menunggu untuk dieksekusi dan memberi tahu kita jalur mana yang harus diikuti dalam kode. Ini akan aman tetapi akan sangat lambat. Namun, ada banyak cabang di sebagian besar kode, yang berarti banyak waktu dihabiskan untuk menunggu.

Seiring bertambahnya panjang pipa, hukuman untuk menebak kesalahan meningkat. Fetch menjadi jauh dari eksekusi, yang berarti perlu beberapa tahap untuk menyadari bahwa kita mengeksekusi di jalur yang salah. Untuk mengatasi hal ini, mikroprosesor berinvestasi besar-besaran dalam desain untuk membuat prediksi yang akurat di awal pipeline. Kami menyebutnya seni prediksi cabang.

Ketika kami melihat bahwa kami mengambil jalan yang salah, kami dapat memperbarui atau meningkatkan prediksi tentang jalan yang benar itu. Kemudian lain kali kita melihat alamat itu, prediktor cabang dapat memberitahu kita untuk pergi ke alamat yang berbeda. Arsitektur CPU modern sering memprediksi cabang dengan akurasi hampir sempurna yang membuatnya tampak hampir waskita.

Ketika mikroprosesor mengeksekusi instruksi yang lebih baru dari cabang tanpa mengetahui apakah cabang itu diambil atau tidak, itu disebut sebagai eksekusi spekulatif.

Front End: Predict and Fetch

Prediktor cabang telah menjadi sangat canggih untuk meningkatkan akurasinya sambil tetap dapat mengarahkan pengambilan instruksi pada frekuensi tinggi. Peramal cabang hari ini sering dapat merekam, memahami, dan mempelajari sejarah masa lalu dari ratusan dan ribuan cabang sebelum mereka untuk membuat perkiraan tunggal untuk cabang berikutnya dan ke mana arahnya. Pengembangan prediktor cabang modern benar-benar sedikit awal jika seseorang dapat berpikir dalam hal AI, dalam hal belajar dari perilaku masa lalu dan bagaimana masa depan akan berperilaku. Mereka sangat akurat, mereka sekarang bertanggung jawab untuk memutuskan alamat mana yang akan diambil selanjutnya, bahkan jika akhirnya memprediksi “tetap tenang dan terus berjalan”.

Trending :   Tren Teknologi Terbaru Dalam Industri Smartphone

Sekarang frekuensi CPU telah meningkat lebih cepat daripada kecepatan memori, yang berarti diperlukan waktu lebih lama untuk mengambil data dari memori, dan untuk membantu mengimbangi waktu perjalanan yang lama ke memori utama dan kembali, kami menyimpan salinan lokal dari memori utama secara internal dalam struktur yang dikenal sebagai cache. Ujung depan memiliki cache instruksi sehingga hanya dapat membaca instruksi dalam satu atau dua siklus, bukan ratusan yang diperlukan untuk mengakses memori utama. Untuk meningkatkan daya dan kinerja, beberapa instruksi yang berdekatan diambil pada saat yang sama, yang kemudian dikirimkan ke dekoder. Jika cache instruksi tidak berisi data, data akan diminta dari subsistem memori. Tujuan utama dari front-end dari pipeline adalah untuk memastikan bahwa selalu ada instruksi yang cukup untuk mengeksekusi back-end dan untuk menghindari waktu idle yang dihabiskan untuk menunggu byte instruksi dari memori.

Front End: decode

Bagian kedua dari ujung depan adalah tempat instruksi program diterjemahkan ke dalam proses internal arsitektur mikro yang disebut mikroproses. Ini adalah koneksi terkuat antara ISA dan mikroarsitektur. Instruksi ISA sering menyertakan potongan data tambahan yang memberi CPU lebih banyak informasi yang relevan dengan proses, yang digunakan CPU untuk memecahkan kode instruksi dan mengeksekusi instruksi secara efisien sesuai dengan struktur mikronya. Struktur mikro biasanya dibangun sehingga sebagian besar instruksi diatur secara langsung dalam satu operasi kecil, tetapi tidak semuanya. Ini membantu kami menyederhanakan backend dari pipeline.

Namun, seringkali ada beberapa instruksi yang lebih kompleks dan mungkin memerlukan pembuatan beberapa proses kecil. Bagian depan selalu mencari cara untuk memecahkan kode instruksi ini dan mempersiapkannya untuk dieksekusi secara efisien. Beberapa arsitektur mikro mendekripsi cache dan menyimpan proses kecil ini untuk waktu berikutnya Anda perlu mendekripsinya. Ini menghemat daya yang dibutuhkan untuk memecahkan kode dan meningkatkan kinerja ketika ekspansi adalah salah satu dari banyak ekspansi umum. Setelah instruksi didekodekan atau dibaca dari cache decoding, instruksi tersebut kemudian diteruskan ke backend pipeline.

TRENDING

ARTIKEL TERBARU