1,、SISDSISD(Single Instruction Single Data stream)單指令流單數(shù)據(jù)流,計算機體系結(jié)構(gòu)分類的一種,。 按照計算機同時處于一個執(zhí)行階段的指令或數(shù)據(jù)的最大可能個數(shù)劃分,,可分為SISD、SIMD,、MISD,、MIMD; SISD(Single Instruction Single Data stream)單指令流單數(shù)據(jù)流(SISD):SISD其實就是傳統(tǒng)的順序執(zhí)行的單處理器計算機,其指令部件每次只對一條指令進行譯碼,,并且只對一個操作部件分配數(shù)據(jù),。 流水線方式的單處理機有時也被當做SISD。 以加法指令為例,,單指令單數(shù)據(jù)(SISD)的CPU對加法指令譯碼后,,執(zhí)行部件先訪問內(nèi)存,取得第一個操作數(shù),;之后再一次訪問內(nèi)存,,取得第二個操作數(shù);隨后才能進行求和運算,。 2、SIMDSIMD全稱Single Instruction Multiple Data,,單指令多數(shù)據(jù)流,,能夠復制多個操作數(shù),并把它們打包在大型寄存器的一組指令集,。 概念:以同步方式,,在同一時間內(nèi)執(zhí)行同一條指令。 以加法指令為例,,單指令單數(shù)據(jù)(SISD)的CPU對加法指令譯碼后,,執(zhí)行部件先訪問內(nèi)存,取得第一個操作數(shù),;之后再一次訪問內(nèi)存,,取得第二個操作數(shù);隨后才能進行求和運算,。而在SIMD型的CPU中,,指令譯碼后幾個執(zhí)行部件同時訪問內(nèi)存,一次性獲得所有操作數(shù)進行運算,。這個特點使SIMD特別適合于多媒體應用等數(shù)據(jù)密集型運算。 如:AMD公司引以為豪的3D NOW! 技術(shù)實質(zhì)就是SIMD,,這使K6-2,、雷鳥、毒龍?zhí)幚砥髟谝纛l解碼,、視頻回放,、3D游戲等應用中顯示出優(yōu)異的性能。 SIMD指令如何工作 加載矢量寄存器的命令看起來很熟悉: VL V1, D2(X2,B2) 其中V1是矢量寄存器,,D2是位移,,X2和B2為索引與基地址寄存器。 但是,由于矢量寄存器的內(nèi)容有元素組成,,還有指令可以與他們單獨打交道,。例子之一就是Vector Load Element指令,可以更新一個元素: VLEx V1,D2(X2,B2)M3 其中x指定元素的大小,,B為字節(jié),,H為半字(16位),F(xiàn)為全字以及G為雙字,。V1,、D2、 X2 與 B2操作數(shù)扮演熟悉的角色,,但M3的掩膜指定字段的索引并更新,。因此VLEH V1,HALFWORD,3會更新矢量寄存器1的第四個半字,并保持其他元素不變,。 在常規(guī)負載下,,SIMD向量負載指令集有多種方法來產(chǎn)生掩膜,從通用寄存器插入元素并從一種矢量包裝元素到寄存器,。這與十進制不大一樣——這種能力能減半元素并將其壓縮到另一個寄存器,。 Vector register examples 假設我們已經(jīng)加載了兩個矢量寄存器,每個寄存器有8個半字整數(shù),,我們可以將所有元素合在一起,,用一條矢量添加指令: VA V1,V2,V3,M4 本例中,處理器把V2和V3中的半字元素相加并保存在V1中,,這樣體現(xiàn)了SIMD指令的非破壞自然屬性,。掩膜值應該與半字相同。處理器會將溢出移動到整數(shù)符號位,,這樣可以使計算有點棘手,。 矢量指令同樣也支持字符串函數(shù)。只要掌握幾個復雜選項,,SIMD字符串功能就能變得更簡單一些,,你可以把他們作為硬件實現(xiàn)C語言字符串處理函數(shù)。讓我們以Vector Find Element Equal為例: VFEE V1,V2,V3,M4[,M5] 在高級別上,,該指令會比較V2與V3中的元素,,并在V1設置相應的標識。掩膜M4表示元素的大小,,M5指定兩件事:設置位2告訴處理器比較V2,、V3和0。當位4等于1,,處理器將會設置條件碼,。在任何速率下,指令會從左往右比較第二個和第三個操作數(shù)元素。當它發(fā)現(xiàn)相等的元素,,就會在第一個操作數(shù)的第七字節(jié)設置元素字節(jié)索引,。如果沒有元素相等,第一個操作數(shù)的第七字節(jié)將包含一個與寄存器元素數(shù)量相等的字節(jié)索引,。如果指令發(fā)現(xiàn)所有元素都為零,,也會進行同樣的操作。 3,、SIMT
SIMT中文譯為單指令多線程,,英文全稱為Single Instruction Multiple Threads GPU中的SIMT體系結(jié)構(gòu)相對于CPU的SIMD中的概念。為了有效地管理和執(zhí)行多個單線程,,多處理器采用了SIMT架構(gòu),。此架構(gòu)在第一個unified computing GPU中由NVIDIA公司生產(chǎn)的GPU引入。 不同于CPU中通過SIMD(單指令多數(shù)據(jù))來處理矢量數(shù)據(jù),;GPU則使用SIMT,,SIMT的好處是無需開發(fā)者費力把數(shù)據(jù)湊成合適的矢量長度,并且SIMT允許每個線程有不同的分支,。 純粹使用SIMD不能并行的執(zhí)行有條件跳轉(zhuǎn)的函數(shù),,很顯然條件跳轉(zhuǎn)會根據(jù)輸入數(shù)據(jù)不同在不同的線程中有不同表現(xiàn),這個只有利用SIMT才能做到,。
為了保證GPU性能持續(xù)增長,,NVIDIA必須耗費更多的晶體管、制造出更大的GPU核心,,而這些都需要先進的,、成熟的半導體制造工藝的支持。NVIDIA之所以在GF100(GTX480)時代落敗,,并非架構(gòu)或者研發(fā)端出了什么問題(GF110/GTX580的成功可以證明),,而是核心太大導致40nm工藝無法支撐,良率低下漏電流難以控制,,最終導致核心不完整且功耗巨大,。如此一來,NVIDIA原有的架構(gòu)嚴重受制于制造工藝,,并非可持續(xù)發(fā)展之路,。
為此,NVIDIA將芯片架構(gòu)逐步轉(zhuǎn)向了SIMT的模式,,即Single Instruction Multiple Threads(單指令多線程),SIMT有別與AMD的SIMD,,SIMT的好處就是無需開發(fā)者費力把數(shù)據(jù)湊成合適的矢量長度,,并且SIMT允許每個線程有不同的分支。 純粹使用SIMD不能并行的執(zhí)行有條件跳轉(zhuǎn)的函數(shù),很顯然條件跳轉(zhuǎn)會根據(jù)輸入數(shù)據(jù)不同在不同的線程中有不同表現(xiàn),,這個只有利用SIMT才能做到,。
SIMT在硬件部分的結(jié)構(gòu)還是要比SIMD復雜一些,NVIDIA還是更注重效率一些,,所以NVIDIA的流處理器數(shù)量還是要比AMD少,,但差距已經(jīng)沒以前那么夸張了。
SIMT架構(gòu)類似于SIMD(單指令流多數(shù)據(jù)流)向量組織方法,,共同之處是使用單指令來控制多個處理元素,。一項主要差別在于SIMD向量組織方法會向軟件公開 SIMD寬度,而SIMT指令指定單一線程的執(zhí)行和分支行為,。
與SIMD向量機不同,,SIMT允許程序員為獨立、標量線程編寫線程級的并行代碼,,還允許為協(xié)同線程編寫數(shù)據(jù)并行代碼,。為了確保正確性,程序員可忽略SIMT行為,,但通過維護很少需要使一個warp塊內(nèi)的線程分支的代碼,,即可實現(xiàn)顯著的性能提升。
另外一個重要不同是SIMD中的向量中的元素相互之間可以自由通信,,因為它們存在于相同的地址空間(例如,,都在CPU的同一寄存器中),而SIMT中的每個線程的寄存器都是私有的,,線程之間只能通過shared memory和同步機制進行通信,。
在SIMT編程模型中如果需要控制單個線程的行為,必須使用分支,,這會大大的降低效率,。例如,如果一個warp中需要進行分支(即warp內(nèi)的線程執(zhí)行的指令指針指向不同的位置),,性能將急劇的下降,。如果一個warp內(nèi)需要執(zhí)行N個分支,那么SM就需要把每一個分支的指令發(fā)射到每一個SP上,,再由SP根據(jù)線程的邏輯決定需不需要執(zhí)行,。這是一個串行過程,因此SIMT完成分支的時間是多個分支時間之和,。
因此,,程序員在開發(fā)CUDA程序時應盡量避免分支,并盡量做到warp內(nèi)不分支,,否則將會導致性能急劇下降,。 4,、MISD多指令流單數(shù)據(jù)流機器(MISD) MISD是采用多個指令流來處理單個數(shù)據(jù)流。由于實際情況中,,采用多指令流處理多數(shù)據(jù)流才是更有效的方法,,因此MISD只是作為理論模型出現(xiàn),沒有投入到實際應用之中,。 5,、MIMD多指令流多數(shù)據(jù)流機器(MIMD) 多指令流多數(shù)據(jù)流(MultipleInstructionStreamMultipleDataStream,簡稱MIMD),,它使用多個控制器來異步地控制多個處理器,,從而實現(xiàn)空間上的并行性。 傳統(tǒng)的順序執(zhí)行的計算機在同一時刻只能執(zhí)行一條指令(即只有一個控制流),、處理一個數(shù)據(jù)(即只有一個數(shù)據(jù)流),,因此被稱為單指令流單數(shù)據(jù)流計算機(SingleInstructionSingleData,SISD)。而對于大多數(shù)并行計算機而言,,多個處理單元都是根據(jù)不同的控制流程執(zhí)行不同的操作,,處理不同的數(shù)據(jù),因此,,它們被稱作是多指令流多數(shù)據(jù)流計算機,,即MIMD(MultipleInstructionMultipleData,MIMD)計算機。 曾經(jīng)在很長一段時間內(nèi)成為超級并行計算機主流的向量計算機除了標量處理單元之外,,最重要的是具有能進行向量計算的硬件單元,。在執(zhí)行向量操作時,一條指令可以同時對多個數(shù)據(jù)(組成一個向量)進行運算,,這就是單指令流多數(shù)據(jù)流(SingleInstructionMultipleData,SIMD)的概念,。因此,我們將向量計算機稱為SIMD計算機,。 第四種類型即所謂的多指令流單數(shù)據(jù)(MultipleInstructionSingleData,MISD)計算機,。在這種計算機中,各個處理單元組成一個線性陣列,,分別執(zhí)行不同的指令流,,而同一個數(shù)據(jù)流則順次通過這個陣列中的各個處理單元。這種系統(tǒng)結(jié)構(gòu)只適用于某些特定的算法,。 相對而言,,SIMD和MISD模型更適合于專用計算。在商用并行計算機中,,MIMD模型最為通用,,SIMD次之,而MISD最少用,。PII的MMX指令采用的是SISD,,高性能服務器與超級計算機大多屬于MIMD,。 1966年,MichealFlynn根據(jù)指令和數(shù)據(jù)流的概念對計算機的體系結(jié)構(gòu)進行了分類,,這就是所謂的Flynn分類法。Flynn將計算機劃分為四種基本類型,,即SISD,、MIMD、SIMD,、MISD,。而對于大多數(shù)并行計算機而言,多個處理單元都是根據(jù)不同的控制流程執(zhí)行不同的操作,,處理不同的數(shù)據(jù),,因此,它們被稱作是多指令流多數(shù)據(jù)流計算機,,即MIMD(MultipleInstructionMultipleData,MIMD)計算機,。 SIMD、SIMD,、SIMT比較與總結(jié):1,、SIMT與SIMD本質(zhì)相同:都是單指令多數(shù)據(jù)。 2,、SIMT比SIMD更靈活,,允許一條指令的多數(shù)據(jù)分開尋址;SIMD是必須連續(xù)在一起的片段,。 3,、SIMT形式上是多線程,本質(zhì)上還是一個線程,,只不過數(shù)據(jù)可以零散的分散開,。但是如果你真的將數(shù)據(jù)分散開的話,執(zhí)行效率上又會大打折扣,,因為不滿足并行訪問的要求,。 總之SIMT是SIMD的一種推廣,更靈活而已,。
參考,、轉(zhuǎn)自: 1、https://baike.baidu.com/item/SIMD/3412835?fr=aladdin 2,、https://baike.baidu.com/item/sisd 3,、https://blog.csdn.net/a812073479/article/details/80572035 |
|