日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

处理器基础-要点与实例

發(fā)布時(shí)間:2024/3/24 编程问答 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 处理器基础-要点与实例 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

0. 引言

本文著力解決如下問(wèn)題:

- 講體系結(jié)構(gòu)的教材[1],著重于體系結(jié)構(gòu)的理論,沒(méi)有實(shí)例參考;講實(shí)現(xiàn)的教材[2],只有實(shí)現(xiàn)細(xì)節(jié),沒(méi)有背后思想。

- 兩種教材都沒(méi)有從應(yīng)用來(lái),再到應(yīng)用中去。

- 多數(shù)讀者需要的是理清楚理念,基于此掌控已有IP,或者進(jìn)行設(shè)計(jì)實(shí)踐和創(chuàng)新,并指導(dǎo)應(yīng)用。

- 計(jì)算機(jī)體系結(jié)構(gòu)有著豐富的內(nèi)容,并且涉及到諸多因素,但是理清楚脈絡(luò)則綱舉目張。

- 理清楚基本結(jié)構(gòu)有助于拓展理解工具鏈、應(yīng)用,有助于開(kāi)發(fā)當(dāng)下針對(duì)AI的流處理器。

?

本文脈絡(luò):

- 先給出應(yīng)用和處理器的基本結(jié)構(gòu)。

- 接下來(lái)分析應(yīng)用需求,明確體系結(jié)構(gòu)需要處理的相關(guān)問(wèn)題,并以此探討體系結(jié)構(gòu)和指令集的思想。

- 以MIPS和ARM為例,實(shí)現(xiàn)基本指令集,并初步探討擴(kuò)展問(wèn)題。

- 回歸到應(yīng)用,探討體系結(jié)構(gòu)如何解決應(yīng)用問(wèn)題,以及對(duì)于軟件編程的啟示。

1. 基本應(yīng)用和處理器結(jié)構(gòu)

1.1 基本處理器結(jié)構(gòu)模型:

注解:

- 典型的處理器由存儲(chǔ)、數(shù)據(jù)路徑、控制路徑三部分組成

- 存儲(chǔ)部分可以進(jìn)一步擴(kuò)展為SRAM/Cache/加速器/IO等,代表系統(tǒng)的輸入輸出

- 處理和運(yùn)算部分可以擴(kuò)展處理器功能如特權(quán)模式,也可以擴(kuò)展處理能力如SIMD/VLIW/MIMD/SP

- 系統(tǒng)按照馮諾依曼存儲(chǔ)程序計(jì)算機(jī)理念運(yùn)行,一般經(jīng)過(guò)取指、譯碼、執(zhí)行、寫回幾個(gè)階段,實(shí)際設(shè)計(jì)和應(yīng)用會(huì)略有不同

1.2 基本應(yīng)用程序的例子

int * i_mem, i_buf, o_mem, o_buf;

int log2(int i)

{}

interrput 2 exception_handler()

{

}

main()

{

??? sys_init();

??????? while(1)??

??????? {?? // --- init

???????????????? int sum = 0;????????????????

???????????????? // --- input

???????????????? if(i_rdy)

???????????????????????? i_mem = i_buf;

???????????????? // --- processing

???????????????? for(i=0; i<len; i++)? {

???????????????? ??? sum = sum + i_mem;???????????????????????

???????????????? }

???????????????? o_mem = log2(sum)????????????????

???????????????? // --- output

???????????????? if(o_rdy)

???????????????????????? o_buf = o_mem;? }

}

注解:

- 程序包含系統(tǒng)初始化、主業(yè)務(wù)流、異常處理三部分

- 主業(yè)務(wù)流按照輸入-處理-輸出的流程運(yùn)轉(zhuǎn)

- 處理部分針對(duì)一定數(shù)據(jù)類型(不同長(zhǎng)度、有無(wú)符號(hào)、精度,可以在指令及操作碼中體現(xiàn),也可以加硬件標(biāo)記?)進(jìn)行處理(算數(shù)、邏輯、移位),對(duì)應(yīng)處理器結(jié)構(gòu)模型的ALU部分。實(shí)際的應(yīng)用任務(wù)經(jīng)過(guò)便一起處理形成指令,處理不能直接支持的指令如大數(shù)運(yùn)算也會(huì)由編譯器組合使用指令實(shí)現(xiàn)。具體應(yīng)用很可能擴(kuò)展如浮點(diǎn)、十進(jìn)制、字符串、圖形操作、超越函數(shù)、ARM CLZ/test指令。

- 馮諾依曼計(jì)算機(jī)按指令逐條進(jìn)行,同時(shí)有循環(huán)、分支(循環(huán)中也有分支判斷),分支會(huì)產(chǎn)生指令地址跳轉(zhuǎn)。結(jié)構(gòu)化程序的函數(shù)調(diào)用是一種特殊的跳轉(zhuǎn)(。中斷是另一種特殊的跳轉(zhuǎn)(保存中斷前下一條指令地址和相關(guān)寄存器狀態(tài),以便中斷返回)。相關(guān)的指令運(yùn)行由處理器結(jié)構(gòu)模型的控制路徑根據(jù)數(shù)據(jù)處理路徑的狀態(tài)實(shí)現(xiàn)。具體應(yīng)用可能會(huì)擴(kuò)展系統(tǒng)調(diào)用、自陷等指令。

- 數(shù)據(jù)與ALU之間的傳輸通過(guò)寄存器實(shí)現(xiàn),寄存器也用于保存計(jì)算和處理器運(yùn)轉(zhuǎn)的狀態(tài)。一個(gè)特殊情況是立即數(shù),其作為指令的一部分傳遞到數(shù)據(jù)處理路徑,但是受限于指令的長(zhǎng)度需要附加額外處理。具體應(yīng)用可能會(huì)擴(kuò)展虛擬存儲(chǔ)管理等指令。

2. 指令集和架構(gòu)設(shè)計(jì)的基本問(wèn)題和處理方法

應(yīng)用明確之后可以開(kāi)展指令集和架構(gòu)設(shè)計(jì),基本問(wèn)題和處理方法可參考文獻(xiàn)[2]。

主要問(wèn)題有兩個(gè):存儲(chǔ)和尋址,指令集編碼

2.1 存儲(chǔ)和尋址

按照存儲(chǔ)方式,CPU大約可以分成堆棧型(Java虛擬機(jī)ByteCode)、累加器型(英特爾處理器和51單片機(jī))、寄存器型(當(dāng)下多數(shù)處理器屬于此類)。前者指令長(zhǎng)度短,后者代碼高效(寄存器比存儲(chǔ)器快,而且尋址所需位數(shù)較少)。

寄存器型存儲(chǔ)方式又分為寄存器-寄存器型、存儲(chǔ)器-寄存器型、存儲(chǔ)器-存儲(chǔ)器型,前者較為普遍,一般都有專門的指令用于數(shù)據(jù)加載和存儲(chǔ)。一般有運(yùn)算、參數(shù)傳遞、系統(tǒng)專用等幾類寄存器。

相應(yīng)的,尋址方式有立即數(shù)、寄存器、直接地址、寄存器間接尋址、偏移尋址(多用于if跳轉(zhuǎn),跳轉(zhuǎn)目標(biāo)地址編譯器計(jì)算并寫進(jìn)機(jī)器程序)。其中立即數(shù)尋址和偏移尋址使用頻率最高,注意立即數(shù)大小和偏移量大小都會(huì)影響指令;特殊一點(diǎn)的還有寄存尋址的變種如索引尋址、自增自減尋址、縮放尋址。尋址方式越復(fù)雜指令效率越高但是志玲越復(fù)雜(RIXC VS CISC)。

2.2 指令集設(shè)計(jì)與編碼

一般有CISC和RISC兩大類。

前者針對(duì)具體應(yīng)用或者高級(jí)語(yǔ)言特性增強(qiáng)指令,指令功能強(qiáng)大、邏輯設(shè)計(jì)復(fù)雜。早期英特爾處理器屬于此種體制,但后來(lái)的宏觀是CISC微觀還是編譯成多條RISC。

RISC基于80%時(shí)間運(yùn)行的常見(jiàn)指令,設(shè)計(jì)規(guī)整,但是編譯難度大。

指令集設(shè)計(jì)考慮的因素:

- 尋址方式,以及支持的尋址空間和寄存器個(gè)數(shù)。

- 指令長(zhǎng)度

- 容易處理

- 留有冗余,以便后續(xù)升級(jí)保持部分前向兼容,即許多指令集宣稱的多元未飽和。

3. 典型指令集

3.1 MIPS基本指令集[2]

MIPS整數(shù)運(yùn)算為三操作數(shù),對(duì)應(yīng)三類寄存器rsrc/rtmp/rdst。通用寄存器32個(gè),每個(gè)操作數(shù)都可以用段可以使用5bit選擇。實(shí)際32個(gè)寄存器使用的時(shí)候有所分工:

?

指令集編碼:

?

注解:

- 一般來(lái)看,31:26為操作碼,25:0為操作數(shù)。長(zhǎng)操作數(shù)指令如立即數(shù)運(yùn)算、帶偏移的加載和跳轉(zhuǎn)用15:0;不同的操作其操作碼在31:26體現(xiàn)。非長(zhǎng)操作數(shù)指令,31:26為0,具體操作碼利用了5:0。

- 特別地,lui對(duì)立即數(shù)左移16位賦值給rtmp;幾何ori可以對(duì)任意寄存器賦值,實(shí)現(xiàn)立即數(shù)

微架構(gòu):

?

注解:

3.2 ARM v4指令集

寄存器組織:

?

?

注解:

- 16個(gè)編號(hào),不同模式下訪問(wèn)互有備份以加速切換,共37個(gè)

- 通用寄存器使用遵循ATPCS規(guī)則:r0~r4用于函數(shù)調(diào)用傳遞參數(shù)(內(nèi)嵌匯編編程要遵守,超過(guò)的要使用堆棧故指針編程更有效),r4~r7用于保留中間變量。

- CPSR由數(shù)據(jù)通路到控制通路,控制運(yùn)轉(zhuǎn)

指令編碼表?

3.3 RISC-V指令集

?

中國(guó)指令集?

方法:

統(tǒng)計(jì)、時(shí)序和周期分析

例子:

大數(shù)加法

Printf

循環(huán)展開(kāi)

For/if順序

增加多寄存器加載指令,MAC指令

按位取反

操作系統(tǒng)對(duì)于處理器的支持?

函數(shù)參數(shù)是大的結(jié)構(gòu)體可以使用指針,

ARM和MIPS都有16/32兼容和切換?

參考

[1] 計(jì)算機(jī)體系結(jié)構(gòu),張晨曦

[2] 計(jì)算機(jī)原理與設(shè)計(jì)——Verilog HDL版,李亞民

[3] ARM體系結(jié)構(gòu)與編程,杜春雷譯

[4] risc-v 指令集手冊(cè)

總結(jié)

以上是生活随笔為你收集整理的处理器基础-要点与实例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。