Anda di halaman 1dari 8

TUGAS TAMBAHAN SISTEM OPERASI KJ 001

Nama : Muhammad Fariz Satria Maulana


NIM : 20220801166

UNIVERSITAS ESA UNGGUL


TEKNIK INFORMATIKA
ILMU KOMPUTER
2023
Prosesor Pipa | Simulator CPU

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.

1. Masukan Kode Berikut di Compiler CPU-OS


program pipeline
L=10
M=20
N=30
M=M+L
N=N+L
L=L/2
L=L+1
end

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:

● MOV R04, R02: Mengcopy nilai register R02 ke register R04


● MOV #30, R05: Mengisi register R05 dengan nilai 30
● MOV R05, R03: Mengcopy nilai register R05 ke register R03
● MOV R02, R04: Mengcopy nilai register R02 ke register R04
● ADD R01, R04: Menambahkan nilai register R01 ke register R04
● MOV R04, R05: Mengcopy nilai register R04 ke register R05
● MOV R05, R02: Mengcopy nilai register R05 ke register R02
● MOV R03, R04: Mengcopy nilai register R03 ke register R04
● ADD R01, R04: Menambahkan nilai register R01 ke register R04
● MOV R04, R05: Mengcopy nilai register R04 ke register R05
● MOV R05, R03: Mengcopy nilai register R05 ke register R03
● MOV R01, R04: Mengcopy nilai register R01 ke register R04
● ADD #1, R04: Menambahkan nilai 1 ke register R04
● MOV R04, R05: Mengcopy nilai register R04 ke register R05
● MOV R05, R01: Mengcopy nilai register R05 ke register R01

Instruksi-instruksi ini dapat dibagi menjadi tiga bagian utama:

● Inisialisasi variabel: Instruksi-instruksi pertama menginisialisasi variabel-variabel L,


M, dan N ke nilai-nilai awal mereka.
● Operasi matematika: Instruksi-instruksi berikutnya melakukan operasi matematika
pada variabel-variabel tersebut.
● Kopiyasi nilai: Instruksi-instruksi terakhir menyalin nilai variabel-variabel ke
register-register CPU.

2. Selanjutnya Load In Memory Program PipeLine


Setelah kode program dimuat ke dalam memori dan siap dieksekusi, langkah selanjutnya
yang bisa dilakukan adalah menjalankan program tersebut. Ketika program sedang berjalan
(running), kita dapat menekan tombol SHOW PIPELINE pada sistem untuk menampilkan
visualisasi kerja pipeline dari instruksi-instruksi yang sedang dieksekusi oleh prosesor.
Tombol SHOW PIPELINE ini akan memicu sistem untuk melakukan analisis real-time
terhadap jalannya pipeline saat program sedang berjalan.

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.

3. PIPELINE dengan no instruction pipeline


Pada Gambar tersebut memperlihatkan 5 stage pipeline (Fetch, Decode, Read, Execute,
Write) dengan total 23 instruksi yang dieksekusi.
Statistik yang ditampilkan menunjukkan:

● 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.

4. PIPELINE dengan no history recording dan Do not insert bubbles


Pada Gambar tersebut memperlihatkan 5 stage pipeline (Fetch, Decode, Read, Execute,
Write) dengan total 23 instruksi yang dieksekusi.
Statistik yang ditampilkan menunjukkan:
Berdasarkan gambar dan statistik yang diberikan, berikut ini analisis saya:
● Total clocks yang dibutuhkan adalah 42 clocks untuk mengeksekusi 23 instruksi.
● Total Busy Stages adalah 12 stage. Ini menunjukkan banyaknya stage yang aktif
selama eksekusi 23 instruksi.
● Total Instructions Count adalah 23 instruksi yang dieksekusi.
● CPI (Cycles Per Instruction) rata-rata adalah 1,83 cycles per instruksi. Ini dihitung
dari total clocks dibagi total instruksi. 42 clocks / 23 instruksi = 1,83 CPI.
● Tidak ada data hazards dan control hazards yang terjadi. Ini menunjukkan eksekusi
instruksi berjalan optimal.
● Rata-rata waktu fetch instruction (SF) adalah 2.73 cycles. Ini adalah waktu rata-rata
yang dibutuhkan untuk mengambil instruksi dari memori ke register instruksi.
● Terdapat 1 instruksi yang mensyaratkan sinkronisasi antar pipeline (Instruction
Syncs).

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.

5. PIPELINE dengan no history recording


Pada Gambar tersebut memperlihatkan 5 stage pipeline (Fetch, Decode, Read, Execute,
Write) dengan total 23 instruksi yang dieksekusi.
Statistik yang ditampilkan menunjukkan:
Berdasarkan gambar dan statistik yang diberikan, berikut adalah analisis saya:

● Total clocks yang dibutuhkan adalah 50 cycles untuk mengeksekusi 23 instruksi.


● Total Busy Stages adalah 52 stage. Ini jauh lebih tinggi dibandingkan jumlah
instruksi. Hal ini kemungkinan disebabkan oleh banyaknya data hazards.
● Instructions Count tetap 23 instruksi.
● CPI (Cycles Per Instruction) rata-rata adalah 2.17 cycles per instruksi. Lebih tinggi
dibandingkan kondisi normal karena adanya data hazards.
● Total data hazards adalah 21. Ini sangat banyak dan menyebabkan panjangnya
waktu eksekusi karena harus menunggu ketersediaan data.
● Tidak ada control hazards. Eksekusi instruksi bebas dari masalah percabangan.
● Rata-rata waktu fetch instruction (SF) 2.3 cycles. Masih cukup optimal.
● Terdapat 1 instruksi yang mensyaratkan sinkronisasi antar pipeline (Instruction
Syncs).

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.

Anda mungkin juga menyukai