<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > Helium 技術(shù)講堂 | 數獨、寄存器和相信的力量

Helium 技術(shù)講堂 | 數獨、寄存器和相信的力量

作者: 時(shí)間:2024-06-25 來(lái)源:Arm 收藏

當人工智能 (AI) 下沉到各式各樣的應用當中,作為市場(chǎng)上最大量的物聯(lián)網(wǎng)設備也將被賦予智能性。 Helium? 技術(shù)正是為基于  Cortex -M 處理器的設備帶來(lái)關(guān)鍵機器學(xué)習與數字信號處理的性能提升。

本文引用地址:http://dyxdggzs.com/article/202406/460299.htm

在上周的 Helium 技術(shù)講堂中,大家了解了 Helium 技術(shù)的核心“節拍式”執行 。 今天,我們將共同探討一些復雜而又有趣的交錯加載/存儲指令。 若您想要了解如何高效利用 Helium,千萬(wàn)別錯過(guò)文末視頻,通過(guò) 技術(shù)專(zhuān)家的實(shí)例演示,詳解 Helium 如何為端點(diǎn)設備引入更多智能。

Arm Helium 技術(shù)誕生的由來(lái)

、和相信的力量

作者:Arm 架構與技術(shù)部 M 系列首席架構師兼研究員 Thomas Grocutt

DSP 處理中一個(gè)重要部分就是對不同的數據格式進(jìn)行高效處理,這些數據格式通常需要轉換成不同的排列方式進(jìn)行計算。圖像數據就是一個(gè)很好的例子,它通常以紅、綠、藍和 alpha 像素值交錯流的形式被存儲。但是,為了將計算矢量化,就需要將所有紅色像素放在一個(gè)矢量中,綠色像素放在另一個(gè)矢量中,以此類(lèi)推。在 Neon 架構中,VLD4/VST4 指令可以執行這種轉換,如下圖所示。

VST4 將四個(gè) 128 位交錯排列,共存儲 512 位數據。Neon 架構有多種交織/去交織運算,可支持不同的格式。例如,提供的 VST2 可用于交織立體聲音頻的左右聲道。這些指令還支持從 8 到 32 位不等的元素大小。

MVE 的“節拍式”執行的主要優(yōu)點(diǎn)之一,是它允許內存和 ALU 運算重疊,即使在單發(fā)射處理器上也是如此。 如下圖所示,基于此技術(shù)要實(shí)現性能的翻倍,所有指令必須執行相同的工作量。

顯而易見(jiàn),重疊帶來(lái)的性能提升會(huì )因 VST4 這樣的寬存儲指令而大打折扣。 MVE 提供的解決方案是將存儲空間分割成與 ALU 運算相平衡的塊,每個(gè)塊存儲 128 位數據。 MVE 允許由 VST40、VST41、VST42 和 VST43 這四條指令構成四路交織。但到此并未結束,仍有不少問(wèn)題存在:

顯而易見(jiàn)的拆分方法是讓四條指令分別存儲不同的數據流(例如 VST40 存儲所有紅色像素,VST41 存儲綠色像素等)。對于 8 位像素數據,這意味著(zhù)每條指令將存儲 16 個(gè)非連續字節。這種訪(fǎng)問(wèn)模式對內存子系統來(lái)說(shuō)非常復雜,會(huì )導致大量停滯。相反,指令需要生成大塊連續請求。

要正確配合其他矢量指令,必須將文件端口設置為訪(fǎng)問(wèn)寄存器文件的行(即整個(gè)矢量寄存器),而不是列(即四個(gè)寄存器的第一個(gè)字節),如果要將數據交織存儲到連續內存塊中,則需要訪(fǎng)問(wèn)列。

為了避免我在上一篇內容中描述的時(shí)間跨越問(wèn)題,我們需要將指令分成幾個(gè)“節拍”,先讀取寄存器的 [63:0] 位,然后在下一個(gè)周期讀取 [127:64] 位。

解決方案必須同時(shí)適用于兩路交織和四路交織,以及 8、16 和 32 位數據運算。

面對所有這些相互矛盾的限制,我們就像掉進(jìn)了兔子洞,我不禁想起了《愛(ài)麗絲夢(mèng)游仙境》中的情節:

愛(ài)麗絲:這是不可能的。

瘋帽匠:只要你相信,一切皆有可能。

所以,讓我們暫且放下懷疑的態(tài)度,仔細研究一下讀取端口,看看會(huì )發(fā)生什么。

MVE 重復使用浮點(diǎn)寄存器文件,因此矢量寄存器(Q0 至 Q7)由每四個(gè)一組的若干組 “S” 寄存器組成。每個(gè)列多路復用器選擇相同的行,然后將數據合并以訪(fǎng)問(wèn)整個(gè) Q 寄存器(見(jiàn)上圖)。但是,如果不能從一列中的任何寄存器中選擇,而是將端口扭曲,從交替列中的寄存器中選擇,如下圖所示,會(huì )如何呢:

如果 8:1 多路復用器上的控制輸入設置為相同值,則可讀取一行數據(例如 S0 和 S1)。但是,如果使用不同的值,則可以讀取一列中的一對值(如 S0 和 S4)?,F在看起來(lái)似乎可行,我們能夠從列和行中讀取數據。如果我們把圖的下面放大,并將寄存器編號替換為它們所連接的多路復用器的編號,就會(huì )得到下圖結果:

這類(lèi)似于一道簡(jiǎn)單的謎題,在重復矩陣的每一行和每一列中,每個(gè)數字只會(huì )出現一次,只不過(guò)這個(gè)矩陣是 2 x 2 的,而不是平常的 9 x 9。由于只能從一列中讀取兩個(gè)值,并且只能處理 32 位值(多路復用器的寬度),因此這種模式只能提供兩路交織的解決方案。由于我們需要一種可處理所有交錯模式和數據寬度組合的模式,因此可想象將所有組合垂直堆疊起來(lái),得到一個(gè)多分辨率的三維謎題。解決一層謎題輕而易舉,但解決整個(gè)三維謎題的過(guò)程一定令人嘆為觀(guān)止。此外,我們還需要考慮上文提到的其他限制因素,如連續內存訪(fǎng)問(wèn),以及在不同周期內拆分對寄存器上下 64 位的訪(fǎng)問(wèn)。

經(jīng)過(guò)一番思索,我意識到可以將問(wèn)題一分為二:一是確定一種可在單個(gè)統一的問(wèn)題空間中表示全部約束的方法,二是解決這些約束的單調任務(wù)。由于該模式類(lèi)似于一個(gè)非常復雜的數獨問(wèn)題,而許多數獨程序都是基于 SAT 解算器的,因此我產(chǎn)生了使用 SAT 解算器來(lái)完成單調約束求解任務(wù)的想法。經(jīng)過(guò)努力,我想出了一種能表示所有約束的方法,一番調試后,第一個(gè)可行的解決方案誕生了。雖然它不完善,而且會(huì )導致多路復用器的控制邏輯難以實(shí)施,但至少勝利在望了。由于不想對解決方案進(jìn)行手動(dòng)清理,我們添加了一些額外的約束條件,引入了一些對稱(chēng)性,并產(chǎn)出了最終的解決方案,它竟然是一對雙嵌套四重螺旋結構:

為了讓大家看到嵌套的螺旋線(xiàn),我在下圖中標注了單個(gè)多路復用器的路徑。如圖所示,路徑每行交替通過(guò) 32 位 “S” 寄存器(如左圖所示),每?jì)尚薪粨Q通過(guò) “S” 寄存器上下兩半 16 位區域(如右圖所示)。

直覺(jué)告訴我,這種扭曲的方法對于三路交織來(lái)說(shuō)是行不通的,經(jīng)證實(shí)我是對的,SAT 解算器正式證明無(wú)解。

這種扭曲方法意味著(zhù)可以同時(shí)訪(fǎng)問(wèn)寄存器文件行和列中的數據。但問(wèn)題在于,讀取端口返回的字節可能順序有誤,而順序取決于訪(fǎng)問(wèn)的寄存器。要糾正此情況,就需要使用一個(gè)交叉多路復用器,將一切交換回正確的位置。由于如 VREV 等其他指令和復數原生操作指令會(huì )用到交叉多路復用器,所以我們正好能免費使用它。這正印證了那句話(huà):“如果你必須使用一個(gè)硬件,請物盡其用?!?/p>

下圖顯示了由讀取端口扭曲模式衍生出的一些指令訪(fǎng)問(wèn)模式。第一種情況 (VST2n.S32) 顯示從矢量寄存器 Q0 和 Q1 讀取 32 位 (S32),并將其兩路交織(如左右音頻通道)。圖中顏色代表兩條指令分別讀取的寄存器部分(即 VST20 讀取橙色部分),元素中的文字表示內存中存儲的字節偏移。

可以發(fā)現,上述 S8 和 S16 模式都將相同的數據放在寄存器的相同顏色區域內;唯一不同的是每節中字節的排列方式。這意味著(zhù), 只需在交叉多路復用器中使用不同的配置,16 位模式也能支持 8 位。 這些模式也適用于加載指令所使用的寫(xiě)入端口。除了可以建立寄存器文件端口外, 這些模式還意味著(zhù)內存訪(fǎng)問(wèn)始終是一對 64 位的連續塊,這樣可以提高內存訪(fǎng)問(wèn)的效率。 另外,這些數據塊地址的第 [3] 位總是不同的, 因此可以在擁有兩組交織 64 位內存的系統上并行發(fā)送。

研究團隊從這些指令中積累了兩條重要的經(jīng)驗。 首先,要想在 gate 數量和效率方面取得突破式進(jìn)展,就必須在設計架構的同時(shí)對微架構的細節同步思考設計。其次,要保持信念,相信一切皆有可能。


我們將在下一篇 Helium 文章中繼續探討以?xún)却嬖L(fǎng)問(wèn)為主題的相關(guān)內容,并介紹一些實(shí)現循環(huán)緩沖的技術(shù)知識。持續關(guān)注 Helium 技術(shù)講堂,我們下期再見(jiàn)!



關(guān)鍵詞: Arm 數獨 寄存器

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>