Anda di halaman 1dari 34

William Stallings Organisasi Dan Arsitektur Komputer Edisi Ke-7 Topik 15 Arsitektur IA-64

Latar Belakang IA-64 Pentium 4 tampaknya menjadi yang terakhir pada x86 Dikembangkan bersama-sama oleh Intel & Hewlett-Packard (HP) Arsitektur baru
Aristektur 64 bit Bukan perpanjangan x86 Bukan adaptasi dari aristektur HP RISC 64 bit

Mengeksploitasi sirkuit besar & kecepatan tinggi Penggunaan paralelisme yang sistematis Berawal dari superscalar

Motivation
Level instruksi paralelisme
Implisit dalam instruksi mesin Tidak ditentukan pada saat dijalankan oleh prosesor

Instruksi kata yang panjang/sangat panjang (LIW/VLIW) Cabang predikasi (tidak sama dengan prediksi cabang) Loading spekulatif Intel & HP menyebutnya Explicit Parallel Instruction Computing (EPIC) IA-64 adalah sebuah set instruksi, ditunjukan untuk implementasi pada EPIC Itanium adalah produk pertama Intel

Superscalar vs IA-64
Superscalar
Baris instruksi RISC, satu per kata Beberapa unit eksekusi paralel Penyusunan ulang dan optimasi instruksi dilakukan saat run time Cabang prediksi dengan eksekusi prediktif terdapat pada salah satu jalur Memuat data dari memori hanya bila diperlukan, dan mencoba mencari data di cache terlebih dahulu.

IA-64
Baris instruksi RISC tergabung menjadi 3 per kata Beberapa unit eksekusi paralel Penyusunan ulang dan optimasi instruksi dilakukan saat compile Eksekusi prediktid terpadat pada kedua jalur sebuah cabang. Secara spekulatif memuat data dari memori sebelum diperlukan, dan masih mencoba mencari data di cache terlebih dahulu.

Mengapa Aristektur Baru?


Hardware yang tidak kompatibel dengan x86 Sekarang memiliki puluhan juta transistor pada chip Bisa membangun cache yang lebih besar
Diminishing returns

Menambahkan unit eksekusi lebih


Meningkatkan superscaling Dinding Kompleksitas Unit lebih untuk membuat prosesor lebih luas Logika lebih untuk mengatur Peningkata prediksi cabang dibutuhkan Pipelines lebih panjang dibutuhkan Hukuman lebih besar untuk kesalahan prediksi Lebih banyak penggantian nama register dibutuhkan Setidaknya enam instruksi per siklus.

Paralelisme Eksplisit Instruksi Paralelisme dijadwalkan pada waktu kompilasi


Termasuk dengan instruksi mesin

Prosesor menggunakan info ini untuk melakukan eksekusi paralel Kurang membutuhkan sirkuit yan kompleks Compiler memiliki lebih banyak waktu untuk menentukan operasi paralel yang mungkin Compiler melihat seluruh program

Organisasi Umum

Tujuan umum atau register integer Floating point atau register grafis 1-bit register predikat Unit eksekusi

Fitur Utama Besarnya jumlah register


Format instruksi IA-64 mengasumsikan 256
128 * 64 bit untuk integer, tujuan logis & umum 128 * 82 bit untuk floating point dan grafis

64 * 1 bit register eksekusi berpredikat (lihat kemudian) Untuk mendukung paralelisme tingkat tinggi

Beberapa unit eksekusi


Diperkirakan 8 atau lebih Tergantung pada jumlah transistor yang tersedia Pelaksanaan instruksi paralel tergantung pada perangkat keras yang tersedia
8 instruksi paralel dapat terbagi menjadi 2 bagian (tiap bagian 4) jika hanya tersedia 4 unit eksekusi

Unit Eksekusi IA-64


I-Unit
Integer aritmatika Penggeseran dan penambahan Logical Pembandingan Integer multimedia ops

M-Unit
Pemuatan dan penyimpanan
Antara register dan memori

Beberapa integer ALU

B-Unit
Instruksi cabang

F-Unit
Instruksi floating point

Diagram Format Instruksi

Format Instruksi
Berkas 128 bit
Menyimpan 3 instruksi (suku kata) ditambah template Dapat mengambil 1 atau lebih berkas pada suatu waktu Template berisi info instruksi yang dapat dieksekusi secara paralel
Tidak terbatas pada berkas tunggal Mis. Aliran dari 8 instruksi dapat dieksekusi secara paralel Compiler akan mengurutkan kembali instruksi-instruksi untuk membentuk berkas yang berkesindambungan Dapat menggabungkan instruksi yang dependent dan independent pada berkas yang sama

Instruksi memiliki panjang 41 bit


Lebih banyak register dari RISC biasa Register eksekusi berpredikat (lihat kemudian)

Format Bahasa Assembly


[qp] mnemonic [.comp] dest = srcs // qp register predikat
1 dieksekusi kemudia dijalankan ke perangkat keras Hasil 0 akan dibuang

mnemonic nama instruksi comp 1 atau lebih instruksi penyempurna untuk memenuhi syarat mnemonik dest 1 atau lebih operand tujuan srcs 1 atau lebih operand sumber // - komentar Kelompok instruksi & berhenti ditandai dengan ;;
Sequence tanpa read setelah write atau write setelah write Tidak perlu ketergantungan cek pada register hardware

Contoh Assembly ld8 r1 = [r5] ;; //kelompok pertama add r3 = r1, r4 //kelompok kedua Instruksi kedua tergantung pada nilai r1
Diubah oleh instruksi pertama Eksekusi paralel tidak bisa dalam kelompok yang sama

Predikasi

1. Percabangan mempunyai 2 kemungkinan hasil 3. Semua instruksi di jalur ini adalah untuk mendasarkan register P1

2. Compiler memberikan register predikat untuk setiap instruksi berdasarkan jalannya 4. Semua instruksi di jalur ini adalah untuk mendasarkan register P2

5. CPU memulai eksekusi instruksi pada kedua jalur 6. CPU dapat mengeksekusi instruksi dari jalur paralel yang berbeda karena mereka tida memiliki ketergantungan yang sama 7. Saat CPU mengetahui perbandingan dari hasil, ia akan membuang hasil dari jalur yang salah Compiler mungkin akan mengatur kembali instruksi pada urutan, memasangkan instruksi 4 dan 7, 5 dan 8, dan 6 dan 9 untuk eksekusi paralel

Pemuatan Spekulatif

1. Compiler memindai sumber dan melihat muatan yang akan datang (instruksi 8). Ia akan menghapus muatan, memasukkan muatan spekulatif disini dan cek spekulatif segera sebelum operasi yang akan menggunakan data (instruksi 9).

2. Saat dijalankan, instruksi akan membaca data dari memori sebelum diperlukan. Jika beban akan memicu pengecualian, CPU menunda pelaporan pengecualian 5. Pada dasarnya, IA-64 telah mengangkat beban diatas percabangan

3. Compiler mengganti beban ini dengan beban spekulatif atas, ehinga instruksi 8 tidak benar-benar muncul dalam program 4. Instruksi ini memeriksa kebenaran data. Jika itu OK, maka CPU tidak melaporkan pegecualian

Spekulasi Kontrol & Data Kontrol


Atau Pemuatan spekulatif Memuat data dari memori sebelu diperlukan

Data
Beban dipindahkan sebelum disimpan yang bisa mengubah lokasi memori Cek nilai yang berikutnya

Contoh Prediksi

Software Pipelining
L1: ld4 r4=[r5],4 ;; add r7=r4,r9 ;; st4 [r6]=r7,4 br.cloop L1 ;; //cycle //cycle //cycle //cycle 0 load postinc 4 2 3 store postinc 4 3

Menambahkan konstanta untuk satu vektor dan menyimpan hasil di lain Tidak ada kesempatan untuk paralelisme level instruksi Instruksi di iterasi x semuanya dieksekusi sebelum iterasi x+1 mulai Jika tidak ada konflik antara pemuatan dan penyimpanan, dapat memindahkan instruksi independen dari loop x+1 ke loop x

Membuka Loop
ld4 ld4 ld4 add ld4 add st4 ld4 add st4 add st4 add st4 st4 r32=[r5],4;; r33=[r5],4;; r34=[r5],4 r36=r32,r9;; r35=[r5],4 r37=r33,r9 [r6]=r36,4;; r36=[r5],4 r38=r34,r9 [r6]=r37,4;; r39=r35,r9 [r6]=r38,4;; r40=r36,r9 [r6]=r39,4;; [r6]=r40,4;; //siklus //siklus //siklus //siklus //siklus //siklus //siklus //siklus //siklus //siklus //siklus //siklus //siklus //siklus //siklus 0 1 2 2 3 3 3 3 4 4 5 5 6 6 7

Detail Membuka Loop Menyelesaikan 5 iterasi dalam 7 siklus


Dibandingkan dengan 20 siklus dalam kode asli

Mangasumsikan dua port memori


Pemuatan dan penyimpanan dapat dijalankan secara paralel

Contoh Diagram Pipeline Perangkat Lunak

Dukungan Untuk Pipelining Software


Perubahan nama Register Otomatis
Ukuran tetap adalah predikat dan fp register file (p16P32, fr32-fr127) dan area ukuran diprogram dari register file gp (max R32-r127) mampu rotasi Loop menggunakan R32 pada iterasi pertama secara otomatis menggunakan R33 pada iterasi kedua

Predikasi
Setiap instruksi dalam loop didasarkan pada register predikat yang berotasi
Menentukan apakah pipeline ada dalam prolog, kernel atau epilog

Instruksi khusus pada Pemutusan Loop


Instruksi cabang yang mengakibatkan register berotasi dan perhitungan loop berkurang.

Kumpulan Register IA-64


Register umum Register floating-point Predikat Register cabang Register aplikasi

Pointer Instruksi

Penanda Frame saat ini

Mask Pengguna

Identifier Prosesor

Register Data Pemantauan Kinerja

Register-register IA-64 (1)


Register Umum
Register 128 gp 64 bit Static r0-r31
Referensi ditafsirkan secara harafiah

r32-r127 dapat digunakan sebagai perotasi register untuk pipeline software atau untuk tumpukan register
Referensi adalah virtual Hardware dapat diubah secara dinamis

Register Floating Point


Register 128 fp 82 bit Akan mempertahankan format IEEE 745 double extended Static fr0-fr31, fr32-fr127 dapat dirotasi untuk pipeline

Register Predikat
Register 64 1 bit digunakan sebagai predikat pr0 selalu 1 untuk memungkinkan instruksi unpredicate Static pr1-pr15, pr16-pr63 dapat di rotasi

Register-register IA-64 (2)


Register Cabang
Register 8 64 bit

Pointer Instruksi
Berkas alamat instrusi yang sedang dijalankan

Penanda Frame saat ini


Info keadaan yang berkaitan dengan tumpukan frame register umum Rotasi info untuk fr dan pr Mask Pengguna
Set dari nilai bit tunggal Perangkap allignment, monitor kinerja, pemantauan pemakaian register fp

Register Data Pemantauan Kinerja


Kinerja pendukung monitoring hardware

Register Aplikasi
Register tujuan khusus

Tumpukan Register
Hindari pergerakan yang tidak perlu dari data sat prosedur pemanggilan dan pengembalian Menyediakan prosedur dengan frame baru sampai dengan 96 register pada entri
r32-r127

Compiler menentukan jumlah yang diperlukan


Lokal Output

Register berganti nama sehingga register lokal dari frame sebelumnya tersembunyi Register output dari prosedur pemanggil sekarang memiliki angka awal r32 Register fisik r32-r127 dialokasikan ke buffer melingkar untuk register virtual Hardware memindahkan isi register antara register & memori jika dibutuhkan register lebih

Perilaku Tumpukan Register


Eksekusi Instruksi Register Tumpukan Umum Penanda Frame

Format-format Register

Organisasi Itanuim Fitur-fitur Superscalar


Lebar 6, 10 tahap mendalam software pipeline Prefetch Dinamis Prediksi Cabang Register scoreboard untuk mengoptimalkan untuk waktu kompilasi yang tida terdeterminasi

Fitur-fitur EPIC
Dukungan perangkat lunak untuk eksekusi berpredikat Spekulasi kontrol dan data Pipelining software

Itanium 2 Processor Diagram

Itanium 2 (1)
8-tahap pipeline
Semua kecuali instruksi floating-point

Tahap Pipeline
Instruction pointer generation (IPG)
Membawa dan pointer instruksi untuk L1I cache

Instruction rotation (ROT)


Mengambil instruksi dan merotasinya ke posisi Berkas 0 berisi instruksi pertama yang akan dieksekusi

Instruction template decode, expand and disperse (EXP)


Template instruksi decode Disebar hingga 6 instruksi melalui 11 ports dalam hubungannya dengan informasi opcode untuk unit eksekusi

Rename and decode (REN)


Register ubah nama untuk mesin tumpukan register Instruksi decode

Register file read (REG)


Membawa operand ke unit eksekusi

Itanium 2 (2)
ALU execution (EXE)
Menjalankan operasi

Tahap akhir untuk exception detection (DET)


Mendeteksi pengecualian Mengabaikan hasil jika instruksi predikat tidak benar Resteer mispredicted branches

Write back (WRB)


Menulis hasil kembali pada file register

Instruksi Floating-point
Lima tahap pertama yang sama Diikuti oleh empat tahap floating-point pipeline Diikuti oleh tahap menulis hasil kembali

Itanium 2 Processor Pipeline

Bacaan yang Dibutuhkan Stallings chapter 15 Website Intel IMPACT


University of Illinois

Anda mungkin juga menyukai