Rabu, 08 Juli 2009

Pipelining

Pipelining adalah suatu teknik instruksi yang digunakan dalam desain komputer dan perangkat elektronik digital lainnya untuk meningkatkan instruksi throughput (jumlah instruksi yang dapat dijalankan pada waktu yang sama).
contoh :



gambar diatas adalah generik pipa dengan 4 tahapan
1. Fetch
2. Membaca sandi
3. Menjalankan
4. Write-back
Abu-abu atas kotak daftar tunggu instruksi yang akan dilaksanakan; bagian bawah kotak abu-abu adalah daftar instruksi yang telah selesai, dan tengah kotak putih adalah pipa.
Pelaksanaan adalah sebagai berikut:
Waktu Eksekusi
=====================================================================================
0 Empat menunggu instruksi yang akan dilaksanakan
1 hijau instruksi yang diambil dari memori
2 hijau adalah instruksi decoded
ungu adalah instruksi yang diambil dari memori
3 hijau instruksi dijalankan (sebenarnya dilakukan operasi) ungu adalah instruksi
yang decoded biru instruksi yang diambil
4 hijau instruksi dari hasil ditulis kembali ke daftar file atau memori ungu
instruksi yang dijalankan biru adalah instruksi decoded merah instruksi yang
diambil
5 hijau instruksi selesai ungu instruksi yang ditulis kembali biru instruksi
dijalankan merah adalah instruksi decoded
6 The purple instruksi selesai biru instruksi yang ditulis kembali merah instruksi
dijalankan
7 biru instruksi selesai merah instruksi yang ditulis kembali
8 merah instruksi selesai
9 Semua instruksi dijalankan

=====================================================================================


Kekurangan pada Pipeline adalah dalam prakteknya, bagaimanapun, prosesor RISC beroperasi lebih dari satu siklus per instruksi. Prosesor mungkin mengumpulkan hasil dari data dependensi dan instruksi cabang.
data dependensi terjadi bila instruksi tergantung pada hasil dari instruksi sebelumnya. Instruksi tertentu mungkin perlu data dalam register yang belum disimpan, sejak itulah pekerjaan yang sebelumnya instruksi yang belum mencapai tahap yang akan di pipeline.

contoh:

add $r3, $r2, $r1
add $r5, $r4, $r3

Dalam contoh ini, instruksi pertama memberitahu prosesor untuk menambahkan isi register r1 dan r2 dan menyimpan hasilnya dalam register r3. Instruksi kedua untuk menambahkan r3 dan r4 dan simpan ke r5. Tempat ini kita set instruksi dalam pipeline. Ketika terjadi instruksi yang kedua itu adalah tahap kedua, prosesor akan mencoba untuk membaca r3 dan r4 dari register. Ingat, meskipun, yang pertama adalah instruksi hanya satu langkah di depan kedua, jadi isi r1 dan r2 sedang ditambahkan, tetapi hasilnya belum ditulis ke dalam daftar r3. Instruksi yang kedua itu tidak dapat dibaca dari register R3 karena belum ditulis dan belum harus menunggu hingga data yang diperlukan disimpan. Akibatnya, pipa yang stalled dan sejumlah kosong instruksi dikenal sebagai gelembung pergi ke dalam pipa. Data dependensi mempengaruhi Pipelines lebih panjang daripada yang singkat karena memerlukan waktu yang lebih lama untuk instruksi untuk mencapai akhir pendaftaran tahap-menulis pipa yang panjang.

MIPS solusi untuk masalah ini adalah kode reordering. Jika, seperti dalam contoh di atas, berikut ini ada petunjuk tidak ada hubungannya dengan dua pertama, kode dapat diatur ulang sehingga instruksi yang dijalankan di antara dua tergantung petunjuk dan pipa dapat mengalir efisien. Tugas kode reordering umumnya mengkompile ke kiri, yang mengakui data dependensi dan upaya untuk meminimalkan kinerja.

Tidak ada komentar:

Posting Komentar