女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

什么是SIMD(單指令多數據)?SIMD如何工作?

我快閉嘴 ? 來源:半導體行業觀察 ? 作者:半導體行業觀察 ? 2021-01-06 16:55 ? 次閱讀

在1980年代,超級計算機的外觀所示。而Cray的半圓形則是80年代超級計算機的代名詞。那就是一臺超級計算機的樣子。

在一篇寫RISC-V的文章里,我們提到過去的超級計算,這兩者之間有什么關系?主要是因為,我們提到的Cray計算機,也被稱為矢量處理機——一種已經被拋棄的“老古董”。

然而,RISC-V卻將Cray風格的矢量處理重新帶回來,并認為它應該替代SIMD(單指令多數據),這是否是一個異端?

這樣大膽而又不同的策略肯定需要一些解釋。為什么RISC-V設計師會采用與競爭對手x86,ARM,MIPS等完全不同的方法?

像往常一樣,我們需要繞道而行,以解釋這些技術究竟是什么以及它們有何不同。盡管SIMD指令排在最后,但我相信從SIMD開始更容易掌握矢量處理指令。

什么是SIMD(單指令多數據)?

無論是基于x86還是基于ARM的大多數微處理器,在其中都提供了我們所謂的SIMD指令。您可能聽說過MMX,SSE,AVX-2和AVX-512。而ARM有自己的高級SIMD和SVE。

這些指令允許您執行的操作是將相同的操作應用于多個元素。我們可以將它與SISD(單指令單數據)進行對比,后者僅在單個元素之間執行操作。下圖是對此的簡單說明:

我們可以編寫一些簡單的代碼來說明差異,以下是SISD的示例。我們也可以稱其為標量(單個值)上的操作:

3 + 4 = 7

4 * 8 = 32

SIMD是關于向量(多個值)的操作:

[3,2,1] + [1,2,2] = [4,4,3]

[3,2,1]-[1,2,2] = [2,0,-1]

讓我更詳細地了解一些用于SISD的偽匯編代碼(pseudo assembly code)。在這種情況下,我們要添加兩個數組,每個數組包含兩個元素。每個元素都是32位整數。一個從地址14開始,另一個從地址24開始:

load r1,14

load r2,24

add r3,r1,r2; r3←r1 + r2

load r1,18

load r2,28

add r4,r1,r2; r4←r1 + r2

使用SIMD,我們可以加載多個值并執行多個加法:

vload.32 v1、14 vload.32

v2、24

vadd.i32 v3,v1,v2; v3←v1 + v2

通常將向量和SIMD指令加上前綴v以將它們與標量指令分開。約定各不相同,但這是受ARM啟發的,.32后綴表示我們要加載多個32位值。假設我們的向量寄存器v1和v2是64位,則意味著每次load兩個元素。

該vadd指令的.i32后綴表示我們要添加32位帶符號整數。我們本來可以用來.u32表示無符號整數。

當然,這是一個完全不現實的示例,因為沒有人會對這幾個元素使用SIMD。更現實的是,我們將對16個元素進行操作。

SIMD如何工作?

我們對SIMD指令的工作方式進行了高級描述。但是實際上,它們是如何在CPU級別處理的?執行SIMD指令時,CPU內部發生了什么?

在下面,您可以看到RISC微處理器的簡化圖。

您可以將彩色條視為將數據推入CPU的不同部分的管道。我們在這里的主要興趣是藍色的東西,它們推動了我們操作的數據以及通過系統的指令。綠色管道是存儲單元的地址位置。

在一個簡單的微處理器中,您只有一個算術邏輯單元(ALU)。這樣的處理器的一個例子是在Commodore 64中使用的6502。ALU類似于CPU的計算器。它可以加減數字,它使用兩個數字作為輸入,然后將它們相加或相減,然后將輸出到底部。輸入來自寄存器,輸出返回到寄存器(具有您要操作的保持編號的內存單元)。

要將我們的CPU變成可以同時處理數十個數字的執行SIMD的怪物,我們需要進行一些更改。以下是升級的簡化示例,該升級允許同時將兩個數字相加。請注意,我們僅顯示與寄存器和ALU相關的部分。

v1,v2而v3就是我們所說的向量寄存器。它們分為不同的部分,顯示為v1?和v1?。我們可以將向量的每個部分或元素輸入到單獨的ALU中。這使我們可以同時執行多個添加。對于真正的CPU,我們不只是添加一個額外的ALU。我們加一打。實際上,我們變得更加瘋狂,我們添加了十二個乘法器和其他功能單元,它們能夠執行CPU的所有不同操作。對于非常簡單的CPU,您沒有乘法器,因為您可以通過重復的加法和移位(加和減數字)來模擬乘法。

我們如何獲得SIMD

那么這些SIMD指令是如何產生的呢?快速的圖像處理的需求是起點。圖像中的每個像素由四個8位值(RGBA)組成,需要將其視為單獨的數字。為數百萬個像素分別添加這些值很慢。SIMD指令是提高此類任務性能的明顯方法。

每個像素由四個分量組成:紅色,綠色,藍色和Alpha值。每個都是一個字節,應分別計算。如果32位寄存器是具有4個組件的向量寄存器,則可以執行此操作。

SIMD還用于GPU內部,因為它們會添加位置向量,相乘矩陣。復合像素顏色值等。

SIMD的好處

雖然很難并行執行代碼,但是,當處理諸如圖像,幾何,機器學習和大量科學計算之類的事情時,對數據的多個元素執行相同的操作相當簡單。

換而言之,SIMD為我們提供了一種輕松加快這些計算速度的方法。如果可以只執行一條指令就可以加8個數字,那么基本上可以實現8倍的加速。因此,多年來x86和ARM微處理器堆積在大量SIMD指令上就不足為奇了。

GPU基本上包含執行大量SIMD計算的核心存儲區。這就是大大提高了圖形性能的原因,也是為什么科學代碼越來越多地使用GPU的原因。

但是,如果SIMD如此出色,為什么RISC-V放棄它并進行向量處理呢?更具體地說,他們沒有添加SIMD指令集擴展,而是添加了Vector指令集擴展。

SIMD指令存在的問題

RISC-V設計師David Patterson和Andrew Waterman寫了一篇文章:SIMD指令被認為有害。

這是一本有趣的文章,但是它比我在這里更深入地介紹了技術。Patterson和Waterman描述了問題:

就像阿片類藥物一樣,SIMD的起點足夠純凈。架構師將現有的64位寄存器和ALU分為許多8位,16位或32位塊,然后對其并行進行計算。操作碼提供數據寬度和操作。數據傳輸只是單個64位寄存器的加載和存儲。誰會反對呢?

但這是一種推托:

自1978年以來,IA-32指令集已從80條增加到大約1400條,主要是由SIMD推動的。

因此,x86和ARM的規范和手冊非常龐大。相反,您可以在一張雙面紙上獲得所有最重要的RISC-V指令的概述。這對于那些用硅制造芯片的人以及那些制造匯編器和編譯器的人有影響,對SIMD指令的支持通常會在以后添加。

RISC-V的設計者希望有一個實用的CPU指令集,該指令集可用于長時間教學。在RISC-V到來之前,他們使用的是在商業界不再受追捧的MIPS,因為學術界不希望其教學是基于行業的潮流和炒作。大學強調教學知識的持久性。這就是為什么他們更愿意講授數據結構和算法,而不是說如何使用調試工具或IDE。

因此,SIMD的發展是站不住腳的。每隔幾年就會有新的說明。沒有什么是非常耐用的。因此,Patterson 和Waterman認為:

向量架構是一種較舊的,更優雅的利用數據級并行性的替代方法。向量計算機從主存儲器中收集對象,并將其放入順序的長向量寄存器中。

回到Cray樣式的矢量處理?

因此,RISC-V設計人員使用矢量指令而不是SIMD指令創建了擴展。但是,如果這樣好得多,為什么它沒有更早發生,為什么矢量處理在過去就不受歡迎了?

在回答任何一個問題之前,我們需要實際了解什么是向量處理。

向量與SIMD處理

理解差異的最好方法是查看一些C / C ++代碼。在SIMD中,向量是固定大小的,并被視為固定長度類型,如下所示:

struct Vec3 {

int x0;

int x1;

int x2;

};

struct Vec4 {

int x0;

int x1;

int x2;

int x4;

};

這意味著矢量加法函數處理的是固定長度:

Vec3 vadd3(Vec3 v1,Vec3 v2){

return Vec3(v1.x0 + v2.x0,

v1.x1 + v2.x1,

v1.x2 + v2.x2);

}

我們能想到的Vec3,Vec4并vadd3為現有的硬件。但是,開發人員需要更高級別的功能,并且可以組合以下操作以創建更多通用功能:

void vadd(int v1 ,int v2 ,int n,int v3 ){

int i = 0;

while(i

u = Vec3(v1 [i],v1 [i + 1],v1 [i + 3]);

v = Vec3(v2 [i],v2 [i + 1],v2 [i + 3]);

w = vadd3(u,v); //efficient vector operation

v3 [i] = w.x0;

v3 [i + 1] = w.x1;

v3 [i + 2] = w.x2;

i+ = 3;

}

}

您可以將其視為偽代碼(pseudo-code)。要了解的一點是,您可以在處理較小固定長度向量的函數上構建功能來處理任何長度的向量。

像使用老式Cray超級計算機一樣進行矢量處理,這實際上是RISC-V人士提出的,就是將諸如vadd硬件之類的功能。

那這實際上是什么意思呢?

向量處理在硬件中的實現

這意味著在內部,我們仍然可以在某些固定寬度矢量上運行SIMD單元。但這不是匯編程序員所看到的。相反,就像vadd匯編代碼一樣,指令也不限于特定的向量長度。程序員可以將特殊的狀態和控制寄存器(CSR)設置為他或她正在操作的向量的長度。這有點類似于如何vadd使用n參數指定向量的長度。

相反,我們得到了一些很長的向量。比SIMD指令使用的向量寄存器長得多。可能有數百個合適的元素。像我們對SIMD樣式矢量寄存器所做的那樣,為這些元素的每一個創建ALU和乘法器是不切實際的。

向量單元按順序處理元素。當前處理的元素將突出顯示。在這里,我們將單對元素。但實際上,我們使用多個ALU并按順序處理多個元素。

相反,當CPU讀取一個vadd函數時會發生什么,就像我們在偽代碼示例中所做的那樣,它開始遍歷這些大寄存器。這是一個代碼示例:

vsetlen r1 , 16, 120 ; 120 element vector. Each element 16-bit

vload v1, 14 ; Load 120 elements start at address 14

vload v2, 134 ; Load elements starting at address 123

vadd v3, v1, v2 ; Add all 120 elements.

vstore v3, 254 ; Store result at address 254

在執行操作之前,必須通過設置向量中元素的數量以及每個元素的大小和類型來配置向量處理器。在此示例中,我將其簡化。我們一直在處理帶符號整數。但是在實際系統中,您必須能夠指定要處理的是浮點數以及帶符號的還是無符號的整數。

vload做什么操作取決于配置。在這種情況下,我們將加載120個元素,每個元素距離內存16位寬。

vadd遍歷v1andv2向量寄存器中的所有120個元素。將每個元素相加并將結果寫入寄存器 v3。為了更好地了解它是如何工作的,讓我們討論一下所涉及的時鐘周期數。

時鐘周期是微處理器執行一項簡單任務所需要的時間。解碼指令可能需要一個時鐘周期,一個指令要添加兩個數字。諸如乘法之類的更復雜的操作可能需要多個時鐘周期。

因為我們有四個ALU,所以我們可以在每個時鐘周期執行四個加法運算。這意味著vadd需要30個時鐘周期才能完成:

120/4 = 30

這聽起來可能不太好。為什么不使用直接循環并執行這些SIMD指令的匯編程序直接執行相同操作。為什么要在硬件中實施必須迭代執行的操作?

向量處理的好處

一個主要的好處是我們需要小得多的程序。我們不需要編寫具有多個加載,比較和循環的程序。

Patterson和Waterman在他們的文章“ SIMD指令被認為有害”中提供了一個示例程序進行比較。這是他們對程序大小差異的觀察。

MIPS-32 MSA和IA-32 AVX2的代碼的三分之二至四分之三是SIMD開銷,用于為主SIMD循環準備數據或在n不等于n的倍數時處理邊緣元素。SIMD寄存器中的浮點數。

但是更重要的是,對于矢量指令,您不必繼續重復解碼相同的指令。執行重復的條件分支等。在代碼示例中,Patterson和Waterman使用它們來表示,與使用矢量指令的RISC-V版本相比,SIMD程序需要執行的指令多10至20倍。

原因是SIMD循環每次迭代僅處理2到4個元素。在矢量代碼中,假定硬件支持具有64個元素的矢量寄存器。因此,每次迭代處理了64個元素的批處理,從而減少了需要迭代的次數。

可以在運行時查詢最大向量長度,因此不需要對64個元素的大批量大小進行硬編碼。

解碼較少的指令會減少功耗,因為解碼和獲取會消耗大量功耗。

此外,我們實現了所有好的界面設計應努力實現的目標:隱藏實現細節。為什么這么重要?看看USB插頭嗎?當USB標準無需物理改變插頭即可提高性能時,我們會喜歡它。

從USB-1到USB-3,我們避免更改接口。我們可以使用相同的電纜。同樣,Vector擴展使我們可以在進行內部改進時保持相同的界面。

隨著芯片技術的改進,您可以使用更多的晶體管。您可以使用它來添加更多的ALU和乘數,以并行處理更多的矢量元素。對于具有SIMD指令的CPU,這意味著您現在可以處理幾百條針對新向量長度的新指令。我們也必須重新編譯程序才能處理這些新添加的長向量,以提高性能。

但使用RISC-V則不需要這樣,因為代碼看起來一樣。唯一的改變是,vadd它將以更少的周期完成,因為它具有更大的SIMD單元,從而可以在每個時鐘周期內處理更大數量的元素。

如果矢量機如此厲害,為什么會被拋棄?

我想David Patterson在他先前的著作中沒有很好地解釋這個問題——為什么Cray矢量處理機基本上已經淘汰了。

卡車還是賽車?

要了解原因,我們需要了解權衡。如果您想將最大數量的貨物從A運到B,則基本上可以采用兩種方式。使用賽車以少量貨物來回快速行駛。

或者,您可以使用大型的緩慢移動的卡車,該卡車可以拖運大量貨物但移動緩慢。

快速傳送少量數據或緩慢傳送大量數據?

大多數通用軟件是由賽車提供。通用程序不容易序列化。他們需要什么數據取決于執行的指令,有各種各樣的條件分支和對內存的隨機訪問要考慮在內。每次訪問倉庫(內存)時,您根本無法拿起很多貨物,因為您不知道接下來需要什么。

因此,通用微處理器往往具有較大的快速存儲器高速緩存,因此CPU可以在需要時快速獲得所需的信息(與汽車類似)。

相反,矢量處理器的工作方式與GPU非常相似。他們沒有處理通用程序。通常,它們用于科學軟件,例如天氣模擬,在其中您需要大量可以并行處理的數據。GPU同樣可以并行處理大量像素或坐標。

因此,您無需快速移動,因為每次都可以拾取大量數據。因此,GPU和矢量機通常具有較低的時鐘頻率和較小的緩存。相反,他們的內存系統設置為并行獲取大量數據。換句話說,它們像卡車一樣移動貨物來移動數據。一次很多,但是很慢。

向量機實際上在pipelines中具有數據,因為可以預測下一個數據是什么。

向量處理器很小

當然,您可以提高矢量處理器的時鐘頻率,并為它們提供大量的高速緩存,但是,當您獲得更多更好的選擇時,又有什么意義呢?您不用花在緩存上的所有晶體管,就可以用來擴展并行處理更多元素的能力。此外,瓦特使用率和健康水平也不隨時鐘頻率線性增長。它增長更快。因此,要降低熱預算,必須降低時鐘頻率。

如果查看Esperanto Technologies的ET-SoC-1解決方案,您會發現所有這些折衷考慮在內。就晶體管數量而言,它們的SoC大小與Apple的M1 SoC相同。然而,矢量處理內核所需的硅要少得多,因為我們的目標不是高單線程性能。M1 Firestorm核心是怪獸,因為它們使用了許多晶體管來實現亂序執行(OoOE),分支預測,深層流水線和許多其他功能,以使單線程性能讓你大跌眼鏡。

相比之下,ET-SoC-1可以容納1000個以上實現Vector指令擴展的RISC-V CPU內核。這是因為矢量處理器可以做得非常小:

緩存需求最少。

它們是有序的,因此您可以通過不實現復雜的OoOE控制器邏輯來節省大量芯片。

較低的時鐘頻率簡化了很多。

因此,如果您可以將問題描述為對大向量的運算,那么通過進行向量機設計,使用相同數量的晶體管,您可以獲得一些瘋狂的性能提升。

向量處理器吸引了通用計算

但是這里有一個關鍵:如果無法以這種方式表示您的程序,那么您就陷入了一個痛苦的世界。執行不能在大向量上運行的常規桌面軟件將獲得可怕的性能。為什么?

您的時鐘頻率低。您沒有OoOE,并且您的緩存很小。因此,每條需要獲取一些數據的指令都必須等待很長時間。這是CrY的問題。它們根本無法用于通用計算。由于使用其他傳統CPU的其他市場價格便宜,而且Cray計算機上運行的許多軟件都可以通過在多核計算機上運行,使用群集或其他方法來很好地完成。

當常規計算機開始需要矢量處理時,這是用于多媒體應用程序的。圖像處理之類的東西。在這種情況下,您通常使用小的短向量。然后,SIMD指令是顯而易見的簡單解決方案。他們非常直接地進行設置。只需添加一些向量寄存器和操作即可。矢量指令需要更多的思考和計劃。您需要設置矢量長度和元素類型的方法。在程序之間切換時,大的向量對于保存和恢復是不切實際的。無論如何,這些程序不需要長向量。

因此,與SIMD相比,矢量擴展最初沒有明顯的優勢。由于矢量處理對于通用計算而言不是很好,因此Esperanto 公司開發的ET-SoC-1例如具有四個用于通用計算的RISC-V核心,稱為ET-Maxion。這些更像是M1 Firestorm核心:

更大的緩存

智能分支預測器

多指令解碼器

亂序執行

這些將運行操作系統并將工作任務調度到帶有矢量擴展的較小的RISC-V內核(ET-minion)。這可能是架構選擇的類型,我們將看到更多:混合使用具有不同強度的不同類型的核心。

通用計算不能真正受益于擁有大量內核。但是,對于特殊任務,使用非常規內核要比用于通用計算的大型內核好得多。

例如,矢量處理器可以很好地完成所有這些任務:

機器學習

壓縮圖像,壓縮文件等

密碼學

多媒體:音頻視頻

演講和手寫

聯網。奇偶校驗,校驗和

數據庫。哈希/聯接

因此,給定X晶體管數量的預算,要加快這些任務的執行速度,最好選擇矢量處理器設計,而不是增加更多的通用內核。

在這兩種情況下,我都在談論蘋果如何通過使用專用協處理器來從其M1芯片中提高速度。這就是這個意思。原則上,我們可以簡單地將向量擴展名添加到任何RISC-V通用CPU中。但是您可以選擇通過以下方式來定制向量處理的方法:刪除大型緩存,將無序執行單元踢到路邊,降低時鐘頻率,使用更簡單的分支預測器以及擴大內存訪問范圍(讀取更多數據)一次插入數據管道)。

如果這樣做的話,您將獲得功耗更低得多的小得多的芯片,與用于快速通用計算的胖芯片相比,矢量處理的性能可能更好。由于它體積小,功耗低,因此可以有很多。

實際上,這只是驗證我先前制作的專用協處理器案例的另一種方法。

為什么矢量處理器再次出現問題

因此,這使我們可以完整地回到我們一直以來一直試圖回答的內容。為什么矢量指令現在有意義,但過去卻被放棄了。

該問題已得到部分回答。SIMD方法使我們陷入困境。但是更重要的是,我們的計算機現在正在執行更多各種各樣的任務。特別是機器學習已經變得非常龐大。這已成為數據中心的主要重點。蘋果并非沒有理由在其iPad和iPhone蘋果硅芯片上添加了神經引擎。

Google并非毫無理由地使用Tensor處理單元(TPU)在人群中提供了更高速度的機器學習。由于深度學習的興起,處理非常大的陣列又重新投入了業務。

因此,我認為RISC-V將使用Vector擴展而不是SIMD擴展是非常明智的舉動。SIMD誕生于一個世界,在多媒體環境中主要需要短向量。我們已經不在那個世界上了。向量擴展使用一塊石頭殺死兩只鳥:

矢量指令不會使ISA膨脹。我們不需要繼續添加新的。

未來的證據更多。

添加更多的ALU,乘法器和其他功能單元后,無需重新編譯。

它們是機器學習應用程序的絕佳選擇。

對矢量指令的批評

當然,并不是每個人都對我對矢量指令的熱情滿懷。我們得看一些批評。經常看到的一種指責是整個系統更加復雜,SIMD更加容易。人們認為矢量擴展將使芯片膨脹。

坦率地說,這不是批評,我們應該認真對待。Esperanto 已經證明,他們可以使用RISC-V向量擴展來制造小型高效芯片。

David Patterson本人并不是該領域的新手。他知道自己在做什么。他不僅是第一個RISC處理器背后的關鍵架構師之一,而且還積極參與了1990年代另一個鮮為人知的項目,即IRAM項目。

這在許多方面都是RISC的替代方法,后者采用了矢量處理方法。實際上,與發明原始的RISC相比,最后從事矢量處理的RISC-V人士可能會受到更大的影響。Patterson和其他人開始真正從他們的IRAM項目中相信矢量處理的強大功能和優雅。因此,V在RISC-V實際上代表兩個5和載體。RISC-V從一開始就被認為是用于矢量處理的體系結構。

IRAM項目非常有趣,因為它預示了蘋果M1芯片后來發生的許多事情。在廣泛討論如何在SoC上使用DRAM及其優勢。提示認為統一內存。

當被問及使用向量處理指令的復雜性和難度時,David Patterson寫道:沒那么難。我們很早以前在IRAM項目中通過并行執行較小的數據類型來做到這一點。許多人都在使用這種矢量架構樣式來構建RISC-V處理器。

在向量函數之間傳遞數據

但是,這也許是更嚴重的批評。您可以輕松創建固定長度的具體矢量類型和元素類型,并可以在高級語言中使用。因此,您可以創建一系列函數,這些函數可以獲取通過向量寄存器傳遞參數數據。因此,我們可以組合多個功能,其中所有數據都使用矢量寄存器在它們之間傳遞。

例如,如果函數看起來像這樣,我們可以很容易地與其他帶有Vec3參數的函數一起使用:

Vec3 vadd3(Vec3 v1,Vec3 v2){

return Vec3(v1.x0 + v2.x0,

v1.x1 + v2.x1,

v1.x2 + v2.x2);

}

如果矢量擴展名要求您將數據作為數組或指針傳遞給內存,則要困難得多。這意味著兩個向量函數之間的數據將始終必須通過拋出主存儲器來交換數據。這肯定會減慢速度。這是爭論的重點:

您提倡的方法不能完全做到這一點。您無法為采用或返回千字節數據的函數發明合理的調用約定。當前的體系結構都在這些向量寄存器中傳遞參數和返回值,因為它們的計數和大小是ISA的一部分,即穩定且為編譯器所知。

但是,我可以看到一些解決方法。例如,使用GPU編程,人們使用可以任意長度的CUDA陣列。這些實際上只是包裝處理程序到圖形內存中的數組。我不明白為什么向量寄存器不能以相同的方式工作。您只需使用特殊的數組類型作為這些向量函數的參數。

如果這不可能,那么“ Just in Time Compilation”實際上可能是一個不錯的選擇。例如,使用Julia編程語言,即時編譯器通常會消除不同函數調用之間的接口。可以想象一個JIT以這種方式將幾個基于向量的功能合并在一起,以避免在所有處理完成之前將結果寫到內存中。

但老實說,這是我希望看到的。

為什么不使用GPU?

我看到的最后一個批評是,如果需要對長向量進行運算,則應該只使用GPU。這里的想法是,如果您需要對大數據塊進行操作,那么您還可能會承受將大數據塊傳輸到GPU進行處理然后讀取結果的性能損失。

有兩種看待批評的方法。如果向量擴展名僅用于較臃腫的通用CPU,它將有一些優點。無論如何,為快速處理標量數據而優化的CPU都將在向量處理方面具有劣勢。

但是,我們不能假設這一點。正如我們從Esperanto中所看到的,設計專門的RISC-V處理器(例如ET-Minion)是完全有效的,ET-Minion是用于快速矢量處理的定制模式。

而且,如果我們相信Esperanto公司的主張,他們的解決方案將勝過基于GPU的機器學習解決方案。

我通常會在很多RISC-V批評中看到這個問題。它常常會遺漏標記,因為它假定我們一直在談論用于運行Windows,Linux或macOS的通用處理器。但是,RISC-V應該適用于從微控制器,協處理器到超級計算機的任何事物。

矢量擴展對于通用CPU仍然有意義,僅因為它隱藏了矢量處理的實現細節。SIMD不能做的事情引起了很多ISA膨脹。

通用指令集的好處

即使專用處理器更適合長矢量,這并不意味著通用CPU和專用內核不能同時是具有矢量擴展的RISC-V處理器。

Playstation 3新穎的單元體系結構的問題之一是通用PowerPC CPU無法與功能更有限的協處理器共享指令集。實際上,PS3架構與Esperanto ET-SoC-1有很多共同點。PS3不是使用ET-Maxion內核作為通用CPU,而是使用PowerPC CPU來運行操作系統。PS3使用協同處理元素(SPE)代替了ET-Minion核心來處理面向矢量的主要工作量。

這是早期嘗試做M1今天正在做的事情以及ET-SoC-1將來可能做的事情的嘗試。

盡管寫了無數關于PS3失敗的頁面,但提到的一個原因是中央處理器和SPE沒有共享指令集。

對于開發人員而言,首先在主PowerPC CPU上進行矢量處理代碼的開發和故障排除可能會容易得多。因此,在通用CPU上具有RISC-V向量擴展名對開發人員和故障排除很有用。
責任編輯:tzh

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19813

    瀏覽量

    233614
  • ARM
    ARM
    +關注

    關注

    134

    文章

    9312

    瀏覽量

    375161
  • cpu
    cpu
    +關注

    關注

    68

    文章

    11040

    瀏覽量

    216042
  • RISC-V
    +關注

    關注

    46

    文章

    2502

    瀏覽量

    48292
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    進迭時空RISC-V Vector技術實踐

    在CPU核的設計中,SIMD(singleinstructionmultipledata,單指令多數據)是一種常用的數據并行處理方式,通過一條指令
    的頭像 發表于 06-06 16:54 ?50次閱讀
    進迭時空RISC-V Vector技術實踐

    ADSP-21371/ADSP-21375面向汽車音頻的32位高性能浮點SHARC處理器技術手冊

    ADSP-21367和ADSP-21369在引腳和代碼方面完全兼容。這些SHARC處理器基于一個單指令多數據SIMD)內核,支持32位定點和32/40位浮點運算格式,使它們特別適合于高性能音頻應用。
    的頭像 發表于 05-13 09:30 ?207次閱讀
    ADSP-21371/ADSP-21375面向汽車音頻的32位高性能浮點SHARC處理器技術手冊

    ADSP-21467/ADSP-21469第四代高性能DSP技術手冊

    與以往的所有SHARC處理器代碼完全兼容。這些最新的SHARC處理器系列產品都基于單指令多數據SIMD)內核,內核支持32 bit定點以及32/40 bit浮點算法格式,這使得這些處理器特別適合于高性能音頻應用。
    的頭像 發表于 05-12 15:49 ?172次閱讀
    ADSP-21467/ADSP-21469第四代高性能DSP技術手冊

    EE-267:在SISD和SIMD SHARC處理器上實現就地FFT

    電子發燒友網站提供《EE-267:在SISD和SIMD SHARC處理器上實現就地FFT.pdf》資料免費下載
    發表于 01-05 09:54 ?0次下載
    EE-267:在SISD和<b class='flag-5'>SIMD</b> SHARC處理器上實現就地FFT

    TN:將ADSP-21161 SIMD SHARC DSP與AD1836(24位/96kHz)多通道編解碼器接口

    電子發燒友網站提供《TN:將ADSP-21161 SIMD SHARC DSP與AD1836(24位/96kHz)多通道編解碼器接口.pdf》資料免費下載
    發表于 01-03 15:32 ?0次下載
    TN:將ADSP-21161 <b class='flag-5'>SIMD</b> SHARC DSP與AD1836(24位/96kHz)多通道編解碼器接口

    plc基本指令的應用有哪些

    控制、數據類型轉換、算術運算、比較操作、程序控制以及基本的輸入輸出操作等多個方面。 一、邏輯運算指令 邏輯運算指令是PLC編程中最常用的指令之一,它們用于實現基本的邏輯運算功能,包括邏
    的頭像 發表于 10-21 17:16 ?2461次閱讀

    【「算力芯片 | 高性能 CPU/GPU/NPU 微架構分析」閱讀體驗】--了解算力芯片CPU

    ,另外,SIMD(單指令多數據)技術是一種并行計算方法,通過同時對多個數據進行相同的操作來提高計算速度,常用于處理高度并行的數據任務,如圖像
    發表于 10-20 12:03

    《算力芯片 高性能 CPU/GPU/NPU 微架構分析》第1-4章閱讀心得——算力之巔:從基準測試到CPU微架構的深度探索

    相關性和控制相關性問題,使得CPU能夠動態調整指令執行順序,最大化利用執行單元。 4. SIMD:并行計算的交響樂 第四章對CPU計算單元的討論,尤其是對SIMD單指令
    發表于 10-19 01:21

    化學標識選擇工具(GPC)的簡單指

    電子發燒友網站提供《化學標識選擇工具(GPC)的簡單指南.pdf》資料免費下載
    發表于 10-08 11:18 ?0次下載
    化學標識選擇工具(GPC)的簡<b class='flag-5'>單指</b>南

    RV64之64位地址指令

    PC; ?為大多數指令提供硬連線到零的寄存器(r31); ?與 ARM-32 不同,ARM-64 的所有數據尋址模式都適用于所有數據大小和類型; ?ARM-64 去除了 ARM-32
    發表于 09-04 15:15

    CISC(復雜指令集)與RISC(精簡指令集)的區別  

    RISC指令之間可以被打斷,所以理 論上RISC可更快響應中斷。 在此,總結一下CISC和RISC的主要區別: CISC的指令能力強,但多數指令使用率低卻增加了CPU的復雜度,
    發表于 07-30 17:21

    三菱plc累加指令怎么用

    三菱PLC(Programmable Logic Controller,可編程邏輯控制器)是工業自動化領域常用的一種控制器。累加指令是PLC編程中的一種基本指令,用于對數據進行累加操作。在三菱PLC
    的頭像 發表于 06-20 11:34 ?5465次閱讀

    三菱PLC數據傳送指令介紹

    三菱PLC(可編程邏輯控制器)在工業自動化領域的應用日益廣泛,其中數據傳送指令是PLC編程中不可或缺的一部分。數據傳送指令用于實現數據在不同
    的頭像 發表于 06-18 09:53 ?5694次閱讀

    PLC移位寄存器指令工作過程

    指令系統中非常重要的一類,它在順序控制、物流及數據流控制等場合應用廣泛。本文將詳細講解PLC移位寄存器指令工作原理、指令格式、
    的頭像 發表于 06-15 17:37 ?2751次閱讀

    【Vision Board創客營連載體驗】TinyMaix進行手寫數字識別

    keras h5 或 tflite 模型轉換 支持多種芯片架構的專用指令優化: ARM SIMD/NEON/MVEI,RV32P, RV64V 友好的用戶接口,只需要 load/run 模型~ 支持全
    發表于 06-15 08:40