向量体系结构(2)----SIMD指令集扩展和GPU
進(jìn)行SIMD多媒體擴(kuò)展的設(shè)計(jì),源于一個(gè)很容易觀察到的事實(shí):
許多多媒體應(yīng)用程序操作的數(shù)據(jù)類型比對(duì)32位處理器進(jìn)行針對(duì)性優(yōu)化的數(shù)據(jù)類型更窄一些。
圖像三基色,都是8位。音頻采樣也都是8位和16位來(lái)表示。
SIMD的多媒體擴(kuò)展指令與標(biāo)準(zhǔn)的SIMD指令相比,它指定的操作數(shù)更少,因此使用的寄存器堆更小。
SIMD擴(kuò)展主要對(duì)一下三項(xiàng)進(jìn)行了簡(jiǎn)化:
1)多媒體SIMD擴(kuò)展固定了操作代碼中數(shù)據(jù)操作數(shù)的數(shù)目,從而在x86的體系結(jié)構(gòu)的MMX,SSE,AVX中添加了數(shù)百條指令。
2)多媒體SIMD沒(méi)有提供向量體系結(jié)構(gòu)的更復(fù)雜的尋址模式,也就是步幅訪問(wèn)和集中---分散訪問(wèn)。
3)多媒體SIMD不像向量體系結(jié)構(gòu)那樣,為了支持元素的條件執(zhí)行而提供遮罩寄存器。
做這些擴(kuò)展指令的目的也是加快那些精心編制的庫(kù)函數(shù)的運(yùn)行速度,而不是由編譯器來(lái)生成的這些庫(kù)。
SIMD的優(yōu)點(diǎn):
1)芯片設(shè)計(jì)相對(duì)向量體系結(jié)構(gòu)來(lái)說(shuō),較簡(jiǎn)單,且不需要那么大的存儲(chǔ)器帶寬。
2)可以比較輕松的引入一些符合新媒體標(biāo)準(zhǔn)的指令。
GPU的祖先是圖形加速器,極強(qiáng)的圖形處理能力是GPU得以存在的原因。當(dāng)前GPU的研究熱點(diǎn)是一種簡(jiǎn)化的GPU編程的編程語(yǔ)言。
GPU幾乎擁有所有可以由編程環(huán)境捕獲的并行類型:多線程,MIMD,SIMD,指令級(jí)并行
NVIDA開發(fā)的是一種類似于C的語(yǔ)言和編程環(huán)境,通過(guò)克服多種并行的挑戰(zhàn)來(lái)提高GPU程序員的生產(chǎn)效率。這一系統(tǒng)稱為CUDA。
將所有的這些并行形式統(tǒng)一為CUDA線程,以這種最低級(jí)的并行作為編程原型。
編譯器和硬件可以將數(shù)以千計(jì)的CUDA線程聚合在一起。CUDA編程模型被定義為"單指令多線程(SIMT)"
執(zhí)行時(shí),以32個(gè)線程為一組,稱為線程塊,將執(zhí)行整個(gè)線程塊的硬件稱為多線程SIMD處理器。
行執(zhí)行和線程管理由GPU硬件負(fù)責(zé),而不是由應(yīng)用程序或操作系統(tǒng)完成,不同的線程塊之間可以使用全局存儲(chǔ)的原子操作來(lái)進(jìn)行協(xié)調(diào),
但是它們之間不能直接通信。
和很多并行系統(tǒng)一樣,CUDA在生產(chǎn)效率和性能之間進(jìn)行了一點(diǎn)折中,提供了一些本身固有的功能,讓程序員能夠顯示控制硬件。
了解編程語(yǔ)言可以平衡生產(chǎn)效率和性能之間的關(guān)系。
AMD推出的與供應(yīng)商無(wú)關(guān)的語(yǔ)言,OpenCL。
以NVIDIA系統(tǒng)為例,GPU可以很好的解決數(shù)據(jù)級(jí)并行的問(wèn)題,也擁有著集中---分散數(shù)據(jù)傳送和遮罩寄存器,但是GPU的寄存器要比
向量處理器更多。有一些功能,GPU通過(guò)硬件來(lái)實(shí)現(xiàn),在向量體系結(jié)構(gòu)中通過(guò)軟件來(lái)實(shí)現(xiàn)。
網(wǎng)格是在GPU上運(yùn)行,由一組線程塊構(gòu)成的代碼。例如我們希望兩個(gè)向量乘在一起,每個(gè)向量長(zhǎng)度為8192個(gè)元素。執(zhí)行所有8192個(gè)
元素乘法的GPU代碼稱為網(wǎng)格(向量化循環(huán))
為了便于管理,網(wǎng)格可以由線程塊(向量化循環(huán)體)組成。每個(gè)線程塊最多512個(gè)元素。一條SIMD指令一次執(zhí)行32個(gè)元素。所以該例子
中,共有16個(gè)線程塊
網(wǎng)格和線程塊是GPU硬件中實(shí)現(xiàn)的編程抽象,可以幫助程序員組織自己的CUDA代碼。
線程塊調(diào)度程序是將線程塊指定給執(zhí)行該代碼的處理器,我們將這種處理器稱為多線程SIMD處理器。
線程塊調(diào)度程序與向量體系結(jié)構(gòu)中的控制處理器類似。決定了該循環(huán)所需要的線程塊數(shù),以及將他們分配給不同的多線程SIMD處理器。
SIMD多線程處理器與向量處理器類似。但是它的很多功能單元都是深度流水化的。
GPU是一個(gè)由多線程SIMD處理器組成的多處理器,加自己的線程塊調(diào)度程度。
GPU硬件中有兩級(jí)硬件調(diào)度程序:
1) 線程塊調(diào)度程序,將線程塊分配給多線程SIMD處理器
2) SIMD處理器內(nèi)部的SIMD線程調(diào)度程序,調(diào)度何時(shí)運(yùn)行SIMD指令線程
在多線程SIMD處理器中執(zhí)行的指令,由并行功能單元來(lái)執(zhí)行,稱為SIMD車道,每個(gè)SIMD處理器中的車道數(shù)在各代GPU中是不同的。
對(duì)于fermi,每個(gè)寬度為32的SIMD指令線程被映射到16個(gè)物理SIMD車道,所以每條SIMD指令需要兩個(gè)時(shí)鐘周期才能完成。
記分板,可以讓SIMD線程調(diào)度程序,了解哪個(gè)SIMD指令已經(jīng)做好運(yùn)行準(zhǔn)備。
總結(jié)
以上是生活随笔為你收集整理的向量体系结构(2)----SIMD指令集扩展和GPU的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Swift中文教程(一)--欢迎来到Sw
- 下一篇: python上的数据库sqlite3——