EFI:Itanium 的 BIOS
Itanium 的 BIOS 并不是您通常熟悉的個(gè)人計(jì)算機(jī)的 BIOS。可擴(kuò)展固件接口 (EFI) 是將操作系統(tǒng)從 BIOS 和硬件中分離出來(lái)的抽象層。EFI Shell 與 Windows 中的命令提示符很相似。在某些方面,EFI Shell 就像是一個(gè)內(nèi)置的小型操作系統(tǒng)。從 EFI Shell,您可以訪問(wèn)驅(qū)動(dòng)器(包括 CD-ROM)、運(yùn)行可執(zhí)行文件(例如 Windows 的安裝程序),甚至可以執(zhí)行簡(jiǎn)單的文本編輯。系統(tǒng)配置數(shù)據(jù)存儲(chǔ)在非揮發(fā)性內(nèi)存中,而不是存儲(chǔ)在硬盤(pán)上,并且可以通過(guò) EFI Shell 進(jìn)行配置。
EPIC:Intel 的順序處理器
Itanium 是一種順序處理器,意味著它會(huì)以指令提供的順序來(lái)執(zhí)行這些指令。這與普通的 x86 處理器不同,x86 處理器在可能的情況下會(huì)在管線中重新排序指令,然后嘗試并行執(zhí)行指令。對(duì)于 Itanium 而言,編譯器必須明確地排序指令,然后負(fù)責(zé)檢查指令之間的相互依存關(guān)系。編譯器還必須負(fù)責(zé)通知處理器可以并行執(zhí)行的指令。Intel 有一個(gè)為此定義的新術(shù)語(yǔ):EPIC。EPIC 表示明確并行指令集計(jì)算。它負(fù)責(zé)編譯器執(zhí)行所有優(yōu)化。處理器將不會(huì)進(jìn)行任何重新排序。這使得編譯器責(zé)任更加重大,稍后將在本文中進(jìn)行討論。
執(zhí)行單元
Itanium 由九個(gè)執(zhí)行單元組成,如下所示:
• |
兩個(gè)整數(shù)單元 |
• |
兩個(gè)整數(shù)/負(fù)載存儲(chǔ)單元 |
• |
兩個(gè)浮點(diǎn)單元 |
• |
三個(gè)分支單元 |
Itanium 具有一個(gè)十階管線,負(fù)責(zé)提取、解碼和執(zhí)行指令。Itanium 最多可以同時(shí)處理六條指令。
寄存器
Itanium 具有多達(dá) 328 個(gè)寄存器:128 個(gè) 64 位整數(shù)通用寄存器、128 個(gè) 82 位浮點(diǎn)寄存器、64 個(gè) 1 位謂詞寄存器、8 個(gè)分支寄存器以及用于各種目的的其他寄存器的集合,例如 x86 后向兼容性(當(dāng)運(yùn)行在 x86 兼容模式中時(shí),Itanium 會(huì)將一些 x86 寄存器映射到 64 位寄存器上,同時(shí)提供專門(mén)用于處理器的 x86 模式的其他寄存器)。
要協(xié)助管理如此大量的寄存器,Itanium 有能力同時(shí)設(shè)計(jì)和輪換寄存器。我們將通用寄存器分成兩組:前 32 個(gè)寄存器是固定的、全局寄存器。后 96 個(gè)寄存器可以用于設(shè)計(jì)和輪換。
寄存器設(shè)計(jì)
ALLOC 指令用于建立寄存器框架。寄存器框架將物理寄存器(硬件)映射到邏輯寄存器(軟件)上,這樣當(dāng)調(diào)用某個(gè)函數(shù)時(shí),不再需要推出或彈出所有參數(shù),編譯器就可以為子例程分配一定范圍的寄存器,其中的一些寄存器可能會(huì)映射到父例程的寄存器上。可以在兩者之間重疊的寄存器用于傳遞參數(shù)。這樣比將參數(shù)推出和彈出到堆棧上更為有效。當(dāng)然,推出和彈出參數(shù)的傳統(tǒng)方法仍然可以使用。
由于前 32 個(gè)寄存器是固定的,您無(wú)法設(shè)計(jì)它們。因此,可以設(shè)計(jì)的寄存器的最大數(shù)量為(其余的)96 個(gè)寄存器。另外,只有整數(shù)寄存器可以設(shè)計(jì),浮點(diǎn)寄存器和謂詞寄存器不能進(jìn)行設(shè)計(jì)。
寄存器輪換
寄存器也可以輪換或轉(zhuǎn)移到一個(gè)或多個(gè)位置。在解開(kāi)循環(huán)時(shí),這可能很有幫助,因此使用不同的物理寄存器,在不相互干預(yù)的情況下,那些周而復(fù)始地在相同的寄存器集中運(yùn)行的循環(huán)可以同時(shí)運(yùn)行。利用這個(gè)選項(xiàng),編譯器可以更進(jìn)一步改進(jìn)指令的并行處理。
指令集
IA-64 指令是 41 位長(zhǎng)的指令。指定 128 個(gè)通用寄存器中之一需要使用七位,并且指定兩個(gè)源寄存器和一個(gè)目標(biāo)寄存器,一共是 21 位。每條指令可以指定 64 個(gè)謂詞寄存器中的一個(gè),再加上 6 位。這占用了 27 位,而我們尚未指定實(shí)際的操作代碼。
指令封裝到 128 位的“綁定”中。其中三條指令(123 位),再加上 5 位模板字段。然后,這些綁定會(huì)被匯編到“組”中。組是理論上可以同時(shí)執(zhí)行的指令集合。組中的指令沒(méi)有相互依存關(guān)系。在編譯時(shí),編譯器必須對(duì)此進(jìn)行計(jì)算并對(duì)綁定一起分組。處理器將不會(huì)再次檢查編譯器的工作,所以編譯器必須保證其正確。組可以是任意的長(zhǎng)度。模板字段中的一位表示組的結(jié)束。
綁定和組是不同的。綁定是指令分派到處理器的方式。Itanium 的總線和解碼電路為 128 位寬,剛好用于 3 條指令(Itanium 實(shí)際上同時(shí)分派兩個(gè)綁定)。組是指令進(jìn)行交互的邏輯方式。