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.
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
64 * 1 bit register eksekusi berpredikat (lihat kemudian) Untuk mendukung paralelisme tingkat tinggi
M-Unit
Pemuatan dan penyimpanan
Antara register dan memori
B-Unit
Instruksi cabang
F-Unit
Instruksi floating point
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
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
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
Predikasi
Setiap instruksi dalam loop didasarkan pada register predikat yang berotasi
Menentukan apakah pipeline ada dalam prolog, kernel atau epilog
Pointer Instruksi
Mask Pengguna
Identifier Prosesor
r32-r127 dapat digunakan sebagai perotasi register untuk pipeline software atau untuk tumpukan register
Referensi adalah virtual Hardware dapat diubah secara dinamis
Register Predikat
Register 64 1 bit digunakan sebagai predikat pr0 selalu 1 untuk memungkinkan instruksi unpredicate Static pr1-pr15, pr16-pr63 dapat di rotasi
Pointer Instruksi
Berkas alamat instrusi yang sedang dijalankan
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
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
Format-format Register
Fitur-fitur EPIC
Dukungan perangkat lunak untuk eksekusi berpredikat Spekulasi kontrol dan data Pipelining software
Itanium 2 (1)
8-tahap pipeline
Semua kecuali instruksi floating-point
Tahap Pipeline
Instruction pointer generation (IPG)
Membawa dan pointer instruksi untuk L1I cache
Itanium 2 (2)
ALU execution (EXE)
Menjalankan operasi
Instruksi Floating-point
Lima tahap pertama yang sama Diikuti oleh empat tahap floating-point pipeline Diikuti oleh tahap menulis hasil kembali