企業(yè)網(wǎng)站建設(shè)三個(gè)原則買外鏈有用嗎
一 指令集架構(gòu)
Intel X86, ARM v8, RISC-V 是當(dāng)今廣泛使用的指令架構(gòu)的實(shí)例。
大多數(shù)現(xiàn)代架構(gòu)可以歸類為基于通用寄存器的加載和存儲(chǔ)型架構(gòu),在這種架構(gòu)下,操作數(shù)倍明確指定,只能使用夾在和存儲(chǔ)指令訪問(wèn)內(nèi)存。除提供基本的功能之外,廣泛部署的架構(gòu)還在集訓(xùn)增強(qiáng)其ISA 以支持新的計(jì)算方式。包括增強(qiáng)的向量處理指令(例如Intel AVX2, AVX512 ARM SVE)和矩陣指令。使用這些高級(jí)指令的軟件往往在性能上有幾個(gè)數(shù)量級(jí)的提升。
二 指令流水線
流水線是加快CPU速度的基礎(chǔ)性技術(shù),指令可以重疊執(zhí)行。
指令執(zhí)行的過(guò)程1 取指令,2 譯碼 3 執(zhí)行 4 訪問(wèn)內(nèi)存 5 回寫。
在第一個(gè)時(shí)鐘周期,指令x進(jìn)入流水線的取指IF階段。在第二個(gè)時(shí)鐘周期,指令x進(jìn)入譯碼ID階段,同時(shí)程序的下一條指令進(jìn)入取指IF階段,以此類推。當(dāng)整個(gè)流水線滿載時(shí),圖7中第5個(gè)時(shí)鐘周期所示,CPU的所有流水線階段都忙于處理不同的指令,如果沒(méi)有流水線的話,指令x + 1就需要等到指令x執(zhí)行完畢才能開(kāi)始執(zhí)行。
流水線機(jī)器中每條指令的執(zhí)行時(shí)間 = 非流水線機(jī)器中每條指令執(zhí)行的執(zhí)行時(shí)間/ 流水線階段數(shù)。
在現(xiàn)代CPU中所有類別的冒險(xiǎn)都是由硬件處理的。
結(jié)構(gòu)冒險(xiǎn)
由資源沖突而導(dǎo)致,在很大程度上,可以通過(guò)復(fù)制硬件資源 如使用多端口寄存器或者存儲(chǔ)器 來(lái)消除。然而,要消除所有這些冒險(xiǎn),在硅面積和功耗方面成本可能會(huì)變得非常高昂。
數(shù)據(jù)冒險(xiǎn)
寫后讀Read after write. 冒險(xiǎn)要求相關(guān)的讀取操作在寫入操作后執(zhí)行。當(dāng)指令x + 1 在上一條指令x寫入某個(gè)位置之前讀取同一位置時(shí),就會(huì)發(fā)生這種冒險(xiǎn),從而導(dǎo)致讀取錯(cuò)誤的值。CPU通過(guò)實(shí)現(xiàn)從流水線后期階段到早期階段的數(shù)據(jù)轉(zhuǎn)發(fā)來(lái)減輕與RAW冒險(xiǎn)相關(guān)的損失,這個(gè)想法是,在指令x完全完成之前,指令x的結(jié)果可以轉(zhuǎn)發(fā)到指令x+1我們看一下例子。
R1 = R0 ADD 1
R2 = R1 ADD 2
高速緩存
m路組關(guān)聯(lián)告訴緩存中的每個(gè)緩存塊都有一個(gè)與其關(guān)聯(lián)的地址標(biāo)簽。此外,該標(biāo)簽還包含諸如標(biāo)記數(shù)據(jù)有效與否的有效位之類的狀態(tài)位。標(biāo)簽還可以包含其他位,以指示訪問(wèn)信息,共享信息等,這些內(nèi)容將在后面的章節(jié)中描述。
圖11展示了如何使用流水線生成的地址來(lái)查找高速緩存。最低順序地址位定義了給定塊內(nèi)的偏移量,即塊偏移量位(32字節(jié)緩存行需5位。64字節(jié)緩存行需要6位)。 組則是基于上述公式使用索引位來(lái)選擇,一旦組被選定,就可以使用標(biāo)簽位與該組中的所有標(biāo)簽進(jìn)行比較。如果其中一個(gè)標(biāo)簽與傳入請(qǐng)求的標(biāo)簽匹配并且設(shè)置了有效位,則緩存命中。與該塊條目關(guān)聯(lián)的數(shù)據(jù)。
塊地址
標(biāo)簽,索引 塊偏移量。
緩存未命中
典型的替換算法是最近最少使用(Least Recently Used, LRU)策略,即最近訪問(wèn)次數(shù)最少的緩存塊被釋放,為未命中地址騰出緩沖空間,另一種可選算法則隨機(jī)的選擇一個(gè)緩存塊作為犧牲對(duì)象。大多數(shù)CPU在硬件層定義這些功能。
管理寫操作
CPU的設(shè)計(jì)使用兩種基本機(jī)制來(lái)處理高速緩存中的緩存命中寫入操作:
在寫直達(dá)(Write-Through)高速緩存中,命中的數(shù)據(jù)同時(shí)寫入緩存塊的層次結(jié)構(gòu)中較低的層級(jí)。
在回寫(Write Back)高速緩存中,命中的數(shù)據(jù)只寫入緩存。
在寫入未命中時(shí)分配Write-Allocate 或者讀取Fetch高速緩存中,未命中位置的數(shù)據(jù)從層次結(jié)構(gòu)中較低層級(jí)家在到高速緩存,隨后寫入命中情況一樣處理剩余寫入操作。
假如高速緩存使用非寫分配(no-write-allocate)策略,寫入未命中的事物直接被發(fā)送到層次結(jié)構(gòu)中所有較低層級(jí),并且緩存塊不會(huì)被夾在到高速緩沖中。
平均訪問(wèn)時(shí)延 = 命中花費(fèi)的時(shí)間 + 未命中比例 x 未命中花費(fèi)的時(shí)間。
硬件和軟件預(yù)取技術(shù)
減少緩存未命中以及后續(xù)停頓的方法之一,就是先于流水線需要將指令和數(shù)據(jù)預(yù)取到高速緩沖區(qū)的不同層級(jí)。prefetch指令。
主存
就是常說(shuō)的內(nèi)存,大多數(shù)CPU都支持的主流DRAM技術(shù)是DDR,DRAM技術(shù)。歷史上,DRAM帶寬每一代都得到了提升,而延遲保持不變,甚至更高。表2展示了最新三代DDR技術(shù)的最高數(shù)據(jù)速率對(duì)應(yīng)的延遲,數(shù)據(jù)速率以每秒百萬(wàn)傳輸次數(shù)(10^6)的單位度量。
DDR3 2133 10.3ns
DDR4 3200 12.5ns
DDR5 6400 14
虛擬內(nèi)存
虛擬地址包含兩部分,
虛擬頁(yè)編號(hào) 頁(yè)偏移量
頁(yè)表 物理地址 主存
單指令多數(shù)據(jù)處理器
simd 在SIMD處理器中,單條指令通常在單個(gè)時(shí)鐘周期內(nèi)使用許多獨(dú)立的功能單元對(duì)多個(gè)數(shù)據(jù)元素進(jìn)行操作。向量和矩陣的科學(xué)計(jì)算都非常適合SIMD架構(gòu),因?yàn)?/span>向量或者矩陣的每個(gè)元素都需要使用相同指令進(jìn)行處理。