Tujuan dari tugas ini adalah untuk mempelajari tentang prosesor pipa dan non-pipa. Untuk
melakukan ini, Anda akan diberikan program dan diminta untuk mengompilasi kode dan
memuatnya di simulator CPU-OS. Kemudian, Anda akan diminta untuk menentukan jumlah
tahap di prosesor non-pipa, dan menemukan nilai clocks, jumlah instruksi, CPI, faktor
percepatan, hazard data, dan isi register serbaguna setelah menjalankan program di kedua
jenis prosesor.
Prosesor Pipa:
Prosesor pipa adalah prosesor yang menjalankan beberapa instruksi secara bersamaan.
Setiap instruksi melewati serangkaian tahap, tetapi beberapa instruksi dapat berada di tahap
yang berbeda pada waktu yang bersamaan.
Untuk menentukan jumlah tahap di prosesor pipa, Anda dapat melihat diagram aliran
instruksi prosesor.
Untuk menemukan nilai clocks, jumlah instruksi, CPI, faktor percepatan, hazard data, dan
isi register serbaguna setelah menjalankan program di prosesor pipa, Anda dapat
menggunakan simulator CPU-OS.
Penjelasan :
Program ini memiliki tiga variabel: L, M, dan N. Program ini pertama-tama menginisialisasi
L ke 10, M ke 20, dan N ke 30. Kemudian, program ini melakukan operasi berikut pada
variabel-variabel tersebut:
● L ditambahkan dengan M (L = L + M)
● N ditambahkan dengan L (N = N + L)
● L dibagi dengan 2 (L = L / 2)
● L ditambahkan dengan 1 (L = L + 1)
Kode mesin untuk program ini terdiri dari 116 instruksi. Setiap instruksi terdiri dari dua
byte, yang masing-masing mewakili nilai dua register CPU. Instruksi-instruksi tersebut
adalah sebagai berikut:
Analisis ini kemudian menghasilkan visualisasi interaktif mengenai status tiap-tiap stage
pada pipeline (Fetch, Decode, Execute, dsb) dan statistik seperti Cycle Per Instruction
(CPI), jumlah hazards, dan sinkronisasi instruksi yang terjadi selama eksekusi kode program
oleh prosesor. Dengan mengamati visualisasi kerja pipeline ini, pengguna dapat melakukan
debugging serta mendiagnosa apakah ada masalah pada eksekusi kode program tersebut
yang terindikasi dari tingginya CPI atau banyaknya data maupun control hazards.
● Total clocks yang dibutuhkan adalah 132 cycles untuk mengeksekusi 23 instruksi.
● Tidak ada busy stages, artinya semua stage bekerja secara efektif tanpa ada stage
yang menganggur.
● Total Instructions Count adalah 23 instruksi.
● CPI (Cycles Per Instruction) rata-rata adalah 132/23 = 5,74 cycles per instruksi. Ini
berarti setiap instruksi rata-rata memerlukan 5,74 cycles untuk dieksekusi.
● Tidak ada data hazards dan control hazards, artinya urutan eksekusi instruksi
berjalan dengan lancar tanpa ada stall/penundaan.
● Rata-rata waktu fetch instruction (SF) adalah 0,87 cycles. Artinya setiap 0,87 cycles
ada 1 instruksi yang difetch dari memori ke pipeline.
● Terdapat 1 instruksi yang mensyaratkan sinkronisasi antar pipeline (Instruction
Syncs).
Secara keseluruhan, performa pipeline cukup efisien dengan tidak adanya hazards dan
utilisasi stage yang optimal (no busy stages). Namun CPI masih cukup tinggi 5,74 cycles
yang mungkin disebabkan oleh adanya instruksi-instruksi tertentu seperti branch.
Secara keseluruhan, pipeline bekerja cukup efisien dengan CPI rata-rata 1.83 dan tidak ada
hazard yang signifikan. Tetapi waktu fetch instruction agak lama (2.73 cycles) dan ada 1
instruksi yang menyebabkan interupsi pipeline. Mungkin bisa diperbaiki dengan
mengoptimasi fetch instruction dan penanganan loncatan.
Secara keseluruhan, performa pipeline buruk karena banyak data hazard (21x). Ini
menyebabkan CPI tinggi 2.17 dan total clocks juga tinggi 50 untuk 23 instruksi. Optimasi
perlu dilakukan terutama dalam hal forwarding atau penanganan data dependency.
6. Kesimpulan Laporan
Berdasarkan hasil praktikum simulasi pipeline pada CPU, dapat disimpulkan bahwa
penerapan mekanisme pipeline dapat meningkatkan performa eksekusi instruksi pada CPU.
Pipeline memungkinkan beberapa instruksi dieksekusi secara paralel pada tahapan (stage)
yang berbeda. Hal ini dapat mengurangi jumlah clock cycles secara keseluruhan yang
dibutuhkan untuk menjalankan sekumpulan instruksi.
Pada praktikum ini terlihat bahwa dengan pipeline, 23 instruksi yang sama hanya
membutuhkan 42 clock cycles, jauh lebih sedikit dibandingkan 132 clock cycles pada CPU
tanpa pipeline. Ini menunjukkan terjadi percepatan sekitar 3 kali lipat.
Namun demikian, penerapan pipeline juga tidak luput dari permasalahan (hazard) seperti data
dependency atau ketidaksesuaian antar stage yang dapat menyebabkan penurunan performa.
Mekanisme forwarding data perlu diterapkan untuk mengurangi jumlah data hazard. Juga
perlu dilakukan sinkronisasi antar stage sehingga pipeline dapat berjalan optimal.
Secara keseluruhan pipeline terbukti mampu meningkatkan kinerja CPU dalam mengeksekusi
program, tetapi tetap memerlukan optimasi lebih lanjut agar bottleneck yang ada dapat
diminimalkan.