Overview Supersclalar Architecture (SSA)
Superscalar
Architecture (SSA) yang biasa dikenal dengan
arsitektur superskalar merupakan arsitektur dari suatu komputer (processor)
yang memungkinkan eksekusi dilakukan secara bersamaan (paralel) dalam satu
siklus dengan memanfaatkan teknik pipelining. Hal ini menjadikan setiap pipleine terdiri dari beberapa stage,
sehingga setiap pipeline dapat menangani beberapa insruksi dalam satu waktu.
Dalam hal ini, sebuah processor superscalar memanfaatkan apa yang dikenal dengan instruction level parallelism,
yang mengacu pada sejauh mana instruksi dari sebuah program dapat dieksekusi
secara paralel. Arsitektur superskalar diperlukan untuk meningkatkan kinerja
eksekusi dari suatu instruksi yang bersifat skalar. Maksud dari instruksi yang
bersifat skalar adalah perintah/ instruksi tersebut dapat dieksekusi dengan
menggunakan variabel yang sederhana, seperti variabel integer (bilangan bulat,
bilangan yang tidak memiliki pecahan). Disisi lain, beberapa CPU juga memiliki
kemampuan untuk mengolah data bertipe floating point (bilangan berkoma).
Teknik superscalar terkait dengan mengidentifikasi beberapa karakteristik :
ñ Instruksi yang dikeluarkan dari aliran instruksi berurutan.
ñ Processor memeriksa secara dinamik dependensi data antara instruksi
saat berjalan.
ñ Processor menerima beberapa instruksi per clock cycle.
Berikut
ini adalah gambaran dari arsitektur superscalar :
Superscalar Architecture
Dalam klasifikasi Flynn, sebuah superscalar
single core diklasifikasikan sebagai SISD (Single Instruction Single
Data) sedangkan dalam sebuah superscalar multi core diklasifikasikan sebagai MIMD (Multiple
Instruction Multiple Data).
Sebuah processor yang berjalan dengan superscalar akan
menjalankan dua instruksi secara bersamaan dalam satu stage pipeline. Sehingga
bila digambarkan dengan gambar, maka akan terlihat seperti berikut.
Simple superscalar pipeline
Gambar tersebut menjelaskan bahwa
dua instruksi dapat berjalan dalam satu waktu, instruksi ini meliputi IF (Instruction
Fetch), ID(Instruction Decode), EX(Execute), MEM(Memory
Access) dan WB(Register Write Back),
dua instruksi dapat diselesaikan dalam satu clock cycle.
Sejarah Superscalar
Architecture
Sejarah arsitektur superskalar yang pertama yakni adanya
Seymour Cray CDC 6600 pada tahun 1965 yang sering disebut sebagai desain
superscalar yang pertama. Lalu pada tahun 1988 Intel mengeluarkan Intel i960CA
dan AMD memproduksi AMD 29000-series 29050 pada tahun 1990 membuat sejarah
dengan memproduksi microprocessor yang komersial. Selanjutnya pada tahun 1998
Intel melalui P5 Pentium mengeluarkan sebuah processor arsitektur superscalar
yang pertama pada processor seri x86. Disisi lain Nx586, p6 Pentium Pro dan AMD
K5 termasuk diantara processor dengan mengubah instruksi pada x86 menjadi
instruksi microcode yang dinamis seperti urutan operasi mikro sebelum eksekusi
aktual pada mikroarsitektur superscalar.
SUPERSCALAR VERSUS SUPERPIPELINED
Superscalar sebuah uniprocessor
yang dapat mengeksekusi dua atau lebih operasi scalar dalam bentuk paralel. Superpipeline
cara yang diguakan untuk melakukan sejumlah kerja secara bersamaan tetapi dalam
tahap yang berbeda yang dialirkan secara kontinu pada unit pemrosesan, dengan cara ini unit
pemrosesan selalu berkerja.
Super-pipelined Execution
Super-pipelined Execution
Super-Scalar Execution
Super-Scalar
Execution
Perbandingan
Eksekusi Instruksi Antara Superscalar dan Superpipeline
DESIGN ISSUES
Ada beberapa isu yang dapat dibahas
dalam Superscalar Architecture ini, beberapa isu tersebut diantaranya :
Instruction Level Parallelism dan Machine Parallelism
Instruction Level Parallelism dapat
dilakukan ketika instruksi yang berjalan tidak bergantung pada eksekusi yang
lain, sehingga dapat berjalan secara paralel dengan tumpang tindih. Tingkat level paralelisme dari suatu instruksi bergantung kepada
frekuensi dari dependensi data dan dependensi suatu prosedur dalam kode
program. Faktor ini bergantung pada arsitektur instruksi tersebut dan
bergantung pada aplikasinya. Sehingga instruction level parallelism juga
dipengaruhi dari latensi suatu operasi, yakni waktu yang diperlukan untuk
mengeksekusi suatu instruksi yang tersisa untuk instruksi selanjutnya. Latensi
ditentukan dari berapa lama delay yang disebabkan karena dependensi suatu data
atau prosedur.
|
Gambaran Instruction Level
Parallelism
Gambaran sebelah kiri merupakan penggambaran analogi
instruksi yang dapat dijalankan secara paralel. Sedangkan pada gambaran sebelah
kanan instruksi tidak berjalan independen, karena ada instruksi yang
berhubungan dengan instruksi yang lainnya.
Machine Paralelism adalah ukuran dari kemampuan processor
untuk mengambil keuntungan dari adanya instruksi yang dijalankan secara parallel.
Sehingga machine paralelism ditentukan oleh jumlah instruksi yang dapat diambil
(fetch) dan dijalankan pada waktu yang sama (banyaknya pipeline yang paralel)
dan kecepatan serta kecanggihan suatu prosesor untuk menemukan instruksi yang
independen.
Instruction Issue Policy
Secara umum instruction issue policy dikelompokan ke
dalam 3 kategori:
- In-order issue
with in-order completion (IOI with IOC)
- In-order issue
with out-of-order completion (IOI with OOC)
- Out-of-order
issue with out-of-order completion (OOC with OOC)
In-Order
Issue With In-Order Completion
Instruction issue policy paling sederhana, yakni dengan mengeksekusi
instruksi secara sekuen (in-order issue)
dan menuliskannya dalam order yang sama (in-order
completion).
Decode
|
|
Execute
|
|
Write
|
|
Cycle
|
||||
I1
|
I2
|
|
|
|
|
|
|
|
|
1
|
I3
|
I4
|
|
I1
|
I2
|
|
|
|
|
|
2
|
I3
|
I4
|
|
I1
|
|
|
|
I1
|
I2
|
|
3
|
|
I4
|
|
|
|
I3
|
|
|
|
|
4
|
I5
|
I6
|
|
|
|
I4
|
|
|
|
|
5
|
|
I6
|
|
|
I5
|
|
|
I3
|
I4
|
|
6
|
|
|
|
|
I6
|
|
|
|
|
|
7
|
|
|
|
|
|
|
|
I5
|
I6
|
|
8
|
In-order
issue with in-order completion
Pada
gambar diatas, diberikan contoh
In-order issue with in-order completion, dengan asumsi bahwa superscalar pipeline dapat melakukan
fetch dan decode 2 buah instruksi dalam satu waktu, memiliki 3 functional unit
terpisah (misal: 2 integer aritmatika, dan 1 floating-point aritmatika), dan
memiliki 2 instance write-back (WB) pipeline stage. Contoh di atas diasumsikan
harus melakukan 6 instruksi di bawah ini:
1. I1 membutuhkan 2
cycle untuk eksekusi
2. I3 dan I4 konflik untuk
unit fungsi yang sama
3. I5 bergantung pada
nilai yang dihasilkan oleh I4
4. I5 dan I6 konflik untuk
sebuah unit fungsi
Fetch instruksi
dengan berpasangan dan diteruskan untuk dilakukan decode. Dikarenakan fetching
nya dilakukan berpasangan, maka 2 instruksi berikutnya harus mengunggu sampai 2
pasangan yang sedang di decode pada pipeline stage kosong. Untuk meyakinkan
in-order completion adalah dengan terjadinya konfilk pada unit fungsi yang sama
atau ketika unit fungsi membutuhkan lebih dari 1 cycle untuk mejenerate sebuah
hasil.
Pada contoh di atas waktu
yang dibutuhkan dimulai dari decode instruksi
pertama sampai hasil akhir adalah 8 cycles.
In-Order
Issue With Out-Of-Order Completion
Out-of-order
completion digunakan dalam prosesor RISC scalar untuk memperbaiki kinerja pada
instruksi yang membutuhkan multiple cycle. Gambar 4 mengilustrasikan penggunaan
IOI with IOC pada prosesor superscalar. Instruksi I2 diperbolehkan untuk
menjalankan sampai selesai sebelum I1. Hal ini memungkinkan I3 akan selesai sebelum
I2, dengan adanya penghematan satu cycle.
Dengan
out-of-order completion, sejumlah instruksi memungkinkan dalam stage eksekusi
pada waktu yang sama, sampai tingkat maksimum machine parallelism seluruh unit
fungsi. Issue instruksi terhenti oleh adanya konflik sumberdaya, kebergantungan
data, atau kebergantungan dependensi.
Di bawah
ini code fragment yang mengilustrasikan kebergantungan (op merepresentasikan operasi apapun).
I1: R3 ← R3 op R5
I2: R4 ← R3 + 1
I3: R3 ← R5 + 1
I4: R7 ← R3 op R4
|
Instruksi I2 tidak dapat dieksekusi sebelum
instruksi I1, karena instruksi I2 membutuhkan nilai yang dihasilkan oleh R3
(pada instruksi I1).
I4 harus menunggu sampai I3 selesai dieksekusi,
karena membutuhkan nilai yang dihasilkan oleh instruksi I3.
|
Apakah I1 dan I3 memiliki relasi ? Dalam hal ini,
tidak ada kebergantungan data antara I1 dan I3. Jika I3 selesai sebelum I1,
maka kesalahan nilai yang dihasilkan oleh I3 akan di fetch pada eksekusi
instruksi I4. Maka dari itu, jika I3 selesai sebelum I1, maka I3 harus
menghasilkan nilai yang benar (Untuk meyakinkan hal ini, instruksi ketiga
harus dihentikan, sehingga instruksi I1 selesai dan menimpa nilai I3 oleh
nilai I1 – yang membutuhkan waktu lama untuk sampai selesai)
|
Decode
|
|
Execute
|
|
Write
|
|
Cycle
|
||||
I1
|
I2
|
|
|
|
|
|
|
|
|
1
|
I3
|
I4
|
|
I1
|
I2
|
|
|
|
|
|
2
|
|
I4
|
|
I1
|
|
I3
|
|
I2
|
|
|
3
|
I5
|
I6
|
|
|
|
I4
|
|
I1
|
I3
|
|
4
|
|
I6
|
|
|
I5
|
|
|
I4
|
|
|
5
|
|
|
|
|
I6
|
|
|
I5
|
|
|
6
|
|
|
|
|
|
|
|
I6
|
|
|
7
|
In-order
issue with out-of-order completion
Out-Of-Order
Issue With Out-Of-Order Completion
Kelemahan dari IOI yakni prosesor
hanya akan men-decode instruksi sampai titik dependensi atau konflik (tidak
adanya tambahan instruksi decode sampai konflik teratasi) yang akibatnya
prosesor tidak bisa melihat instruksi lain yang independent (bisa di proses).
Untuk
menutupi kekurangan di atas, maka OOI memisahkan antara decode dan eksekusi
instruksi, dikenal dengan konsep instruction
window. Dengan konsep/organisasi ini, setelah prosesor selesai melakukan instruksi
decode, instruksi ditempatkan di instruction
window, selama buffer (instruction
window) tidak penuh, prosesor dapat terus fetch dan decode instruksi baru.
Instruksi-instruksi yang ada di buffer (instruction
window) akan di eksekusi ketika
unit fungsi di pipa stage available.
Decode
|
|
Window
|
|
Execute
|
|
Write
|
|
Cycle
|
||||
I1
|
I2
|
|
|
|
|
|
|
|
|
|
|
1
|
I3
|
I4
|
|
I1, I2
|
|
I1
|
I2
|
|
|
|
|
|
2
|
I5
|
I6
|
|
I3,I4
|
|
I1
|
|
I3
|
|
I2
|
|
|
3
|
|
|
|
I4, I5, I6
|
|
|
I6
|
I4
|
|
I1
|
I3
|
|
4
|
|
|
|
I5
|
|
|
I5
|
|
|
I4
|
I6
|
|
5
|
|
|
|
|
|
|
|
|
|
I5
|
|
|
6
|
Out-of-order
issue with out-of--order completion
Pada
gambar di atas
mengilustrasikan bahwa untuk setiap masing-masing 3 cycle pertama, 2 instruksi
di fetch dan di decode dalam stage. Pada setiap cycle, 2 instruksi bergerak
dari decode ke buffer (instruction window).
Dalam contoh ini memungkinkan untuk mengeluarkan I6 dulu dibandingkan I5 (Ingat
bahwa I5 bergantung dari I4, tapi tidak untuk I6). Dengan demikian satu cycle
menyimpan ke execute dan write-back stages.
Register Renaming
Dengan adanya konsep OOI with OOC
akan memungkinkan adanya dependensi WAW (Write After Write) dan WAR (Write
After Read). Dependensi ini muncul akibat dari nilai di register yang mungkin
tidak lagi mencerminkan urutan nilai yang ditentukan oleh aliran program.
Register renaming menjadi salah satu
metode untuk mengatasi konflik duplikasi sumber daya, dimana register
dialokasikan dinamis oleh hardware prosesor, dan register berhubungan dengan
nilai-nilai yang dibutuhkan oleh isntruksi.
Machine Parallelism
Pada teori sebelumnya terdapat 3
teknik hardware yang dapat digunakan dalam upaya meningkatkan kinerja prosesor
superscalar, yakni: duplikasi sumber daya, OOI, dan renaming. Salah satu studi
yang memaparkan mengenai hubungan antara teknik-teknik hardware di atas telah
dilaporkan dalam [SMIT89]. Studi ini memanfaatkan pemodelan sebuah mesin dengan
karakteristik R2K MIPS.
Kecepatan berbagai
jenis organisasi mesin tanpa Procedural Dependencies
Gambar di atas menunjukan bahwa dengan menggunakan
procedural dependencies akan meningkatkan kinerja prosesor scalar. Sumbu Y
mewakili kecepatan mesin superscalar, sumbu X mewakili 4 alternatif organisasi
prosesor. Untuk konfigurasi mesin pertama (base) tidak ada duplikasi pada unit
fungsi, konfigurasi mesin kedua (+ld/st) dilakukan duplikasi load/store unit
fungsi, konfigurasi mesin ketiga (+alu) dilakukan duplikasi ALU, dan
konfigurasi keempat (+both) dilakukan duplikasi load/store dan ALU. Untuk
masing-masing grafik hasil dari instruction
window berukuran 8, 16, 32 instruksi.
Dari
kedua grafik di atas dapat disimpulkan
sebagai berikut: untuk grafik tanpa adanya register
renaming ada sedikit perbaikan kinerja, akan tetapi cost tinggi. Untuk grafik sebelah kiri dengan register renaming adanya peningkatan kinerja yang signifikan bila
dibandingkan dengan tanpa menggunakan teknik register renaming.
Branch Prediction
Mesin
pipeline berkinerja tinggi apapun selalu ada issue dengan branch. Akan tetapi
dengan adanya teknologi superscalar masalah branch sedikit teratasi. Alasannya
adalah instruksi ganda pada saat eksekusi membutuhkan slot delay, dan
superscalar memiliki teknik branch
prediction. Contoh prosesor scalar yang menggunakan branch prediction:
PowerPC601 (static branch prediction), PowerPC620 dan Pentium4 (dynamic branch prediction yang mengacu
pada analisa branch history).
Superscalar Execution
Pada gambar di bawah ini
mengilustrasikan sebuah program yang akan dieksekusi terdiri dari
instruksi-instruksi linier yang berurutan. Program ini termasuk static program
yang dibuat oleh programmer atau degenerate oleh compiler. Proses pertama
melakukan fetch terhadap beberap instruksi (termasuk di dalamnya branch
prediction – khusus untuk bentuk instruksi dinamis). Proses berikutnya,
prosesor mengirimkan instruksi-instruksi yang di fetch ke window of execution. Dalam fase
ini instruksi tidak lagi dalam bentuk sekuensial, akan tetapi bentuk instruksi
sdh disesuaikan dengan data dependensi yang benar. Hal ini dilakukan untuk
memudahkan prosesor melakukan kinerja. Yang pada akhirnya instruksi-instruksi
tadi dikembalikan ke dalam bentuk sekuensial dan hasilnya dicatat.
Proses superscalar
secara konsep
Langkah
terakhir commiting atau retiring, hal ini diperlukan dikarenakan
alas an-alasan berikut ini: karena menggunakan konsep parallel, multiple
pipeline, memungkinkan instruksi selesai dalam urutan yang berbeda. Dan
penggunaan branch prediction dan speculative execution yang berarti bahwa
beberapa instruksi dapat menyelesaikan eksekusi dan kemudian harus ditinggalkan
dikarenakan branch yang diwakili tidak diambil. Oleh karena itu penyimpanan
permanen dan program-visible register tidak dapat diperbarui seketika. Hasil
harus disimpan di beberapa penyimpanan sementara yang digunakan oleh instruksi
lalu dibuat permanen ketika telah ditentukan bahwa model sekuensial akan
mengeksekusi intruksi.
Superscalar Implementation
Pendekatan konsep superscalar pada
prosesor adalah diperlukan, berikut key elements yang berlaku:
- Instruction fetch, digunakan
untuk mengambil beberapa instruksi. Unit fungsi ini membutuhkan penggunaan
multiple pipeline untuk fetch dan decode stage, dan logika
branch prediction.
- Logic, digunakan untuk kebenaran dependensi
yang melibatkan nilai-nilai register dan mekanisme untuk mengkomunikasikan
nilai-nilai tersebut harus dikasih kemana selama eksekusi berlangsung.
- Mekanisme dalam
konsep parallel yakni initiating,
issuing, multiple instruction.
- Sumber daya,
untuk eksekusi parallel dari instruksi ganda (termasuk juga unit fungsi
pipeline ganda dan hirarki memori) yang mampu secara simultan melayani dalam
memberikan petunjuk memori ganda.
- Mekanisme untuk committing process state dalam
urutan yang benar.
SUPERSCALAR PROCESSOR
Pentium 4
Berikut ini merupakan block diagram dari Pentium 4, diagram
tersebut yang akan menggambarkan operasi yang berjalan pada prosesor tersebut.
Pentium 4 Block Diagram
Apabila disimpulkan maka
operasi yang berjalan pada Pentium 4, menjadi seperti berikut :
- Mengambil instruksi ke dalam
memori dari program
- Menerjemahkan instruksi menjadi
satu atau lebih instruksi RISC
- Mengekseksusi micro-ops pada superscalar pipeline
- Menyimpan hasil dari micro-ops ke register
- Di luar CISC
shell di bagian dalam RISC core
- Bagian dalam RISC core
terdapat pipeline yang terdiri
minimal 20 stage
Berikut ini adalah
pipeline yang berjalan pada prosesor Pentium 4. Instruksi pada pipeline
tersebut digambarkan pula pada operasi pipeline yang digambarkan pada gambar
selanjutnya.
Pentium 4 Pipeline dan Pentium 4
Pipeline Operation
ARM Cortex A8
Prosesor ARM merupakan salah satu
prosesor yang mengimplementasikan teknik superscalar dalam instruksi
pipelinenya. ARM Cortex A8 merupakan salah satu contoh desain superscalar
prosesor dengan mengimplementasikan RISC (Reduced Instruction Set Computer).
Berikut ini adalah beberapa informasi lainnya mengenai prosesor ARM Cortex A8.
- ARM mengacu ke Cortex-A8 sebagai
prosesor aplikasi
- Prosesor embedded yang menjalankan sistem operasi kompleks
- Wireless
- Mobile phones
- Terdiri dari 13 stage pipeline,
tetap menjaga daya yang diperlukan ke batas minimum
- Memisahkan SIMD (single-instruction-multiple-data)
unit, 10 stage pipeline
Berikut ini merupakan block diagram ARM Cortex yang ditunjukkan pada gambar dibawah ini :
ARM Cortex Block Diagram
Instruksi yang berjalan pada pipeline ARM
Cortex ini berlangsung dalam beberapa tahapan. Berikut ini adalah tahapan
instruksi tersebut :
1. Instruction
Fetch Unit
- Memprediksi aliran instruksi
- Mengambil instruksi dari cache instruksi L1
- Bisa sampai empat instruksi per cycle
- Menuju ke buffer untuk men-decode pipeline
- Mengambil unit dari cache
instruksi L1
- Menspekulasi pengambilan
instruksi
- Percabangan atau instruksi
pengecualian menyebabkan pembuangan data pipeline
- Stage:
- Generasi alamat F0 menghasilkan
alamat virtual
- Biasanya berikutnya berurutan
- Bisa juga sebagai alamat target
pencabangan
- F1 digunakan untuk mengambil
instruksi dari cache instruksi L1
- Secara paralel mengambil alamat
untuk mengakses array prediksi pencabangan
- Instruksi data F3 disimpan dalam
antrian instruksi
- Jika prediksi pencabangan,
alamat target baru dikirim ke alamat unit pembangkit
- Dua tingkat global history cabang prediktor
- Branch Target Buffer (BTB) dan
Global History Buffer (GHB)
- Mengembalikan tumpukan untuk
memprediksi alamat kembali dari subroutine
- Dapat mengambil dan mengantri
sampai 12 instruksi
- Isue dua instruksi pada satu
waktu
2. Instruction Decode Unit
- Menerjemahkan dan mengurutkan
semua instruksi
- Dual struktur pipeline, pipe0 dan pipe1
- Dua instruksi dapat berjalan
pada satu waktu
- Pipe0 berisi instruksi yang
lebih lama dari program order
- Jika instruksi pada pipe0 tidak
dapat diselesaikan maka pipe1 pun tidak bisa
- Pengerjaan instruksi berurutan
- Hasil ditulis kembali ke file register pada akhir eksekusi pipeline
Proses Fetch Decode pada ARM Cortex
A8 Integer Pipeline
3. Instruction Processing Stages
- Instruksi thumb D0 didekompresi dan dilakukan pen-decode pada awal
dikerjakan
- Instruksi D1 di-decode selesai
- Instruksi D2 ditulis dan dibaca
ulang pada antrian
- D3 terdiri dari instruksi logika
penjadwalan
- Pemeriksaan hazard
- D4 di akhir melakukan decode untuk mengontrol sinyal
untuk mengeksekusi integer pada unit pengisian/penyimpanan
4. Integer Execution Unit
- Dua simetris pipa ALU, generator
alamat untuk menyimpan dan mengisi instruksi
- Pipeline stage:
- E0 mengakses file register
- Bisa sampai enam register untuk dua instruksi
- Penggantian barrel E1 jika
dibutuhkan
- E2 fungsi ALU
- E3 jika dibutuhkan, melengkapi
aritmatika saturasi
- E4 mengubah kontrol aliran yang
diprioritaskan dan yang diproses
- E5 hasil ditulis kembali ke file register
5. Load/Store Pipeline
- Paralel ke pipeline integer
- E1 alamat memory dihasilkan dari
basis dan index register
- E2 alamat diterapkan pada array cache
- E3 mengisi, data dikembalikan
dan diformat
- E3 menyimpan, data telah
diformat dan siap ditulis ke dalam cache
- E4 memperbarui cache L2 jika diperlukan
- E5 hasil ditulis ke file register
Berikut ini adalah instruksi yang berjalan pada SIMD dan Floating-Point
Pipeline, sehingga disimpulkan
menjadi poin-poin sebagai berikut dan digambarkan pada gambar berikutnya.
- SIMD dan instruksi floating-point dapat
melewati integer pipeline
- Diproses terpisah pada 10-stage
pipeline
- NEON unit
- Menangani instruksi SIMD yang
dikemas
- Menyediakan dua tipe dari floating-point
Floating Point Pipeline
infonya sangat bermanfaat bagi ane
ReplyDeleteElemen solder uap
Pembahasan sangat detail, terima kasih ilmunya.
ReplyDelete