Tuesday, 26 September 2017

Example of Pipeline Implementation

Intel 80486

Prosesor Intel 80486 memiliki pipeline dengan 5 tahap, antara lain adalah sebagai berikut :
  • Fetch
o   Dari cache atau memori eksternal
o   Memakai salah satu dari dua prefetch buffer yang masing-masing berukuran 16 byte
o   Mengisi buffer dengan data baru seketika setelah data lama selesai digunakan
o   Rata-rata dapat mengambil 5 instruksi untuk sekali operasi
o   Bersifat independen dari tahap lain supaya  buffer dapat tetap penuh
  •  Decode stage 1 (D1)
o   Informasi opcode dan mode pengalamatan memori
o   Paling banyak mengambil 3 byte pertama dari sebuah instruksi
o   Mendelegasikan kepada Decode stage 2 untuk mengambil sisa instruksi
  • Decode stage 2 (D1)
o   Mengembangkan opcode menjadi sinyal kontrol
o   Perhitungan untuk mode pengalamatan yang kompleks
  •  Execute (EX)
o   Operasi ALU, akses cache, update register
  • Writeback (WB)
o   Update register dan flag
o   Hasilnya dikirim ke write buffer untuk cache dan bus interface


Berikut adalah beberapa contoh instruksi dan eksekusinya pada pipeline.
Pipeline without Delay for Load


Pipeline with Delay for Pointer

Intel Xeon

Pada keluarga processor Intel Xeon, Intel memperkenalkan sebuah teknologi baru untuk meningkatkan performa processor yang disebut Hyper-Threading. Hyper-Threading mengutilisasi thread-level parallelism di mana sebuah processor dapat menjalankan 2 buah thread secara simultan tanpa switching (simultaneous threading).
Adanya pendekatan thread-level parallelism pada Intel Xeon berpengaruh bagaimana pipelining pada physical processor Intel Xeon dilakukan. Berikut merupakan penjabaran bagaimana pipelining pada Intel Xeon dilakukan.
Pipelining in Intel Xeon
Secara umum, proses pipelining dibagi menjadi 2 (dua) bagian yakni Front-End dan Out-of-order Execution. Berikut tahap yang terlibat pada Front-End.

Fetch
Di tahap ini instruksi diambil dari sumbernya. Sumber utama instruksi adalah L1 cache, atau dalam proses pipelining ini disebut sebagai Execution Trace Cache (TC). Instruksi yang disimpan pada TC berupa microcode (uops). TC memiliki kemampuan untuk memanggil Microcode ROM yang berisi sekumpulan rangkaian uops yang merupakan breakdown dari instruksi yang lebih kompleks. Ketika akses L1 miss, maka pengambilan instruksi harus dilakukan ke L2 cache. Semua instruksi yang sudah berada di dalam TC nantinya akan dimasukkan ke dalam uops queue untuk menunggu di proses di Out-of-order Engine.
Fetch

Decode
Ketika akses instruksi harus menuju L2, maka perlu dilakukan decoding terlebih dahulu sebelum instruksi pada L2 bisa disimpan ke TC sebagai uops. Setelah selesai di-decode, uops yang sudah ada akan disimpan ke dalam TC. Di sini instruksi di breakdown, dilakukan prediksi untuk branch, disimpan ke dalam TC, dan di forward ke uop queue
Decode
Setelah uops berada di dalam queue, Out-of-order Engine akan mengambil uops yang masuk seketika uops siap untuk dieksekusi, tanpa memedulikan urutan eksekusi dari program aslinya.
Berikut tahap-tahap yang terjadi pada Out-of-order Engine
1.       Allocator dan Register Rename
Pada tahap ini uop yang masuk ke dalam engine akan dialokasikan ke dalam key machine buffer, yang selanjutnya akan direname alamat buffer nya menjadi alamat memory fisik. Setelah uop selesai dialokasi dan diubah alamatnya, mereka akan dimasukkan ke dalam queue yang berbeda tergantung tipe operasinya. Queue pertama untuk operasi memory, queue lainnya untuk operasi non-memory.
2.       Schedulling
Pada tahap ini uop yang sudah berada di dalam queue dischedule ke exection unit yang tersedia. Schedulling dari masing-masing uop bergantung dari ketersediaan input dari uop serta ketersediaan sumber daya exection unit.
3.       Exection
Di sini uop dieksekusi oleh unit yang ada dengan memanfaatkan alamat fisik yang sudah diberikan serta input yang telah tersedia. Di sini juga hasil dari eksekusi disimpan ke dalam register file serta dimungkinkan untuk melakukan forward result.
4.       Retirement
Pada tahap ini uop dikembalikan berdasarkan urutan eksekusi program aslinya. Data dari uop yang sudah selesai diistirahatkan dikembalikan lagi ke L1 cache
Retirement


AMD Athlon x86

Jumlah Stage Pipeline:
  •          10 untuk Integer Pipeline
  •          15 untuk Floating Point Pipeline

Pipeline in AMD Athlon x86

Penanganan Branch:
  •           2048 branching address untuk branch target buffer (BTB)
  •          4096 branching address untuk branch history table (BHT)
  •           Kesuksesan prediksi branch 95%
  •           Penalti dari kesalahan prediksi: 9 cycles.


No comments:

Post a Comment