24
1 Chapter 13 Reduced Instruction Set Komputers (RISC) Reduced Instruction Set Komputer atau “Komputasi set instruksi yang disederhanakan” pertama kali digagas oleh John Cocke, peneliti dari IBM di Yorktown, New York pada tahun 1974 saat ia membuktikan bahwa sekitar 20% instuksi pada sebuah prosesor ternyata menangani sekitar 80% dari keseluruhan kerjanya. Komputer pertama yang menggunakan konsep RISC ini adalah IBM PC/XT pada era 1980-an. Istilah RISC sendiri pertama kali dipopulerkan oleh David Patterson, pengajar pada University of California di Berkely. RISC apabila diterjemahkan berarti “Komputasi Kumpulan Instruksi yang Disederhanakan”, merupakan sebuah arsitektur komputer atau arsitektur komputasi modern dengan instruksi-instruksi dan jenis eksekusi yang paliing sederhana. Arsitektur ini digunakan pada komputer dengan kiinerja tinggi, seperti komputer vektor. Selain digunakan dalam komputer vektor, desain ini juga diimplementasikan pada prosesor komputer lain, seperti pada beberapa mikroprosesor Intel 960, Itanium (IA64) dari Intel Corporation, PowerPC dan Arsetektur POWER dari International Business Machine. 13.1. Instruction Execution Characteristic Peneliti dalam bidang teknologi komputer telah berhasil mengembangkan bahasa pemrograman dengan lebih kompleks. Adanya high-level programming languages (HLL) memungkinkan programmer untuk membuat algoritma menjadi lebih singkat dan sederhana, lebih memperhatikan rincian, dan mendukung penggunaan pemrograman berstruktur atau disebut juga pemrograman berorientasi objek. Namun perkembangan tersebut menimbulkan permasalah baru yang dikenal sebagai semantic gap, yaitu perbedaan antara operasi-operasi yang disediakan oleh HLL dengan operasi- operasi yang disediakan oleh arsitektur komputer. Permasalahan ini ditandai dengan tidak efisiennya eksekusi, program mesin yang berukuran besar, dan kompleksitas compiler. Para perancang menanggapi permasalahan ini dengan membuat suatu arsitektur dengan maksud untuk mengurangi celah dari permasalahan yang terjadi. Fitur utama termasuk didalamnya yaitu set instruksi yang komplek, puluhan mode pengalamatan atau addressing modes, dan mengimplementasikan berbagai statement HLL dalam perangkat keras atau hardware. Set-set instruksi yang komplek tersebut dimaksudkan untuk : 1. Memudahkan pekerjaan compiler

AOK Chapter 13

Embed Size (px)

DESCRIPTION

jffhhhhrhr

Citation preview

  • 1

    Chapter 13

    Reduced Instruction Set Komputers (RISC)

    Reduced Instruction Set Komputer atau Komputasi set instruksi yang disederhanakan pertama

    kali digagas oleh John Cocke, peneliti dari IBM di Yorktown, New York pada tahun 1974 saat ia

    membuktikan bahwa sekitar 20% instuksi pada sebuah prosesor ternyata menangani sekitar 80% dari

    keseluruhan kerjanya. Komputer pertama yang menggunakan konsep RISC ini adalah IBM PC/XT pada era

    1980-an. Istilah RISC sendiri pertama kali dipopulerkan oleh David Patterson, pengajar pada University of

    California di Berkely.

    RISC apabila diterjemahkan berarti Komputasi Kumpulan Instruksi yang Disederhanakan,

    merupakan sebuah arsitektur komputer atau arsitektur komputasi modern dengan instruksi-instruksi dan

    jenis eksekusi yang paliing sederhana. Arsitektur ini digunakan pada komputer dengan kiinerja tinggi,

    seperti komputer vektor. Selain digunakan dalam komputer vektor, desain ini juga diimplementasikan

    pada prosesor komputer lain, seperti pada beberapa mikroprosesor Intel 960, Itanium (IA64) dari Intel

    Corporation, PowerPC dan Arsetektur POWER dari International Business Machine.

    13.1. Instruction Execution Characteristic

    Peneliti dalam bidang teknologi komputer telah berhasil mengembangkan bahasa

    pemrograman dengan lebih kompleks. Adanya high-level programming languages (HLL)

    memungkinkan programmer untuk membuat algoritma menjadi lebih singkat dan sederhana,

    lebih memperhatikan rincian, dan mendukung penggunaan pemrograman berstruktur atau

    disebut juga pemrograman berorientasi objek.

    Namun perkembangan tersebut menimbulkan permasalah baru yang dikenal sebagai

    semantic gap, yaitu perbedaan antara operasi-operasi yang disediakan oleh HLL dengan operasi-

    operasi yang disediakan oleh arsitektur komputer. Permasalahan ini ditandai dengan tidak

    efisiennya eksekusi, program mesin yang berukuran besar, dan kompleksitas compiler. Para

    perancang menanggapi permasalahan ini dengan membuat suatu arsitektur dengan maksud

    untuk mengurangi celah dari permasalahan yang terjadi. Fitur utama termasuk didalamnya yaitu

    set instruksi yang komplek, puluhan mode pengalamatan atau addressing modes, dan

    mengimplementasikan berbagai statement HLL dalam perangkat keras atau hardware. Set-set

    instruksi yang komplek tersebut dimaksudkan untuk :

    1. Memudahkan pekerjaan compiler

  • 2

    2. Meningkatkan efisiensi eksekusi, karena operasi yang kompleks dapat diimplementasikan

    dalam microcode

    3. Memberikan dukungan bagi HLL yang lebih kompleks dan canggih.

    Tabel 13.1 Characteristics of some CISC, RISC, and Superscalar Processor

    Sementara itu, sejumlah penelitian telah selesai dilakukan dalam beberapa tahun untuk

    menentukan pola dan karakteristik eksekusi instruksi mesin yang dihasilkan dari program HLL.

    Hasil yang didapat dari penelitian ini memberikan inspirasi beberapa peneliti untuk membuat

    arsitektur yang mendukung pemrograman HLL dengan lebih sederhana.

    Beberapa aspek komputasi yang ditinjau dalam merancang mesin RISC adalah sebagai

    berikut :

    Operation performed : menentukan fungsi-fungsi apa saja yang harus dilakukan

    oleh prosessor dan interaksinya dengan memori.

    Operand used : Jenis-jenis operand dan frekuensi pemakaiannya menentukan

    penyusunan memori untuk penyimpanan dan mode pengalamatan untuk

    mengaksesnya.

    Execution sequencing : menentukan kontrol dan penyusunan pipeline.

    13.1.1. Operation

    Dewasa ini banyak penelitian yang dilakukan untuk menganalisa sifat program

    HLL. Namun, hasil penelitian yang diperoleh masih belum cukup membantu para

    perancang dan pengembang mesin set instruksi untuk menunjukkan statement seperti

    apa yang paling sering digunakan dalam eksekusi program.

    Untuk dapat mengerti fenomena tersebut, program milik Patterson [PATT82a],

    di compile pada VAX, PDP-11, dan Motorola 68000 untuk menentukan jumlah rata-rata

  • 3

    instruksi mesin dan referensi memori tiap jenis statement. Kolom kedua dan ketiga pada

    Tabel 13.2 menunjukkan seberapa sering instruksi HLL dijalankan pada beberapa jenis

    program; data diperoleh dengan mengamati kejadian yang muncul pada saat program

    berjalan.

    Tabel 13.2 Weighted Relative Dynamic of HLL Operation [PATT82a]

    Untuk memperoleh data pada kolom empat dan lima, masing-masing nilai pada

    kolom kedua dan ketiga dikalikan dengan jumlah instruksi mesin yang dihasilkan compiler.

    Hasil tersebut kemudian di normalisasi. Demikian pula, pada kolom keenam dan ketujuh

    diperoleh dengan mengalikan jenis statement yang sering muncul dengan jumlah relatif

    referensi memori yang disebabkan oleh masing-masing statement. Data yang dihasilkan

    menunjukkan bahwa prosedur call/return menghabiskan waktu paling banyak pada

    operasi program HLL.

    Pada tabel 13.2 menunjukkan hasil yang signifikan dari berbagai jenis statement

    dalam HLL, ketika HLL di compile pada arsitektur set instruksi modern tertentu. Pada

    beberapa arsitektur mesin lainnya, hasil yang didapat bisa saja berbeda.

    13.1.2. Operands

    Meskipun topik ini sangat penting, namun hanya sedikit penelitian tentang jenis-jenis

    operand. Penelitian yang dilakukan Patterson terhadap frekuensi dinamik terjadinya

    kelas-kelas variabel (Tabel 13.3) dalam program pascal dan C menunjukkan bahwa

    mayoritas

  • 4

    Tabel 13.3 Dynamic Percentage of Operand

    referensi menuju kepada variabel-variabel skalar. Lebih dari 80% skalar bersifat variabel

    lokal. Penelitian tersebut menyatakan bahwa jenis arsitektur berpengaruh pada

    kecepatan pengaksesan operandd.

    13.1.3. Procedure Calls

    Prosedur call dan return merupakan aspek yang penting dalam program HLL. Pada

    tabel 13.2 menunjukkan bahwa prosedur call merupakan operasi yang menghabiskan

    waktu paling banyak dalam program tersebut. Dengan demikian, hal ini akan

    menguntungkan dalam mempertimbangkan bagaimana cara-cara melaksanakan operasi

    ini secara efisien. Aspek yang perlu diperhatikan yaitu jumlah parameter dan variabel yang

    berkaitan dengan prosedur, dan kedalaman pensarangan (nesting).

    Dalam penelitian Tanenbaum didapatkan bahwa secara dinamik sebesar 98%

    prosedur yang dipanggil hanya memenuhi parameter kurang dari enam argument dan

    92% dari prosedur tersebut menggunakan kurang dari enam variabel lokal skalar. Hasil

    serupa juga didapatkan dari penelitian tim Berkeley RISC, seperti yang ditunjukkan pada

    tabel 13.4.

    Tabel 13.4 Prosedur Argument dan Variabel Lokal Skalar

  • 5

    13.1.4. Implications

    Hasil-hasil penelitian yang telah dilakukan secara umum dapat dinyatakan bahwa

    terdapat beberapa faktor yang menentukan karakteristik arsitektur RISC. Pertama,

    penggunaan register dalam jumlah yang besar. Hal ini dimaksudkan untuk

    mengoptimalkan pereferensian operand. Penelitian yang dilakukan menunjukkan bahwa

    terdapat beberapa referensi pada tiap instruksi HLL dan padanya terdapat bagian

    perpindahan statement (assignment) yang besar.

    Kedua, diperlukan perhatian bagi perancangan instruksi pipeline. Karena tingginya

    proporsi instruksi percabangan bersyarat dan prosedur call, instruksi pipeline yang

    bersifat langsung dan ringkas akan menjadi tidak efisien. Ketiga, terdapat set instruksi

    yang disederhanakan (dikurangi).

    13.2. The Use of a Large Register File

    Alasan mengapa penyimpanan register direkomendasikan adalah karena register

    merupakan perangkat penyimpanan yang paling cepat dibandingkan memori utama dan cache.

    Register file secara fisik memiliki bentuk yang kecil, terletak pada chip yang sama dengan ALU dan

    unit kontrol, pengaksesan alamatnya lebih dekat daripada cache dan memori. Dengan demikian,

    diperlukan strategi agar operand yang paling sering diakses disimpan dalam register dan

    meminimalkan operasi register-memori.

    Terdapat dua pendekatan dasar yang memungkinkan untuk diterapkan yaitu pendekatan

    secara perangkat lunak (software) dan pendekatan secara perangkat keras (hardware).

    Pendekatan secara perangkat lunak mengandalkan compiler untuk memaksimalkan penggunaan

    register. Compiler tersebut akan mengalokasikan register untuk variabel yang paling sering

    digunakan. Pendekatan ini membutuhkan algoritma analisis program yang mutakhir. Pendekatan

    perangkat keras dilakukan dengan cara memperbanyak jumlah register sehingga akan lebih

    banyak variabel yang ditampung didalamnya dalam periode waktu yang lebih lama.

    13.2.1. Register Windows

    Karena kebanyakan operand direferensikan pada lokal skalar,maka pendekatan yang

    dibutuhkan adalah untuk menyimpan referensi tersebut di dalam register, dengan

    beberapa register yang disediakan untuk variabel global. Namun yang menjadi masalah

    adalah definisi lokal berubah pada setiap prosedur call dan return yang sering terjadi.

  • 6

    Pada setiap pemanggilan (call), variabel lokal harus disimpan dari register ke memori,

    sehingga register dapat digunakan kembali oleh program. Selain itu, parameter-

    parameter yang telah ditentukan harus terpenuhi. Pada pengembalian (return), variabel

    dari program induk (parent) harus dikembalikan pada register dan hasilnya harus

    dilempar kembali ke program induk (parent).

    Solusi masalah ini berdasar pada dua data yang dihasilkan pada bagian 13.1. Pertama,

    suatu prosedur hanya menjalankan beberapa parameter dan variabel lokal (Tabel 13.4).

    Kedua, aktifasi suatu prosedur berubah-ubah (terjadi fluktuasi) dalam rentang waktu yang

    relatif sempit. Untuk menangani hal tersebut maka digunakan beberapa set register yang

    berukuran kecil, tiap set register tersebut kemudian ditempatkan pada prosedur yang

    berbeda. Pemanggilan sebuah prosedur secara otomatis akan merubah prosesor untuk

    lebih menggunakan jendela register, daripada menyimpannya di memori register.

    Prosedur yang berjalan berdampingan dengan jendela register akan di-overlap untuk

    memenuhi parameter yang ada.

    Konsep dari overlap register windows diilustrasikan pada Figure 13.1. Hanya satu

    jendela register yang tampak dan memiliki alamat (addressable) seolah-olah itu adalah

    satu-satunya set register. Jendela register dibagi menjadi tiga area dengan ukuran yang

    telah ditentukan. Lokal register digunakan untuk lokal variabel sesuai dengan yang

    ditugaskan oleh compiler. Register sementara (temporary register) digunakan untuk

    pertukaran hasil dan parameter dengan level berikutnya yang lebih rendah. Register

    sementara (temporary register) pada level satu memiliki bentuk parameter yang sama

    dengan register level dibawahnya. Overlap ini memungkinkan parameter-parameter

    dapat dilewatkan tanpa perpindahan aktual data.

    Figure 13.1 Overlap Register Windows

    Bentuk melingkar seperti yang ditunjukkan pada Figure 13.2 menggambarkan lingkaran

    buffer dengan enam jendela. CWP (current-window pointer) menunjuk pada jendela

  • 7

    yang prosedurnya sedang aktif. SWP (Saved-window pointer) mengidentifikasi jendela

    mana yang terakhir disimpan dalam memori. Jika prosedur D dipanggil prosedur E,

    argumen untuk E ditempatkan pada register sementara (temporary register) D dan CWP

    akan memajukan satu jendela.

    Figure 13.2 Circular-Buffer Organization of Ovelapped Windows

    Jika prosedur E kemudian memanggil prosedur F, pemanggilan tersebut tidak bisa

    dilakukan pada status buffer saat ini. Hal ini dikarenakan jendela F melakukan overlap

    jendela A. jika F mengisi temporary register-nya, melakukan persiapan untuk memanggil

    prosedur, maka hal tersebut akan merubah parameter dari register A.

    Dari penjelasan tersebut, dapat dilihat bahwa jendela register ke-N hanya bisa

    menampung N 1 pengaktifan prosedur. Nilai dari N tidak boleh terlalu besar.

  • 8

    13.2.2. Global Variables

    Teknik register windows seperti yang telah dijelaskan sebelumnya memberikan suatu

    cara bagaimana peyusunan yang efisien untuk menyimpan variabel lokal skalar di dalam

    register. Akan tetapi teknik ini tidak dapat memenuhi kebutuhan penyimpanan variabel

    global yang diakses oleh lebih dari satu prosedur. Terdapat dua pilihan untuk memenuhi

    hal tersebut :

    1. Variabel-variabel yang dideklarasikan sebagai variabel global pada HLL ditentukan

    lokasi memorinya oleh compiler. Namun bagi yang sering mengakses variabel-

    variabel global, teknik tersebut tidaklah efisien.

    2. Melibatkan set register global didalam CPU. Register-register tersebul harus memiliki

    jumlah yang tetap dan tersedia untuk semua prosedure. Pilihan ini merupakan solusi

    dari permasalahan pilihan nomor 1.

    13.2.3. Large Register File versus Cache

    Tabel 13.5 menunjukkan perbandingan karakteristik dari file register berukuran

    besar dan cache. Menggunakan file register semestinya dapat menghemat waktu waktu,

    karena semua lokal variabel skalar disimpan didalamnya. Disisi lain, menggunakan cache

    membuat kapasitas penyimpanan menjadi lebih efisien, karena cache dapat bereaksi

    secara dinamik pada keadaan yang sedang terjadi.

    Tabel 13.5 Characteristics of Large-Register-File and Cache Organization

    Selain itu, umumnya cache memperlakukan semua referensi memori dengan cara yang

    sama, termasuk instruksi dan tipe data yang lainnya.

    Sebuah file register memungkinkan terjadinya ketidak efisiensian pada

    penggunaanya, karena tidak semua prosedur memerlukan alokasi jendela register

    dengan kapasitas penuh.

  • 9

    Dengan penggunaan file register, perpindahan data antara register dan memori

    tergantung dari kedalaman prosedur bersarang. Karena biasanya kedalaman prosedur

    bersarang tersebut berubah-ubah dalam rentang waktu yang relatif cepat dan

    penggunaan memori pada file register cukup jarang terjadi. Kebanyakan memori cache di

    set menjadi asosiatif dengan ukuran yang kecil. Dengan demikian, terdapat suatu resiko

    data atau instruksi yang ada akan dihapus dan digantikan oleh variabel yang sering

    digunakan.

    Untuk mereferensi skalar lokal pada jendela register, digunakan sejumlah jendela

    dan register virtual. Hal tersebut dilakukan dengan melalui decoder yang relatif

    sederhana untuk memilih salah satu register real. Untuk mereferensikan lokasi memori

    pada cache, alamat memori harus dibuat terlebih dahulu. Kompleksitas operasi tersebut

    tergantung pada mode pengalamatannya. Pada set associative cache, beberapa bagian

    pada alamat digunakan untuk membaca tag sesuai dengan ukuran set-nya. Bagian dari

    alamat lainnya dibandingkan dengan tag yang terpilih. Penjelasan tersebut cukup jelas

    bahwa meskipun cache sama cepat dengan file register, waktu pengaksesan yang

    dibutuhkan cukup lebih lama.

    Figure 13.3 Referencing a Scalar

  • 10

    13.3. Compiler-Based Register Optimization

    Diasumsikan hanya terdapat register dengan jumlah yang kecil (misalnya, 16-32) yang

    tersedia pada mesin RISC. Dalam kasus ini, optimasi penggunaan register adalah tanggung jawab

    compiler. Sebuah program yang ditulis dengan bahasa pemrograman level tinggi (high-level

    language) tentu saja memiliki referensi ke register secara tersirat. Tujuan dari compiler adalah

    untuk menyimpan sebanyak mungkin perhitungan operand didalam register untuk

    meminimalisasi terjadinya operasi load-and-store.

    Secara umum, pendeketan yang dilakukan adalah sebagai berikut. Setiap program yang

    akan diletakkan pada register di-assigned ke register simbolik atau register virtual. Kemudian

    compiler akan memetakan sejumlah register simbolik ke real register dalam jumlah yang telah

    ditentukan. Jika terdapat sejumlah data pada program dengan ukuran yang melebihi kapasitas

    register, maka data tersebut akan di-assigned ke lokasi memori.

    Inti dari optimisasi adalah untuk menentukan data mana atau data seperti apa yang harus

    di-assigned ke register. Teknik yang sering digunakan oleh compiler RISC dikenal sebagai graph

    coloring.

    Permasalahan yang terdapat pada graph coloring adalah sebagai berikut. Terdapat

    sebuah grafik yang terdiri dari simpul dan node, setiap node diberi warna sehingga setiap node

    yang bersebelahan memiliki warna yang berbeda. Pertama, program akan melakukan analisa

    untuk membuat grafik interferensi register. Node-node yang terdapat pada grafik adalah registes

    simbolik. Jika dua register simbolik tersebut aktif secara bersamaan dalam bagian program, maka

    kedua register tersebut digabungkan dengan sebuah simpul untuk menggambarkan interferensi

    yang terjadi. Kemudian graph tersebut diwarnai dengan n warna, dimana n adalah jumlah

    register. Node yang berwarna sama di masukkan ke dalam register yang sama juga. Jika proses

    tersebut tidak sepenuhnya berhasil, maka node-node yang tidak diberi warna akan diletakkan ke

    dalam memori dan operasi load-and-store akan digunakan untuk memberikan ruang yang

    digunakan sejumlah data ketika diperlukan. Proses tersebut dapat dilihat pada Figure 13.4.

  • 11

    Figure 13.4 Graph Coloring Approach

    13.4. Reduced Instruction Set Architecture

    Pokok bahasan pada bagian ini adalah membahas karakteristik umum dan tujuan dari

    mengurangi instruksi set arsitektur yang secara spesifik dapat dilihat pada bagian dari bab ini.

    13.4.1. Why CISC

    Alasan utama dari penggunaan CISC adalah diharapkan CISC akan menghasilkan

    progam yang lebih kecil dan lebih cepat. Terdapat dua keuntungan pada program yang

    berukuran lebih kecil. Pertama, penggunaan resource lebih hemat karena program yang

    berukuran kecil mengkonsumsi sedikit memori. Kedua, program yang berukuran kecil

    memiliki performa yang baik.

    13.4.2. Characteristics of Reduced Instruction Set Architectures

    Karakteristik pertama dari arsitektur RISC adalah siklus mesin ditentukan oleh

    waktu yang digunakan untuk mengambil dua buah operand dari register, melakukan

    operasi ALU, dan menyimpan hasil operasinya ke dalam register. Selain itu instruksi mesin

    RISC tidak lagi kompleks dan harus dapat mengeksekusi dengan cepat seperti

    mikroinstruksi pada mesin-mesin CISC. Hanya dibutuhkan sedikit microcode atau bahkan

    tidak sama sekali dalam penggunaan instruksi sederhana tersebut. Instruksi seperti itu

    akan dieksekusi lebih cepat karena tidak perlu mengakses penyimpanan mikroprogram

    saat eksekusi instruksi sedang berlangsung.

  • 12

    Karakteristik yang kedua adalah operasi dari register-ke register. Operasi ini

    hanya terdiri dari operasi pengaksesan memori LOAD dan STORE. Fitur rancangan ini

    menyederhanakan set instruksi begitu juga dengan unit kontrol. Keuntungan lainnya

    memungkinkan optimasi pemakaian register sehingga operand yang sering diakses akan

    tetap berada pada register.

    Karakteristik ketiga dari arsitektur RISC adalah penggunaan mode pengalamatan

    yang sederhana. Hampir semua instruksi RISC menggunakan pengalamatan register

    dengan cara yang sederhana.

    Figure 13.5 Two comparisons of Register-toRegister and Memory-to-Memory

    Approaches

    Karakteristik keempat adalah penggunaan format instruksi yang sederhana.

    Umumnya, hanya satu atau sedikit format yang digunakan. Panjang instruksi sudah

    ditentukan. Fitur ini memiliki beberapa kelebihan karena dengan menggunakan field

    yang tetap dan pengaksesan operand register dapat dilakukan secara bersama-sama.

    13.4.3. CISC versus RISC Characterisics

    Rancangan RISC dapat memperoleh keuntungan dengan mengambil sejumlah

    fitur dari CISC dan rancangan CISC dapat memperoleh keuntungan dengan mengambil

    sejumlah fitur dari RISC. Artinya adalah hasil yang diperoleh dari sejumlah rancangan RISC

  • 13

    terbaru yang dikenal dengan PowerPC, tidak lagi murni RISC. Dan rancangan CISC

    terbaru yang dikenal sebagai Pentium, memiliki beberapa karakteristik RISC. Pada Tabel

    13.7 terdapat beberapa daftar perbandingan karakteristik masing-masing prosesor.

    Tabel 13.7 Characteristic of Some Prosesor

    Bagaimanapun juga, stategi pada RISC memberikan beberapa kelebihan. Karena

    masing-masing instruksi hanya dengan satu siklus untuk eksekusi maka seluruh program

    dapat dikerjakan setara dengan kecepatan dari eksekusi instruksi MULT. Secara

    perangkat keras, prosesor RISC tidak teralu banyak membutuhkan transistor

    dibandingkan dengan CISC. Sehingga menyisakan ruang untuk general purpose register.

    Selain itu, karena semua instruksi dikerjakan dalam waktu yang sama, maka dimungkinka

    untuk melakukan pipelining.

    Memisahkan instruksi LOAD dan STORE sebenarnya mengurangi kerja yang

    harus dilakukan oleh prosesor. Pada CISC, setelah instruksi MULT dieksekusi, prosesor

    akan secara otomatis menghapus isi register. Jika ada operand yang dibutuhkan lagi untuk

    operasi berikutnya, maka prosesor harus menyimpan ulang data tersebut dari memori ke

    register. Sedangkan pada RISC, operand tetap berada dalam register hingga ada data lain

    yang disimpan ke dalam register yang bersangkutan.

    Pendekatan CISC bertujuan untuk meminimalkan jumlah instruksi per program,

    dengan cara mengorbankan kecepatan eksekusi sekian siklus/detik. Lain halnya dengan

  • 14

    RISC, tujuannya adalah mengurangi jumlah siklus/detik, namun konsekuensi yang

    diterima adalah bertambahnya jumlah instruksi per program.

    13.5. Risc Pipelining

    Teknologi pipeline yang digunakan pada komputer bertujuan untuk meningkatkan kinerja dari

    komputer. Secara sederhana, pipeline adalah suatu cara yang digunakan untuk melakukan

    sejumlah kerja secara bersamaan tetapi dalam tahap yang berbeda yang dialirkan secara berlanjut

    pada unit prosesor. Dengan cara ini, maka unit prosesor akan selalu bekerja.

    13.5.1. Pipelining with Regular Instructions

    Umumnya pada arsitektur RISC menggunakan instruksi register to register. Dan tiap siklus

    instruksi memiliki dua tahap :

    I : Instruction fetch.

    E : Execute. Menjalankan operasi ALU dengan register input dan output.

    Pada operasi load and store, terdapat tiga tahap yang dibutuhkan :

    I : Instruction fetch.

    E : Execute. Mengkalkulasi pengalamatan memori

    D : Memory. Melakukan operasi register-to-memory atau memory-to-register.

    Figure 13.6a menunjukkan urutan instruksi yang dikerjakan tanpa menggunakan

    pipeline. Jelas sekali hal tersebut cukup membutuhkan waktu proses yang lama. Figure

    13.6b menunjukkan skema pipeline dengan dua tahap, dimana tahap I dan E merupakan

    dua instruksi yang berbeda namun dikerjakan dalam waktu yang bersamaan. Namun,

    instruksi yang diproses secara bersamaan tersebut terdapat dalam tahap proses yang

    berbeda.

  • 15

    Figure 13.6 The Effect of Pipelining

    Karena beberapa instruksi diproses secara bersamaan, terdapat kemungkinan

    instruksi tersebut memerlukan resource yang sama. Sehingga diperlukan adanya

    pengaturan yang tepat agar proses tetap berjalan dengan benar.

    13.5.2. Optimization of Pipelining

    Delayed Branch

    Prosedur ini diilustrasikan pada Tabel 13.8. Pada kolom dengan nama normal

    branch, dapat diketahui terdapat simbol instruksi program bahasa mesin.

    Tabel 13.8 Normal and Delayed Branch

    Setelah alamat 102 di eksekusi, instruksi selanjutnya yang harus dieksekusi adalah

    105. Sebuah instruksi NOOP disisipkan setelah terjadinya percabangan agar pipeline

  • 16

    yang terjadi tetap berjalan dengan baik. Hasil yang diperoleh dari pengggunaan

    delayed branch dapat dilihat pada figure 13.7.

    Figure 13.7 Use of the Delayed Branch

    Prosedur delayed branch hanya akan berjalan pada percabangan tak bersyarat,

    call, dan return. Untuk percabangan bersyarat, prosedur ini tidak bisa diterapkan.

    Delayed Load

    Teknik delayed load ini dapat digunakan pada instruksi LOAD. Pada instruksi

    tersebut, register yang menjadi target dari load akan dikunci oleh prosesor.

    Kemudian prosesor akan melanjutkan untuk mengeksekusi instruksi-instruksi

    berikutnya. Jika compiler dapat mengatur ulang instruksi, selagi load masih berada

    dalam pipeline, maka tingkat efisiensi akan bertambah.

  • 17

    Loop Unrolling

    Loop Unrolling merupakan teknik compiler yang digunakan untuk membenahi

    instruksi yang bersifat paralel. Performa loop unrolling dapat ditingkatkan dengan

    cara :

    - Meningkatkan instruksi yang bersifat paralel dengan membenahi permforma

    pipeline

    - Membenahi register dan data caches

    Figure 13.8 Loop Unrolling

    13.6. MIPS R4000

    R4000 merupakan sebuah mikroprosesor yang dikembangkan oleh MIPS Computer System

    dan mengimplementasikan MIPS III instruction set (ISA). MIPS R4000 adalah mikroprosesor

    pertama kali yang berukuran 64-bit, dan pertama kali menerapkan MIPS III. Pada awal tahun 1990,

    ketika prosesor RISC diharapkan untuk menggantikan mikroprosesor CISC, MIPS R4000 terpilih

    sebagai Advanced Computing Environment (ACE).

    Penggunaan ukuran 64-bit memberikan beberapa keuntungan daripada arsitektur dengan

    ukuran 32-bit. Keuntungan tersebut adalah memungkinkan adanya kapasitas alamat (address)

    yang lebih besar. Cukup besar untuk sistem operasi memetakan file lebih dari satu terabyte secara

    langsung pada virtual memory agar lebih mudah diakses.

  • 18

    Chip prosesor R4000 dibagi menjadi dua bagian, bagian pertama berisi CPU dan yang lainnya

    berisi coprocessor untuk manajamen memori. Prosesor R4000 memiliki arsitektur yang sangat

    sederhana. Tujuannya adalah untuk merancang sebuah sistem dengan logika eksekusi instruksi

    sesederhana mungkin. Prosesor ini mendukung 32 dan 64-bit register dan juga menyediakan

    cache dengan kecepatan hingga 128 Kbytes.

    13.6.1. Instruction Set

    MIPS memiliki panjang instruksi sebesar 32-bit. Panjang instruksi tersebut

    berguna untuk menyederhanakan instruksi fetch dan decode juga menyederhanakan

    instruksi fetch dengan unit pengelola memori virtual. Fomat instruksi seperti yang

    ditunjukkan Figure 13.9 merupakan bentuk penyederhanaan instruksi decode.

    Tabel 13.9 MIPS R-series Instruction Set

  • 19

    Figure 13.9 MIPS Instruction Formats

    13.6.2. Instruction Pipeline

    MIPS R4000 memiliki delapan bagian pipeline, yang berarti terdapat delapan instruksi

    yang berada dalam pipeline pada waktu yang bersamaan. Delapan pipeline tersebut

    adalah sebagai berikut :

    - Pengambilan instruksi pada paruh pertama

    - Pengambilan instruksi pada paruh kedua

    - File register

    - Eksekusi instruksi

    - Data cache pertama

    - Data cache kedua

    - Pengecekan Tag

    - Penulisan ulang

    Ilustrasi dari pipeline delapan bagian pada MIPS R4000 ditunjukkan oleh Figure 13.10b.

  • 20

    Figure 13.10 Theoretical R3000 dan Actual R4000 Superpipelines

    13.7. SPARC

    SPARC (Scalable Processor Architecture) adalah mikroprosesor berarsitektur RISC yang

    didesain oleh Sun Microsystems tahun 1985. SPARC internasional bermaksud untuk membuka

    arsitektur SPARC demi membuat ekosistem yang lebih besar bagi pengembang desainnya, yang

    izinnya telah diberikan kepada beberapa manufaktur, termasuk Texas Instrument, Atmel, Cypress

    Semiconduktor, dan Fujitsu. Sehingga arstitektur SPARC terbuka penuh dan non-eksklusif.

    Implementsai arsitektr SPARC pada awalnya dirancang dan digunakan untuk sistem Sun-4

    workstation and server, menggantikan versi sebelumya Sun-3 yang berbasis keluarga prosesor

    Motorola 68000. Kemudian, prosesor SPARC digunakan fi server SMP (Symmetric multiprocessing)

    yang antara lain diproduksi oleh Sun Microsystem, Soulbourne dan Fujitsu.

    13.7.1. SPARC Register Set

    Fitur arsitektur SPARC memiliki file register yang besar, lebih dari 100 register. Seperti

    pada RISC Berkeley, suatu prosedur yang berjalan pada SPARC dapat mengakses hanya 32

    register, yaitu r0 sampai r31. Delapan dari register (r0 sampai r7) adalah bersifat global

    dengan kata lain dapat diakses dari semua prosedur. Sedangkan 24 register lainnya adalah

    window register. 24 window register tersebut dibagi menjadi 3 grup sehingga masing-masing

    grup memiliki 8 register seperti yang terlihat pada Figure 13.11.

  • 21

    Figure 13.11 SPARC Register Layout with Three Procedures

    - r31 sampai r24 adalah ins, berisi parameter input.

    - r23 sampai r16 adalah locals, berisi parameter lokal dari prosedur

    - r15 sampai r8 adalah outs, berisi parameter keluaran yang akan dilewatkan ke

    prosedur selanjutnya.

    Seperti yang terlihat pada Figure 13.11, secara fisik register outs dari prosedur pemanggil

    adalah register ins dari prosedur yang dipanggil. Prosedur pemanggil melewatkan parameter

    ke prosedur yang dipanggil melalui register out, yang merupakan register ins dari prosedur

    yang dipanggil. Jendela register dari prosedur yang saat ini berjalan disebut sebagai Active

  • 22

    Window, yang ditunjukkan oleh CWP (Current Window Pointer) pada PSR (Processor Status

    Register).

    Mikroprosesor implementasi dari SPARC saat ini menggunakan 8 jendela dengan 136

    register. Jendela tersebut diberi nomor 0 sampai nwindows 1 secara berurutan. Figure 13.12

    menunjukkan contoh implementasi mikroprosesor delapan jendela register berbentuk

    bundar.

    Figure 13.12 Eight Register Windows Forming a Circular Stack in SPARC

    13.7.2. Instruction Set

    Arsitektur SPARC memiliki jenis instruksi sebagai berikut :

    - Load / Store

    - Arithmetic / Logical / Shift

    - Control Transfer

    - Read / Write Control Register

    - Floating-point operate

  • 23

    - Coprocessor operate

    13.7.3. Instruction Format

    Format instruksi SPARC (Figure 13.14) memiliki tiga instruksi dasar yaitu :

    - CALL

    - Instruksi bercabang (Branch)

    - Instruksi operasi (register-to-register)

    13.8. RISC versus CISC Controversy

    Masih terdapat kontroversi antara para ahli tentang arsitektur mana yang lebih baik. Beberapa

    mengatakan bahwa arsitektur RISC lebih murah dan lebih cepat. Namun, desain arsitektur RISC

    menempatkan suatu beban yang besar pada perangkat lunak. Perangkat lunak yang dibutuhkan

    akan menjadi lebih kompleks.

    Pendekatan RISC yang telah dilakukan dapat dikelompokkan menjadi dua kategori :

    - Kuantitatif : suatu upaya untuk membandingkan ukuran dan kecepatan program

    pada mesin RISC dan CISC yang memiliki teknologi yang sebanding.

    - Kualitatif : pengujian yang dilakukan terhadap suatu masalah seperti

    permasalahan HLL program dan penggunaan VLSI secara optimal.

    Terdapat beberapa masalah dalam usaha untuk membandingkan masing-masing mesin RISC

    dan CISC :

    - Tidak adanya sepasang mesin RISC dan CISC yang bisa dibandingkan dalam hal

    life-cycle cost, tingkat teknologi, gate complexity, kecanggihan compiler,

    pendukung sistem operasi, dan lain sebagainya.

    - Tidak ada pengujian yang pasti pada seperangkat program yang sudah ada.

    - Sebagian besar analisis perbandingan pada mesin RISC lebih dilakukan pada

    mesin mainan daripada produk yang telah dikomersialkan.

    Dalam tahun-tahun terakhir, kontroversi RISC vs CISC mulai mereda. Hal ini dikarenakan

    timbulnya sebuah konvergensi teknologi secara bertahap. Selaras dengan kepadatan chip dan

    kecepatan perangkat keras yang mengalami peningkatan, sistem arsitektur RISC telah menjadi

    lebih kompleks pula. Pada saat yang bersamaan, untuk memaksimalkan kinerja performanya,

  • 24

    desain arsitektur CISC memfokuskan pada permasalahan yang terjadi pada arsitektur

    konvensional seperti kenaikan jumlah general-purpose register.