Superskalar

**Prosesor superskalar** adalah salah satu jenis arsitektur komputer di mana prosesor dalam bentuk uniprosesor dapat menjalankan dua atau lebih operasi skalar secara paralel. Istilah ini juga bisa merujuk kepada prosesor yang mampu menjalankan banyak instruksi setiap siklusnya menggunakan teknik yang disebut *pipelining*.

Arsitektur superskalar dirancang untuk meningkatkan kecepatan pemrosesan CPU. Sebagian besar komputer yang digunakan saat ini menggunakan mekanisme superskalar. Standar *pipelining* yang digunakan melibatkan pengolahan bilangan bulat (*integer*) dan sebagian besar prosesor juga memiliki kemampuan untuk mengolah data dengan titik mengambang.

Pemrosesan secara paralel tersebut diatas dapat diilustrasikan sebagai berikut. Sebagai contoh, operasi pertambahan () pada variabel satu (R1), dua (R2), dan tiga (R3) dengan format kode sebagai berikut:

Instruksi diatas akan menambahkan nilai dari register pada variabel R1 dan variabel R2 dan menempatkan hasilnya dalam register milik variabel R3. Proses operasi pertambahan pada nilai di register variabel R1 dan variabel R2 dilakukan di unit aritmetika dan logika pada CPU. Setelah operasi penambahan dilakukan, hasil penjumlahannya akan ditransfer ke register milik variabel R3. 

Prosesor dapat membaca instruksi baru dari memori, pada waktu bersamaan dengan saat operasi penambahan dilakukan. Kemudian, jika instruksi baru ini menggunakan unit aritmetika dan logika,  operand-nya dapat ditransfer ke input unit aritmetika dan logika pada saat yang sama dengan hasil instruksi **Add** ditransfer ke register milik variabel R3.

*Pipeline* yang mengolah bilangan bulat juga dapat digunakan untuk mengolah data dengan tipe titik mengambang. Namun, untuk aplikasi tertentu, terutama dalam konteks keperluan ilmiah, CPU yang memiliki kemampuan pengolahan data tipe titik mengambang tersendiri dapat meningkatkan kecepatan pemrosesan secara dramatis.

Komputasi yang dapat dilakukan dengan prosesor superskalar ini adalah, antara lain, untuk melakukan prediksi pencabangan instruksi (*branch prediction*) serta eksekusi spekulatif. Peristiwa ini sangat menguntungkan bagi program yang membutuhkan pencabangan dari kelompok instruksi yang dijalankan.

Program yang terdiri dari kelompok perintah bercabang ini sering digunakan dalam pemrograman. Contohnya adalah dalam menentukan aktivitas yang dilakukan oleh suatu sistem berdasarkan umur seseorang yang sedang diolahnya. Misalnya, jika umur yang bersangkutan lebih dari 18 tahun, maka akan diberlakukan instruksi yang berhubungan dengan umur tersebut. Anggaplah seseorang tersebut dianggap telah dewasa. Sedangkan untuk kondisi lainnya, dianggap belum dewasa. Tentu perlakuan akan dibedakan sesuai dengan sistem yang sedang dijalankan.

Pada kasus ideal, jika semua instruksi ditumpuk ke derajat yang maksimum yang mungkin dilakukan, maka eksekusi dilanjutkan pada kecepatan penyelesaian satu instruksi dalam tiap siklus detak prosesor. Instruksi individual, mungkin masih memerlukan beberapa siklus detak agar selesai dilakukan. Namun, untuk tujuan perhitungan, prosesor superskalar umumnya mampu melakukannya dalam tiap siklus.

Prosesor superskalar umumnya menggunakan beberapa unit fungsional, menciptakan jalur paralel di mana berbagai instruksi yang berbeda dapat dieksekusi secara paralel. Dengan pengaturan tersebut, maka dimungkinkan untuk memulai eksekusi beberapa instruksi secara paralel tiap siklus detak. Tentu saja, eksekusi paralel harus mempertahankan kebenaran logikan program, sehingga hasil yang diperoleh harus sama dengan hasil dari eksekusi secara serial.

Pada CPU yang mendukung perintah pencabangan ini, CPU membutuhkan lumayan banyak clock cycle, mengingat CPU menempatkan semuanya pada pipeline dan menemukan perintah berikutnya yang akan dieksekusinya. Sirkuit untuk branch prediction melakukan pekerjaan ini bekerja sama dengan pipeline, yang dilakukan sebelum proses di ALU dilaksanakan, dan memperkirakan hasil dari pencabangan tersebut.

Jika CPU berfikir bahwa branch akan menuju suatu cabang, biasanya berdasarkan pekerjaan sebelumnya, maka perintah berikutnya sudah dipersiapkan untuk dieksekusi berikut data-datanya, bahkan dengan adanya pipeline ini, bila tidak diperlukan suatu referensi dari instruksi terakhir, maka bisa dilaksanakan dengan segera, karena data dan instruksi yang dibutuhkan telah dipersiapkan sebelumnya.

Dalam hal eksekusi berspekulasi, artinya CPU akan menggunakan pipelining untuk melakukan perhitungan pada jalur yang berbeda berdasarkan perkiraan yang dibuat oleh komputer. Jika perkiraan yang dibuat oleh komputer benar, maka hasilnya bisa segera diambil dan perintah berikutnya dapat dilanjutkan. Namun, jika perkiraan tersebut tidak benar, maka CPU akan melakukan eksekusi berdasarkan kemungkinan lain sesuai dengan logika instruksi yang diberikan.

Teknik yang digunakan untuk pipeline dan superscalar ini dapat melakukan branch prediction dan speculative execution, yang tentunya membutuhkan banyak transistor tambahan. Sebagai perbandingan, komputer pertama yang menggunakan mesin 8088 dari IBM hanya memiliki sekitar 29.000 transistor. Sementara itu, mesin Pentium III dengan teknologi superscalar dan superpipeline, memiliki sekitar 7,5 juta transistor yang mendukung branch prediction, speculative execution, dan berbagai kemampuan lainnya. Beberapa CPU terkini seperti HP 8500 bahkan memiliki sekitar 140 juta transistor.

Pengguna superscalar Prosesor *Intel x86* yang menggunakan arsitektur superskalar adalah keluarga *Intel Pentium,* *Intel Pentium Pro,* *Intel Pentium II , Intel Pentium III , Intel Itanium, Intel Xeon, Intel Pentium 4, Intel Pentium M, Intel Core* dari Intel Corporation. Keluarga *AMD K5, AMD K6, AMD Athlon, AMD Athlon 64*, dan *AMD Opteron.*

Superscalar atau superskalar adalah arsitektur prosesor yang memungkinkan eksekusi paralel dari banyak instruksi pada tahap pipeline yang sama dan dengan kualitas yang sama dengan tahap pipeline yang lain.[1]

Merupakan salah satu rancangan untuk meningkatkan kecepatan CPU. Kebanyakan dari komputer saat ini menggunakan mekanisme superskalar ini. Standar pipelain yang digunakan adalah untuk pengolahan bilangan matematika integer (bilangan bulat, bilangan yang tidak memiliki pecahan), kebanyakan CPU juga memiliki kemampuan untuk pengolahan untuk data floating point (bilangan berkoma). Pipelain yang mengolah integer juga dapat digunakan untuk mengolah data berjenis floating point ini, tetapi untuk aplikasi tertentu, terutama untuk aplikasi keperluan ilmiah, CPU yang memiliki kemampuan pengolahan floating point dapat meningkatkan kecepatan prosesnya secara dramatis. [2]

Teknologi superscalar mampu menjalankan instruksi secara paralel dengan menggunakan satu prosesor. Superscalar dapat diimplementasikan baik pada arsitektur RISC maupun CISC, tetapi umumnya lebih sering digunakan pada arsitektur RISC. [1]

Peristiwa menarik yang dapat dilakukan dengan metode superscalar ini adalah dalam hal memprediksi pencabangan instruksi (branch prediction) dan melaksanakan eksekusi secara spekulatif (speculative execution). Peristiwa ini sangat menguntungkan bagi program-program yang membutuhkan pencabangan dari kelompok instruksi yang mereka jalankan. [2]

Program yang terdiri dari kelompok perintah bercabang ini sering digunakan dalam pemrograman. Contohnya dalam menentukan aktivitas yang dilakukan oleh suatu sistem berdasarkan umur seseorang yang sedang diolahnya, jika umur yang bersangkutan lebih dari 18 tahun, maka akan diberlakukan instruksi yang berhubungan dengan umur tersebut, anggaplah seseorang tersebut dianggap telah dewasa. Sedangkan untuk kondisi lainnya, seseorang dianggap belum dewasa. Tentu perlakuannya akan dibedakan sesuai dengan sistem yang sedang dijalankan.. [2]

Organisasi Superscalar secara umum

Alasan desain Superscalar

Sebagian besar operasi menggunakan besaran/nilai skalar
Operasi ini memungkinkan peningkatan kinerja sistem hingga level tertentu [1]
Superscalar Implementation

Proses fetch dari beberapa instruksi secara bersamaan.
Logika untuk menentukan ketergantungan sebenarnya yang meliputi nilai register
Mekanisme untuk mengomunikasikan nilai tersebut.
Mekanisme untuk menginisialisasi instruksi paralel.
Tersedianya sumber untuk eksekusi paralel dari beberapa instruksi.
Mekanisme processing instruksi dengan urutan yg sesuai. [1]

## Referensi