精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

數獨、寄存器和相信的力量

Arm社區 ? 來源:Arm ? 2023-12-29 16:40 ? 次閱讀

人工智能 (AI) 下沉到各式各樣的應用當中,作為市場上最大量的物聯網設備也將被賦予智能性。ArmHelium 技術正是為基于Arm Cortex-M 處理器的設備帶來關鍵機器學習數字信號處理的性能提升。

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

Arm Helium 技術誕生的由來

數獨、寄存器和相信的力量

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

9b2eabce-a625-11ee-8b88-92fbcf53809c.png

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

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

9b4499f2-a625-11ee-8b88-92fbcf53809c.png

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

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

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

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

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

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

愛麗絲:這是不可能的。

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

所以,讓我們暫且放下懷疑的態度,仔細研究一下讀取端口,看看會發生什么。

9b78b228-a625-11ee-8b88-92fbcf53809c.png

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

9b8268a4-a625-11ee-8b88-92fbcf53809c.png

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

9b97d766-a625-11ee-8b88-92fbcf53809c.png

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

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

9babc2e4-a625-11ee-8b88-92fbcf53809c.png

為了讓大家看到嵌套的螺旋線,我在下圖中標注了單個多路復用器的路徑。如圖所示,路徑每行交替通過 32 位 “S” 寄存器(如左圖所示),每兩行交換通過 “S” 寄存器上下兩半 16 位區域(如右圖所示)。

9bc37560-a625-11ee-8b88-92fbcf53809c.png

直覺告訴我,這種扭曲的方法對于三路交織來說是行不通的,經證實我是對的,SAT 解算器正式證明無解。

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

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

9bd50596-a625-11ee-8b88-92fbcf53809c.png

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

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

您是否想要更深入了解 Helium 技術?由 Arm 物聯網事業部技術管理總監 Mark Quartermain 與 Arm 物聯網事業部嵌入式工具集成高級經理 Matthias Hertel 共同為大家錄制了 Helium 技術視頻,通過實例演示詳解如何高效利用 Helium。

我們將在下一篇 Helium 文章中繼續探討以內存訪問為主題的相關內容,并介紹一些實現循環緩沖的技術知識。持續關注 Helium 技術講堂,我們下期再見!

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

    關注

    134

    文章

    9046

    瀏覽量

    366817
  • 寄存器
    +關注

    關注

    31

    文章

    5317

    瀏覽量

    120008
  • 機器學習
    +關注

    關注

    66

    文章

    8377

    瀏覽量

    132409

原文標題:Helium 技術講堂 | 數獨、寄存器和相信的力量

文章出處:【微信號:Arm社區,微信公眾號:Arm社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    寄存器間接尋址和寄存器尋址的區別

    寄存器間接尋址和寄存器尋址是計算機體系結構中兩種重要的尋址方式,它們在指令執行過程中起著關鍵作用。下面將從定義、原理、特點、應用場景以及區別等方面對這兩種尋址方式進行詳細闡述。
    的頭像 發表于 10-05 17:13 ?823次閱讀

    寄存器的類型和作用

    在計算機科學中,寄存器(Register)是一種高速存儲單元,它位于CPU內部,與CPU的運算單元和邏輯控制單元緊密相連。寄存器的主要作用是暫時存儲指令、操作數和地址等臨時數據,以便CPU快速訪問和處理。由于寄存器直接集成在CP
    的頭像 發表于 09-05 14:11 ?1126次閱讀

    寄存器故障分析

    寄存器故障分析是計算機硬件維護與系統穩定性保障中的重要環節。寄存器作為計算機中的關鍵組成部分,負責存儲和傳輸數據,其穩定性和可靠性直接影響到整個計算機系統的性能。以下是對寄存器故障的全面分析,包括故障類型、故障現象、故障原因及診
    的頭像 發表于 08-29 11:26 ?772次閱讀

    寄存器是什么意思?寄存器是如何構成的?

    在計算機科學中,寄存器(Register)是一個高速存儲單元,它位于中央處理(CPU)內部,用于存儲計算機程序執行過程中所需要的數據、指令地址或狀態信息。寄存器是計算機體系結構中至關重要的組成部分,對計算機的運算速度和性能有著
    的頭像 發表于 08-02 18:23 ?3345次閱讀
    <b class='flag-5'>寄存器</b>是什么意思?<b class='flag-5'>寄存器</b>是如何構成的?

    寄存器尋址和直接尋址的區別

    寄存器尋址和直接尋址是計算機指令系統中的兩種基本尋址方式。它們在指令的執行過程中起著至關重要的作用,決定了指令操作數的來源和目標。下面我們將介紹這兩種尋址方式的特點、區別以及在實際應用中的優缺點
    的頭像 發表于 07-12 10:42 ?1311次閱讀

    寄存器尋址的實現方式

    在計算機體系結構中,寄存器尋址是一種常見的尋址方式,它允許程序直接訪問CPU內部的寄存器寄存器尋址可以提高程序的執行效率,因為它避免了對內存的訪問。 寄存器尋址的基本概念
    的頭像 發表于 07-12 10:36 ?558次閱讀

    寄存器分為基本寄存器和什么兩種

    寄存器是計算機中用于存儲數據的高速存儲單元,它們是CPU內部的重要組成部分。寄存器可以分為基本寄存器和擴展寄存器兩種類型。 一、基本寄存器
    的頭像 發表于 07-12 10:31 ?1128次閱讀

    移位寄存器右移是怎么移位的

    移位寄存器是一種在數字電路和計算機科學中廣泛使用的存儲設備,它可以用來存儲和傳輸數據。在移位寄存器中,數據可以通過移位操作來實現數據的傳輸和處理。移位寄存器的移位操作有兩種基本形式:左移和右移。本文
    的頭像 發表于 07-12 10:14 ?995次閱讀

    干貨滿滿:ARM的內核寄存器講解

    內核寄存器與外設寄存器: 內核寄存器與外設寄存器是完全不同的概念。內核寄存器是指 CPU 內部的寄存器
    發表于 04-17 11:47 ?2967次閱讀
    干貨滿滿:ARM的內核<b class='flag-5'>寄存器</b>講解

    寄存器屬于時序邏輯電路嗎 寄存器是什么邏輯電路

    寄存器是一種用來存儲數據的數字電路組件。它可以存儲一個或多個位的二進制,并且能夠在時鐘信號的控制下將數據從輸入端復制到輸出端。寄存器通常用于存儲和操作計算機系統中的數據,是計算機的基本組
    的頭像 發表于 02-18 09:37 ?1438次閱讀

    CPU的6個主要寄存器

    CPU寄存器是中央處理內的組成部分,是有限存貯容量的高速存貯部件。寄存器是CPU內部的元件,包括通用寄存器、專用寄存器和控制
    的頭像 發表于 02-03 15:15 ?3903次閱讀

    移位寄存器可降低LED設計的尺寸和成本

    在使用 LED 的設計中,移位寄存器非常有用。例如,如果系統包括七段顯示、單個指示或形成網格或面板的 LED 陣列,則可以使用標準 8 位移位寄存器來允許低引腳
    發表于 01-30 15:14 ?576次閱讀
    移位<b class='flag-5'>寄存器</b>可降低LED設計的尺寸和成本

    移位寄存器的工作原理 移位寄存器左移和右移怎么算

    移位寄存器是一種用于在數字電路中實現數據移位操作的基本電路元件。它由多個觸發以及相關控制電路組成,具有存儲、接受和移動數據的功能。移位寄存器可以分為兩種類型:串行移位寄存器和并行移位
    的頭像 發表于 01-18 10:52 ?7310次閱讀

    寄存器陣列低功耗設計方案

    寄存器寫操作的時候會改變寄存器內容,需要時鐘鎖入新的數據。但是,對寄存器進行讀操作的時候,寄存器內容不改變,寄存器不需要時鐘。這個特點工具是
    的頭像 發表于 12-08 11:19 ?573次閱讀
    <b class='flag-5'>寄存器</b>陣列低功耗設計方案

    寄存器查看的功能和使用

    對于搞嵌入式底層開發的軟件或者硬件工程師來說,經常會涉及到查看芯片手冊,比如某個芯片的串口控制寄存器值,需要知道這個值對應寄存器的哪些位,微軟計算的程序員模式雖然可以查看
    的頭像 發表于 11-28 12:26 ?1856次閱讀
    <b class='flag-5'>寄存器</b>查看<b class='flag-5'>器</b>的功能和使用