新四季網

用於神經網絡的塊之間的重疊數據的存儲器管理的製作方法

2024-04-15 16:14:05



1.至少一個實施例涉及用於執行和促進人工智慧的處理資源。例如,至少一個實施例涉及用於連結神經網絡層中的塊之間的重疊數據的輔助緩衝器。


背景技術:

2.在許多情況下,深度學習推理的大部分計算工作都基於數學運算,這些運算通常可以分為四個部分:卷積、激活、池化和歸一化。這些運算有一些共同的特點,使它們特別適合硬體實現:它們的存儲器訪問模式是可預測的並且易於並行化。
附圖說明
3.圖1是根據至少一些實施例的具有用於在由固定功能電路執行的連結層之間平鋪的重疊數據緩衝器的加速器核心的框圖;
4.圖2a是圖示根據至少一種實現方式的持久權重選項的圖;
5.圖2b是圖示根據至少一種實現方式的持久特徵選項的圖;
6.圖3是圖示根據至少一些實施例的具有兩個連結硬體層的加速器電路的圖,該加速器電路在重疊數據的兩個通路之間使用輔助緩衝器;
7.圖4是圖示根據至少一些實施例的具有四個連結硬體層的加速器電路的圖,該加速器電路在三個通路之間使用重疊數據緩衝器;
8.圖5是圖示根據至少一些實施例的使用硬體指令在通路之間存儲和獲取塊中的重疊數據的兩個卷積層的圖;
9.圖6是根據至少一些實施例的識別輸出塊的一部分並將其存儲在輔助緩衝器中的方法的流程圖;
10.圖7是根據至少一些實施例的深度學習加速器(dla)系統的框圖;以及
11.圖8是根據至少一些實施例的dla系統的框圖。
具體實施方式
12.如上所述,深度學習推理基於非常適合硬體實現的操作。深度學習加速器(dla)電路,例如深度學習加速器(nvdla),可用於通過提供加速核心深度學習運算的構建塊來滿足推理的計算需求。深度學習加速器可用於加速不同的神經網絡,例如卷積神經網絡(cnn)、循環神經網絡(rnn)、全連接神經網絡等。這些神經網絡可能具有非常不同的結構,可能不遵循任何預定義的網絡結構,並且正在定期引入新的神經網絡。
13.目前,dla電路對這些神經網絡中的不同類型的層使用固定功能引擎(本文也稱為固定功能單元或固定功能電路或計算單元),例如用於卷積、激活函數、池化、批量歸一化等的固定功能引擎。每一層可以是一個固定功能引擎執行操作的基本硬體指令,每一層通過存儲器接口與另一層通信。例如,第一層可以由接收輸入張量的第一固定功能引擎執行,對輸入張量執行操作以生成輸出張量,並將輸出張量存儲在系統存儲器中,例如耦合到加速
器的動態隨機存取存儲器(dram)。第二層可以由第二固定功能引擎執行,該第二固定功能引擎從存儲器中接收來自第一層的輸出張量作為第二輸入張量,對第二輸入張量執行操作以生成第二輸出張量,並將第二輸出張量存儲在dram中。每次通信都會在存儲器接口中引入一個張量讀取操作和一個張量寫入操作。
14.連結是一種利用加速器內部存儲器的機制,例如內部靜態隨機存取存儲器(sram)。在連結中,中間張量由當前層寫入內部sram,隨後的層從內部sram獲取數據。使用連結方法可以減少存儲器接口流量,從而提高性能和電源效率。在最好的情況下,網絡的所有層都可以連結起來,為第一層的第一輸入和最後一層的輸出留下外部存儲器訪問。編譯器可以使用連結算法來確定如何連結各層以利用內部sram。連結算法考慮以下項目:持久權重或持久特徵選項、何時終止連結、卷積緩衝器分配和特徵交叉(例如,連結加批處理、連結加權重預取等)。
15.為了避免處理單元和存儲器帶寬之間的不平衡,可以使用使數據駐留在加速器的內部sram中。當輸入特徵數據太大而不適合內部sram時,平鋪(tiling)是一種流行的技術。例如,每一層可以被劃分為對應於n個通路(pass)的n個塊(tile)。一個通路被定義為一組通過sram進行通信的硬體層,如果一個鏈被分成n個塊,那麼該鏈塊包含n個通路。例如,假設一組連結的硬體層(硬體層指令)被劃分為n個塊。在這種情況下,這組連結的硬體層(硬體層指令)有n個通路,並且每個硬體層與其他硬體層以連結的方式執行n次。應該注意,從算法的角度來看,神經網絡可以用一組層(在本文中稱為「原始層」)來指定,例如偏差和批量歸一化。那些原始層可以被編譯或轉換成另一組層(在本文中稱為「硬體層」),其中每個硬體層用作調度要在加速器電路上執行的基本元素。原始層和硬體層之間的映射可以是m:n,其中m是原始層數,n是硬體層數。例如,神經網絡中的原始層偏差、批量歸一化和局部響應歸一化(lrn),例如整流線性單元(relu),可以編譯到一個硬體層中。在這種情況下,m:n是3:1。每個硬體層都可以由一個基本硬體指令來表示,以供固定功能引擎之一執行操作,並且每個層通過存儲器接口與另一層通信。例如,第一層可以由接收輸入張量的第一固定功能引擎執行,對輸入張量執行操作以生成輸出張量,並將輸出張量存儲在系統存儲器中,例如耦合到加速器的動態隨機存取存儲器(dram)。第二層可以由第二固定功能引擎執行,該第二固定功能引擎從存儲器中接收來自第一層的輸出張量作為第二輸入張量,對第二輸入張量執行操作以生成第二輸出張量,並將第二輸出張量存儲在dram中。每次通信都會在存儲器接口中引入一個張量讀取操作和一個張量寫入操作。
16.卷積和池化是神經網絡中常見的算子。這些算子涉及一個窗口中的一組輸入像素以獲得一個輸出像素。如果使用平鋪,則每個塊之間存在重疊數據。重疊數據稱為暈圈(halo)。對於單層操作,為每個塊獲取暈圈,因此會消耗額外的帶寬。如上所述,當多個層連結在一起時,傳統方法會重新計算每個塊的暈圈,從而浪費計算資源。傳統方法通常要麼過度獲取暈圈以處理單層暈圈,要麼過度計算以處理多層暈圈。
17.本公開的方面和實施例通過提供例如重疊數據緩衝器來存儲神經網絡的連結層的通路之間的塊的部分來解決這些挑戰和其他挑戰。一個加速器電路包括至少一個處理單元,用於在多通路中執行對應於連結層的指令。在第一通路中,至少一個處理單元從主緩衝器接收輸入特徵圖的第一輸入塊並且對第一輸入塊執行第一操作以獲得第一輸出塊。處理單元將第一輸出塊存儲在主緩衝器中並且將第一輸出塊的一部分識別為對應於輸入特徵
圖的塊之間的重疊數據。處理單元將該部分存儲在輔助緩衝器中。在第二通路中,處理單元檢索該部分以避免獲取重疊部分並再次計算重疊數據(暈圈)。使用本文描述的實施例,當多個層連結在一起時,暈圈在通路之間被存儲在輔助緩衝器中,從而減少了重新獲取暈圈的額外帶寬的消耗並減少了重新計算暈圈的計算資源的消耗。通路之間所需的緩衝大小是預先確定的,可以在離線編譯期間確定。例如,編譯器可以保留一個小的sram區域(本文也稱為輔助緩衝器、用戶定義緩衝器(ubuf)和重疊數據緩衝器)。編譯器可以在一通路中創建指令以將暈圈輸出到保留的sram,並在隨後的通路中創建指令以從保留的sram獲取暈圈到張量數據sram。在至少一個實施例中,步幅被仔細地編程以避免汙染有效的張量數據。本公開的方面和實施例可以提高計算利用率,同時減少系統帶寬消耗。例如,很大一部分深度學習工作負載是卷積和池化操作。在卷積層和池化層中使用本公開的方面和實施例提高了計算利用率,同時減少了系統帶寬消耗。本公開的方面和實施例可以用在加速器電路、圖形處理單元(gpu)等中。
18.圖1是根據至少一些實施例的具有重疊數據緩衝器102的加速器核心100的框圖,該重疊數據緩衝器102用於在由固定功能電路104-114(在本文中也稱為固定功能引擎)執行的連結層之間進行平鋪。加速器核心100(本文也稱為dla核心或加速器電路)包括重疊數據緩衝器102和各種固定功能電路,例如卷積引擎104(本文也稱為卷積核心)、用於激活函數的單點查找引擎的激活引擎106(在本文中也稱為單數據處理器(sdp)),用於池化的平面平均引擎的池化引擎108(在本文中也稱為平面數據處理器(pdp)),應用在通道維度而不是空間維度上操作的lrn函數的專用單元的局部響應歸一化(lrn)引擎110(在本文中也稱為跨通道數據處理器(cdp)),執行數據格式轉換(例如,拆分或切片、合併、收縮、整形傳輸)的數據整形引擎112(在本文中也稱為rubik),以及可以在系統dram和專用存儲器接口之間移動數據的橋接直接存儲器訪問(dma)引擎114。下面描述重疊數據緩衝器102的附加細節。在其他實施例中,加速器核心100可以包括比圖1中闡述的更多或更少的引擎。這些引擎中的每一個都可以是單獨的並且可以獨立配置。例如,不需要池化操作的系統可以完全移除平面平均引擎。再舉一個例子,需要額外卷積性能的系統可以在不修改加速器核心100中的其他單元的情況下擴展卷積引擎的性能。
19.如圖1所示,加速器核心100具有到dla系統的其餘部分的多個連接,包括配置接口塊116,該配置接口塊116包括配置空間總線(csb)接口和中斷接口。配置接口塊116可以是實現寄存器文件(例如,配置寄存器)的控制通道接口和中斷接口(標記為csb/中斷接口118)。在至少一個實施例中,csb接口是一種同步、低帶寬、低功率、32位控制總線,被設計為由中央處理單元(cpu)(圖1中未示出)用來訪問配置接口塊116中的配置寄存器。中斷接口可以是1位電平驅動的中斷。當任務完成或發生錯誤時,可以斷言中斷線。加速器核心100還可以包括使用一個或更多個總線接口與存儲器對接的存儲器接口塊120。在至少一個實施例中,存儲器接口塊120具有連接到系統存儲器(圖1中未示出)的主存儲器接口122。系統存儲器可以包括dram。主存儲器接口122可以與cpu和輸入/輸出(i/o)外圍設備共享。在至少一個實施例中,主存儲器接口122是連接加速器核心100和其他存儲器子系統的數據主幹(dbb)接口。dbb接口是一種可配置的數據總線,可以指定不同的地址大小,不同的數據大小,發出不同大小的請求。在至少一個實施例中,dbb接口使用接口協議,例如axi(高級可擴展接口)或其他類似協議。在至少一個實施例中,存儲器接口塊120具有允許連接到專用於
加速器核心100或計算機視覺子系統的更高帶寬存儲器的第二存儲器接口124。例如,第二存儲器接口124可以與片上sram一起使用以提供更高的吞吐量和更低的訪問延遲。
20.存儲器接口塊120耦合到固定功能電路104-114中的每一個。可以在存儲器接口塊120和卷積引擎104之間使用卷積緩衝器126以避免重複訪問系統存儲器。卷積緩衝器126可以是為權重和輸入特徵/像素存儲保留的內部ram。在至少一個實施例中,重疊數據緩衝器102可以是卷積緩衝器126的保留區域。重疊數據緩衝器102可以是在使用平鋪時為通路之間的重疊數據存儲而保留的內部sram。
21.在加速器核心100的操作期間,處理流程開始於耦合到加速器核心100的管理處理器(微控制器或cpu)發送硬體層配置和激活命令。如果數據依賴性不排除這一點,則可以將多個硬體層發送到不同的引擎並同時激活(即,如果有另一個層的輸入不依賴於前一層的輸出)。在至少一個實施例中,每個引擎可以具有用於其配置寄存器的雙緩衝器,當激活層完成時,允許第二層的配置開始處理。一旦硬體引擎完成其激活任務,配置接口塊116可以中斷管理處理器以報告完成,並且管理處理器可以再次開始該過程。這種命令-執行-中斷流程不斷重複,直到整個網絡的推理完成。
22.回到圖1,固定功能電路104-114中的每一個一次處理一個神經網絡的編譯硬體層,並且固定功能電路處理不同層類型的神經網絡。在至少一個實施例中,第一固定功能電路是卷積引擎104、激活引擎106、池化引擎108、lrn引擎110、數據整形引擎112或橋dma引擎114中的任何一個。替代地,第一固定功能電路可以是加速器核心100的其他計算單元或加速器核心100外部的計算單元。
23.有一種將張量加載到本地高速緩存的技術,即卷積緩衝器126,稱為分塊(tiled)技術。分塊技術將張量劃分為一個或更多個具有預先指定維度的可以裝入卷積緩衝器126的塊。每個塊可以一次一個地從全局存儲器加載到卷積引擎104的卷積緩衝器126中對塊執行卷積。儘管在圖1中未示出,其他固定功能電路106-114也可以訪問共享/高速緩衝存儲器。每個塊可以一次一個地從全局存儲器加載到共享/高速緩存存儲器中,以供處理單元執行對塊的計算。當與基於通用矩陣乘法(gemm)的算法一起使用時,分塊技術可能不需要數據複製。
24.處理單元可以訪問張量以對張量執行一些操作。一種這樣的操作是深度學習應用中的卷積運算。然而,實施例不限於卷積運算。在卷積神經網絡(cnn)的一層中使用卷積運算來分析圖像以用於機器學習應用,例如圖像分類、對象檢測、圖像分割等。可以在推理和/或訓練期間對cnn的卷積層執行卷積運算。例如,卷積層可以將權重濾波器的卷積函數應用於輸入張量中的元素窗口(感受野位置),其中感受野對應於輸入張量的位置,以檢測特徵在一個位置的存在。將濾波器應用於輸入張量中的不同位置的步幅生成激活圖(或特徵圖),其中特徵圖指示輸入張量中檢測到的特徵的強度。
25.在至少一個實施例中,卷積運算的算術框架可以是:
[0026][0027]
其中
[0028]
使得0≤n<n^0≤m<m^0≤h<h^0≤w<w。
[0029]
卷積緩衝器126可以是主緩衝器,重疊數據緩衝器102可以是輔助緩衝器。例如,如果有兩層並且輸入張量太大而無法存儲在主緩衝器(例如內部sram)中,則一層被分為三個硬體指令。層之間的持久數據有兩個選項,例如在圖2a-2b中說明的,下面將參照圖3-5描述重疊數據緩衝器102。
[0030]
圖2a是圖示根據至少一種實現方式的持久權重選項200的圖。對於主緩衝器(例如,內部sram)中的持久權重選項200,第一層202的第一指令206從外部存儲器(例如,dram)獲取權重,使用權重執行第一操作,並且將權重存儲在內部sram 204(主緩衝器)中。權重保留在內部sram 204中,並且第一層202的第二指令208從內部sram 204而不是外部存儲器中獲取權重。類似地,第一層202的第三指令210從內部sram 204而不是外部存儲器獲取權重。第二層212與第一層202連結。第二層212的權重從外部存儲器(例如dram)中獲取,然後存儲在內部sram 204中,第二層212的第一、第二和第三指令214、216、218從內部sram 204而不是外部存儲器獲取權重。在這個實現方式中,有兩個來自外部dram的權重讀取訪問,兩個來自外部dram的特徵讀取訪問,以及兩個對外部dram的特徵寫入訪問。
[0031]
圖2b是圖示根據至少一種實現方式的持久特徵選項250的圖。對於主緩衝器(例如內部sram)中的持久特徵選項250,第一層252的第一指令256(hw inst0)從外部存儲器(例如dram)中獲取第一特徵數據240,並使用第一特徵數據執行第一操作以獲得第二特徵數據254。第一指令256將第二特徵數據254存儲在主緩衝器(例如,內部sram)中。由於卷積/池化操作的暈圈屬性,編譯器確定可以在第二通路中使用的重疊,包括輸入特徵圖270(暈圈)和輸入特徵圖274(暈圈)。在至少一個實施例中,編譯器生成dma指令以裁剪暈圈(輸入特徵圖270、274)。輸入特徵圖270將由第二通路的第二指令262(hw inst2)使用以產生特徵數據255。類似地,輸入特徵圖274將由第二通路的第二指令264(hw inst3)使用以產生輸出特徵數據244。因此,編譯器將輸入特徵圖270(暈圈)和輸入特徵圖274(暈圈)存儲到輔助緩衝器。輔助緩衝器可以是sram的保留區域。需要注意的是,輔助緩衝器可以是邏輯構造,也可以是物理構造。從物理實現的角度來看,它可以選擇統一的sram(即與主緩衝器相同的sram)或其他級別的sram。與第一層252連結的第二層260的第一指令258(hw inst1)從主緩衝器而不是外部存儲器中獲取第二特徵數據254,並使用第二特徵數據254執行第二操作獲得第三特徵數據243。第一指令258將第三特徵數據243存儲在外部存儲器(例如dram)中。第三特徵數據243是連結層的最終結果的一部分。
[0032]
第一層252的第二指令262(hw inst2)從外部存儲器(例如dram)中獲取第三特徵數據241,並使用第三特徵數據241執行第一操作以獲得第四特徵數據255。類似於第一指令256,編譯器生成dma指令以裁剪暈圈(例如,274、276)並將暈圈存儲到輔助緩衝器以供將來使用。第二指令262將第四特徵數據255存儲在主緩衝器(例如,內部sram)中。第二層260的第二指令264(hw inst3)從主緩衝器中獲取第四特徵數據255,從輔助緩衝器中獲取輸入特徵圖274(暈圈),並使用第四特徵數據255和輸入特徵圖274執行第二操作以獲得第五特徵數據244。假設第五特徵數據244是連結層的最終輸出,則第二指令265將第五特徵數據244存儲在外部存儲器(例如dram)中。應當注意,不必為輸入特徵圖270、272、274、276分配單獨的sram。在至少一個實施例中,輸入特徵圖270、272、274、276可以使用相同的存儲器區域。例如,在輸入特徵圖270和270的生命周期中,可能不存在重疊,因此可以以時分復用的方式將相同的存儲區域用於兩者。
[0033]
第一層252的第三指令266(hw inst4)從外部存儲器(例如dram)中獲取第五特徵數據242,並使用第五特徵數據242執行第一操作以獲得第六特徵數據256。第三指令266將第六特徵數據256存儲在主緩衝器(例如,內部sram)中。與第一指令256和第二指令262不同,第三指令266是最後一通路,不需要存儲暈圈數據。第二層260的第三指令268(hw inst5)從主緩衝器獲取第六特徵數據256並從輔助緩衝器獲取輸入特徵圖276(暈圈),並使用第六特徵數據256和輸入特徵圖276執行第二操作以獲得第七特徵數據245。第三指令268將第七特徵數據245存儲在外部存儲器(例如dram)中。在第三指令266、268之後,計算整個輸出張量。
[0034]
回到圖1,在至少一個實施例中,加速器核心100是深度學習加速器(dla)核心,其包括寄存器文件以存儲與具有多層的神經網絡的至少一部分相關聯的配置信息。dla核心包括耦合到外部存儲器設備(圖1中未示出)的存儲器接口(例如存儲器接口塊120)、卷積緩衝器126和卷積引擎104。卷積緩衝器126包括用於重疊數據緩衝器102的保留區域(如在126內的散列塊中所示),或如圖1所示並本文描述的與卷積緩衝器126分離的重疊數據緩衝器102。卷積引擎104在第一通路中從卷積緩衝器126接收輸入特徵圖的第一輸入塊。輸入特徵圖的大小可能超過卷積緩衝器126的存儲容量。在至少一個實施例中,輸入特徵圖至少包括第一輸入塊和第二輸入塊。卷積引擎104在第一輸入塊上執行第一硬體層以獲得第一輸出塊並將第一輸出塊存儲在卷積緩衝器126中。卷積引擎104將第一輸出塊的一部分識別為對應於第一輸入塊與第二輸入塊之間的重疊數據,並將第一輸出塊的部分存儲在保留區域(重疊數據緩衝器102)中。
[0035]
在至少一個實施例中,卷積引擎104在第一通路之後的第二通路中,從卷積緩衝器126接收第二輸入塊的一部分。該部分可以表示第二輸入塊的不與第一輸入塊重疊的部分,因為該數據已被獲取和計算。卷積引擎104在第二輸入塊的部分上執行第一硬體層以獲得第二輸出塊的一部分並從保留區域中檢索第一輸出塊的部分。卷積引擎104將第二輸出塊存儲在卷積緩衝器126中,包括第二輸出塊的部分和第一輸出塊的部分。
[0036]
在至少一個實施例中,卷積引擎104在第一通路中從卷積緩衝器126檢索第一輸出塊並且在第一輸出塊上執行第二硬體層以獲得第三輸出塊。卷積引擎104將第三輸出塊存儲在卷積緩衝器126中。在該實施例中,卷積引擎104不將重疊數據存儲在保留區域中。在其他實施例中,卷積引擎104可以識別額外的重疊數據並將其存儲在保留區域中。卷積引擎104在第二通路中從卷積緩衝器126中檢索第二輸出塊並且在第二輸出塊上執行第二硬體層以獲得第四輸出塊。卷積引擎104將第四輸出塊存儲在卷積緩衝器中。在至少一個實施例中,卷積引擎104在第二通路中將第二輸出塊的一部分識別為對應於第一輸入塊與第三輸入塊之間的重疊數據,並將第二輸出塊的該部分存儲在保留區域中。在本實施例中,輸入特徵圖包括第一輸入塊、第二輸入塊和第三輸入塊。在第三通路中,卷積引擎104從卷積緩衝器126接收第三輸入塊的一部分,並且在第三輸入塊的部分上執行第一硬體層以獲得第三輸出塊的一部分。卷積引擎104從保留區域中檢索第二輸出塊的部分並將第二輸出塊的部分作為第三輸出塊的一部分存儲在卷積緩衝器126中。第三輸出塊包括第三輸出塊的基於執行第一硬體層的部分和第二輸出塊的從保留區域檢索的部分。
[0037]
圖3是圖示根據至少一些實施例的具有兩個連結的硬體層的加速器電路300的圖,該加速器電路300在重疊數據的兩個通路之間使用輔助緩衝器。加速器電路300包括主緩衝
器302(例如,內部sram)、輔助緩衝器304、存儲器接口306和一個或更多個執行多個連結層的處理單元。主緩衝器302可以是加速器電路的內部sram。輔助緩衝器304可以是加速器電路的另一個內部sram或用於主緩衝器302的內部sram的保留區域。輔助緩衝器304對應於圖1的重疊數據緩衝器102。存儲器接口306耦合到與加速器電路300耦合的外部存儲器設備(外部dram)。加速器電路300使用一個或更多個處理單元和平鋪以多通路執行神經網絡的多個連結的硬體層。通路數等於連結的硬體層使用的塊數。加速器電路300包括第一層308和第二層310。第一層308和第二層310被分成兩個塊。因此,第一層308在兩個塊上執行第一硬體指令(hw1)並且第二層310在兩個塊上執行第二硬體指令(hw2)。具體來說,第一層308(layer0)在第一塊(tile0)上執行,然後第二層310(layer1)在第一塊(tile0)上執行,然後第一層308(layer0)在第二塊(tile1)上執行,然後第二層(layer1)在第二塊(tile1)上執行。在圖示的實施例中,加速器電路300包括兩個連結層和兩個通路以簡化描述,但在其他實施例中可以包括多於兩個連結層和多於兩個通路。
[0038]
在第一通路312中,第一層308接收第一張量301。第一張量301包括來自存儲器接口306的輸入特徵圖的第一輸入塊。在一些實施例中,輸入特徵圖太大而無法存儲在主緩衝器302中。例如,輸入特徵圖的大小超過了主緩衝器302的存儲容量,因此在所示實施例中,輸入特徵圖被分成兩個塊,包括第一輸入塊和第二輸入塊。第一層308對第一張量301(第一輸入塊)執行對應於第一硬體層指令的第一操作以獲得第二張量303。第二張量303包括第一輸出塊。第一輸出塊也是第二層310的輸入塊。第一層308將第二張量303存儲在主緩衝器中。第一層308還將第一輸出塊的一部分識別為對應於第一輸入塊與第二輸入塊之間的重疊數據305。第一層308將重疊數據305存儲在輔助緩衝器304中。
[0039]
在至少一個實施例中,在第一通路312中,第二層310從主緩衝器302檢索包括第一輸出塊的第二張量303,而不是從外部存儲器獲取數據。第二層310對第一輸出塊執行對應於第二硬體層指令的第二操作以獲得第三張量307,包括第三輸出塊。第二層310將第三張量307存儲到主緩衝器302或外部存儲器(例如dram)中。
[0040]
在第二通路314中,第一層308接收第四張量309。第四張量309包括來自存儲器接口306(或來自主緩衝器302)的第二輸入塊的一部分。第一層308對第二輸入塊的部分執行對應於第三硬體層指令的第一操作以獲得第五張量311,包括第二輸出塊的一部分。第一層308還從用於第五張量311的輔助緩衝器304接收第一輸出塊的部分,該部分對應於第一輸入塊與第二輸入塊之間的重疊數據305。第二輸出塊包括第二輸出塊的部分和第一輸出塊的部分(例如,重疊數據305)。第一層308將包括第二輸出塊的第五張量311存儲在主緩衝器302中。使用輔助緩衝器304,重疊數據不會被過度提取並且不會被過度計算,如本文所述。
[0041]
在至少一個實施例中,在第二通路314中,第二層310從主緩衝器302檢索包括第二輸出塊的第五張量311,而不是從外部存儲器獲取數據。第二層310對第二輸出塊執行對應於第四硬體層指令的第二操作以獲得第四張量313,包括第四輸出塊。第二層310將第四張量313存儲到主緩衝器302或外部存儲器(例如dram)中。
[0042]
在至少一個實施例中,第一輸入塊和第二輸入塊在第一通路312之前從外部存儲器獲取並存儲在主緩衝器中。在該實施例中,第二通路中的第一層308從主緩衝器302獲取第二輸入塊的一部分和從輔助緩衝器304獲取重疊數據305。
[0043]
在一個實施例中,第一層308由固定功能引擎執行,諸如卷積引擎104,並且相同的
固定功能引擎執行第二層310。在另一實施例中,第一層308由第一固定功能引擎執行,例如卷積引擎104。第二層310由不同於第一固定功能引擎的第二固定功能引擎執行,例如池化引擎108。可替代地,第一層308和第二層310可以由其他固定功能引擎執行。
[0044]
還應注意,在多於兩個通路的情況下,第二通路314中的第一層308會將第二輸出塊的一部分識別為對應於第一輸入塊與第三輸入塊之間的重疊數據並將第二輸出塊的部分存儲在輔助緩衝器304中。例如,如果輸入特徵圖包括第一輸入塊、第二輸入塊和第三輸入塊,則可以使用第三通路,其中,第一層308從主緩衝器302接收第三輸入塊的一部分,並對第三輸入塊的該部分執行第一操作以獲得第三輸出塊的一部分。第一層308還從輔助緩衝器304中檢索第二輸出塊的部分並將第二輸出塊作為第三輸出塊的一部分存儲在主緩衝器302中。第三輸出塊包括第三輸出塊的基於第一操作的部分和第二輸出塊的從輔助緩衝器304檢索的部分。
[0045]
在一個實施例中,主緩衝器302和輔助緩衝器304可以在相同的內部存儲器設備中實現。在至少一個實施例中,主緩衝器是內部存儲器設備的被保留為第一級(l1)存儲器的第一區域。輔助緩衝器是內部存儲器設備的被保留為第二級(l2)存儲器的第二區域。在本實施例中,外部存儲器設備被保留為第三級(l3)存儲器。在另一實施例中,主緩衝器302在第一內部存儲器設備中實施,而輔助緩衝器304在第二內部存儲器設備中實施。
[0046]
在一個示例中,假設有一個圖像卷積層,其參數如下:i)輸入:wxhxc=960x480x3;ii)內核:7x7x3x48,步幅:2x2,填充:3x2,以及iii)輸出:wxhxc=480x240x48。輸入大小參數可以超出主緩衝器302的容量。因此,圖像卷積層可以分為三個編譯硬體層,由加速器電路300執行。每個硬體層產生160x240x48的輸出塊,根據卷積維數公式:輸入=步幅*(輸出-1)+內核-填充_左-填充_右,編譯器可以為三個硬體層定義如下參數。hwl1:
[0047]
輸入:wxhxc=322x480x3
[0048]
輸出:wxhxc=160x240x48
[0049]
hwl2:
[0050]
輸入:wxhxc=325x480x3
[0051]
輸出:wxhxc=160x240x48
[0052]
hwl3:
[0053]
輸入:wxhxc=323x480x3
[0054]
輸出:wxhxc=160x240x48
[0055]
將輸入寬度加在一起,有970行,導致10行與三個硬體層重疊。
[0056]
在至少一個實施例中,可以對重疊進行建模。例如,如果第一塊的寬度為n,則第一塊的最後一個像素為n-1,第二塊的第一個像素為n。第一塊的最後一個像素具有相應的輸入坐標,計算公式為(n-1)*步幅-填充_左+(內核-1)。第二塊的第一個像素具有相應的輸入坐標,計算為n*步幅-填充_左。重疊也可以表示為內核-步幅。對於上面的示例,總重疊是第一塊中的第一重疊和第二時間的第二重疊,表示為總_重疊=重疊1+重疊2=(7-2)+(7-2)=10行,這與上面確定的相同。在至少一個實施例中,編譯器確定每個硬體層之間的重疊並創建指令以分別從主緩衝器和輔助緩衝器正確地獲取張量數據和重疊數據。
[0057]
一些因素可能會影響連結終止,包括計算開銷和帶寬開銷。卷積運算是基於區域的操作(當內核_大小》1時);因此,如果將一層劃分為多個硬體指令,則輸入上的每個指令
之間可能會有重疊。如果沒有連結,則整個張量已在外部存儲器(dram)中準備就緒,並且需要一些額外的過度獲取。但是,如果使用連結,則每條指令之間的整個中間張量都不可用;因此重疊區域應該由前面的指令計算,引入過度計算。這種開銷隨著連結層的深度而不斷增加;因此,連結的層數越多,計算開銷就越大。另一方面,連結的層數越多,dram流量的機會就越小;因此,這是計算開銷和dram帶寬優勢之間的平衡。權衡可能取決於層參數和邊界因素。
[0058]
回到圖3、特徵數據存儲在主緩衝器中。在至少一個實施例中,對於每一通路,可以共享相同的權重。如果權重存儲在主緩衝器中,則可以減少存儲器接口上的權重流量。但是,連結的層數越多,存儲相應權重數據所需的主緩衝器存儲就越多。用於存儲八的主緩衝器的容量是連結深度評估期間可以考慮的另一個因素。從性能的角度來看,對於不受權重獲取限制的層,不必將它們存儲在主緩衝器中。然而,從功耗的角度來看,減少存儲器接口上的存儲器流量是有益的。同樣,它是權重獲取功耗和激活獲取功耗之間的權衡。在至少一個實施例中,第一層308可以使用第一數量的存儲體(例如,10個cbuf存儲體)用於將權重數據存儲在主緩衝器302中並且使用第二數量的存儲體(例如,2個cbuf存儲體)用於將特徵數據存儲在主緩衝器302中。第二層310可以使用第一數量的存儲體(例如,2個cbuf存儲體)用於將權重數據存儲在主緩衝器302中,並且使用第二數量的存儲體(例如,10個cbuf存儲體)用於將特徵數據存儲在主緩衝器302中。
[0059]
在至少一個實施例中,加速器電路300可以使用特徵交叉,其中連結用於結合批處理或結合權重預取。批處理可以有幾個好處,包括在不同幀之間共享權重以節省權重數據的存儲器流量,並且在某些情況下可以提高效率。對於一種情況,如果主緩衝器302足夠大以存儲所有批次,則可以在鏈中獲取批次,同時仍然由軟體調度不同的批次;否則,應調度鏈邊界中的工作負載。
[0060]
圖4是圖示根據至少一些實施例的具有四個連結的硬體層的加速器電路400的圖,該加速器電路400在三個通路之間使用重疊數據緩衝器。加速器電路400包括內部sram,其具有保留為輔助緩衝器404(稱為ub或ubuf)的區域。內部sram的其餘部分可以保留為主緩衝器(圖4中未示出)(稱為cbuf)。加速器電路400還包括存儲器接口和一個或更多個執行四個連結層的處理單元,四個連結層包括輸入層402(layer0)、第一層406、第二層408和第三層410。這裡,輸入數據分為三個塊,有三個通路。因此,第一層406對三個塊執行三次第一硬體指令,第二層408對三個塊執行三次第二硬體指令,第三層410對三個塊執行三次第三硬體指令。
[0061]
在第一通路中,第一層406執行第一指令,該第一指令標識要存儲在輔助緩衝器404中的第一塊414的第一部分412。第一部分412表示第一塊414和第二塊416之間的重疊數據。在第二通路中,第一層406執行第二指令,該第二指令從第二緩衝器404中檢索第一部分412用於第二塊416。在第二通路中,第一層406還可以執行另一指令,該指令標識第二塊416的第二部分418以存儲在輔助緩衝器404中。第二部分418表示第二塊416和第三塊420之間的重疊數據。在第三通路中,第一層406執行第三指令,第三指令從輔助緩衝器404中檢索第二部分418用於第三塊420。在至少一個實施例中,第一層406可以執行從主緩衝器檢索特徵數據的其他指令(未在圖4中示出)。在至少一個實施例中,單個指令可用於從主緩衝器檢索特徵數據並從輔助緩衝器404檢索重疊數據。在至少一個實施例中,單獨指令可用於從主緩
衝器檢索特徵數據並從輔助緩衝器404檢索重疊數據。
[0062]
在至少一個實施例中,在第一通路中,第二層408執行第一指令,該第一指令標識要存儲在輔助緩衝器404中的第一塊424的第一部分422。第一部分422表示第一塊424與第二塊426之間的重疊數據。在第二通路中,第二層408執行第二指令,該第二指令從輔助緩衝器404檢索第一部分422用於第二塊426。在第二通路中,第二層408可以還執行另一個指令,該指令標識要存儲在輔助緩衝器404中的第二塊426的第二部分428。第二部分428表示第二塊426和第三塊430之間的重疊數據。在第三通路中,第二層408執行第三指令,第三指令從輔助緩衝器404中檢索第二部分418用於第三塊430。在至少一個實施例中,第二層408可以執行從主緩衝器檢索特徵數據的其他指令(圖4中未示出)。在至少一個實施例中,單個指令可用於從主緩衝器檢索特徵數據並從輔助緩衝器404檢索重疊數據。在至少一個實施例中,單獨指令可用於從主緩衝器檢索特徵數據並從輔助緩衝器404檢索重疊數據。
[0063]
在至少一個實施例中,第三層410可以執行從主緩衝器(圖4中未示出)檢索特徵數據而不從輔助緩衝器404檢索重疊數據的其他指令。類似地,輸入層402可以執行一個或更多個指令,從外部存儲器設備或主緩衝器(圖4中未示出)檢索輸入數據或特徵數據。輸入層402可以執行將輸出數據或輸出特徵數據存儲到主緩衝器的一個或更多個指令。
[0064]
如本文所述,編譯器可以包括各種參數,這些參數允許編譯器生成一組硬體指令,這些硬體指令標識重疊數據並將重疊數據存儲在輔助緩衝器中,例如在圖5中說明的。
[0065]
圖5是圖示根據至少一些實施例的使用硬體指令來存儲和獲取通路之間的塊中的重疊數據的兩個卷積層的圖。第一卷積層502具有以下參數:輸入大小:16x16,內核大小:7x7,步幅:1x1,填充:3x3,以及輸出大小:16x16。第二卷積層504具有以下參數:輸入大小:16x16,內核大小:5x5,步幅:1x1,填充:2x2,以及輸出大小:16x16。如圖5所示,第一層502接收第一輸入506,第一輸入是16x16。第一輸入可能超過為主緩衝器指定的容量,因此第一輸入506被分成兩個塊,第一塊508和第二塊510。第一層502輸出第一輸出512,第一輸出是16x16。因為第一輸入506被分成兩個塊,所以第一輸出512也被分成兩個塊,第一塊514和第二塊516。因為第一層502和第二層504是連結的,所以第一層502的第一輸出512也是第二層504的第二輸入。第二層504輸出第二輸出518,第二輸出是16x16。因為第一輸出512被分成兩個塊,所以第二輸出518也被分成兩個塊,第一塊520和第二塊522。
[0066]
在至少一個實施例中,編譯器可以生成一組指令,以使用主緩衝器(cbuf)在兩通路中使用兩個塊執行兩個卷積。下面列出了一組示例指令:
[0067]
卷積0(輸入:dram,13x16,輸出:cbuf,10x16,通路0)
[0068]
卷積1(輸入:cbuf,10x16,輸出:cbuf,8x16,通路0)
[0069]
卷積0(輸入:dram,13x16,輸出:cbuf,10x16,通路1)
[0070]
卷積1(輸入:cbuf,10x16,輸出:dram,8x16,通路1)
[0071]
在至少一個實施例中,當使用輔助緩衝器來存儲重疊數據時,編譯器可以生成一組指令,以使用主緩衝器(cbuf)和輔助緩衝器(ubuf)在兩個通路中使用兩個塊執行兩個卷積)。編譯器可以生成除上述指令之外的其他指令,以從主緩衝器存儲和獲取適當的特徵數據,並從輔助緩衝器中存儲和獲取重疊數據。下面列出了一組示例指令:
[0072]
卷積0(輸入:dram,13x16,輸出:cbuf,10x16,通路0)
[0073]
裁剪(輸入:cbuf,4x16,步幅:xxx,輸出:ubuf,4x16,通路0)
[0074]
卷積1(輸入:cbuf,10x16,輸出:cbuf,8x16,通路0)
[0075]
卷積0(輸入:dram,9x16,輸出:cbuf,6x16,通路1)
[0076]
獲取+卷積1(輸入:cbuf(6x16)+ubuf(4x16),輸出:dram,8x16,通路1)
[0077]
在至少一個實施例中,通過將重疊數據存儲在輔助緩衝器中,可以節省30%的存儲器流量(例如,(13-9)/13=30%流量節省)和40%的計算節省(例如,(10-6)/10=40%mac節省)。當加速器電路中沒有硬體裁剪支持時,可以使用這組指令。在至少一個實施例中,編譯器可以使用具有硬體裁剪的指令來存儲來自主緩衝器的適當特徵數據並存儲來自輔助緩衝器的重疊數據。下面列出了一組示例指令:
[0078]
卷積0+裁剪(輸入:dram,13x16,輸出:cbuf,10x16,ubuf,4x16,通路0)
[0079]
卷積1(輸入:cbuf,10x16,輸出:cbuf,8x16,通路0)
[0080]
卷積0(輸入:dram,9x16,輸出:cbuf,6x16,通路1)
[0081]
獲取+卷積1(輸入:cbuf(6x16)+ubuf(4x16),輸出:dram,8x16,通路1)
[0082]
可替代地,編譯器可以生成其他指令集來識別、存儲和檢索跨通路的塊之間的重疊數據。
[0083]
圖6是根據至少一些實施例的識別輸出塊的一部分並將其存儲在輔助緩衝器中的方法600的流程圖。方法600可以通過包括硬體、軟體、固件或其任何組合的處理邏輯來執行。在至少一個實施例中,方法600由圖1的加速器核心100的硬體執行。在至少一個實施例中,方法600由圖1的卷積引擎104執行。在至少一個實施例中,方法600由圖1的池化引擎108執行。
[0084]
回到圖6,方法600開始於處理邏輯從加速器電路的主緩衝器或耦合到加速器電路的外部存儲器接收輸入特徵圖的第一輸入塊(框602)。輸入特徵圖的大小超過主緩衝器的存儲容量,並且輸入特徵圖至少包括第一輸入塊和第二輸入塊。處理邏輯對第一輸入塊執行第一操作以獲得第一輸出塊(框604)。處理邏輯將第一輸出塊存儲在主緩衝器中(框606)。處理邏輯將第一輸出塊的一部分識別為對應於第一輸入塊和第二輸入塊之間的重疊數據(框608)。處理邏輯將第一輸出塊的部分存儲在加速器電路的輔助緩衝器中(框610),並且方法600結束。
[0085]
在至少一個實施例中,處理邏輯在第一通路中識別該部分並將第一輸出塊的該部分存儲在輔助緩衝器中。在第一通路之後的第二通路中,處理邏輯從主緩衝器接收第二輸入塊的一部分並對第二輸入塊的該部分執行第一操作以獲得第二輸出塊的一部分。處理邏輯從輔助緩衝器中檢索第一輸出塊的部分。處理邏輯將第二輸出塊存儲在主緩衝器中。第二輸出塊包括第二輸出塊的部分和第一輸出塊的部分。
[0086]
在至少一個實施例中,處理邏輯在第二通路中將第二輸出塊的一部分識別為對應於第一輸入塊與第三輸入塊之間的重疊數據。在本實施例中,輸入特徵圖包括第一輸入塊、第二輸入塊和第三輸入塊。處理邏輯將第二輸出塊的部分存儲在輔助緩衝器中。在第三通路中,處理邏輯從主緩衝器接收第三輸入塊的部分,並對第三輸入塊的該部分執行第一操作以獲得第三輸出塊的部分。處理邏輯從輔助緩衝器檢索第二輸出塊的部分並將第二輸出塊的部分作為第三輸出塊的部分存儲在主緩衝器中。第三輸出塊包括第三輸出塊的基於第一操作的部分和第二輸出塊的從輔助緩衝器檢索的部分。
[0087]
在至少一個實施例中,在第一通路中,處理邏輯從主緩衝器檢索第一輸出塊並且
對第一輸出塊執行第二操作以獲得第三輸出塊並將第三輸出塊存儲在主緩衝器中。在第二通路中,處理邏輯從主緩衝器檢索第二輸出塊並且對第二輸出塊執行第二操作以獲得第四輸出塊。處理邏輯將第四輸出塊存儲在主緩衝器中。
[0088]
在至少一個實施例中,第一操作由處理第一層類型的第一固定功能引擎執行,並且第二操作由處理第二層類型的第二固定功能引擎執行。在至少一個實施例中,第一操作和第二操作由相同的固定功能引擎執行。
[0089]
圖7是根據至少一些實施例的dla系統700的框圖。dla系統700被認為是無頭系統,其中dla子系統702的逐單元管理發生在主系統處理器cpu 704上。dla子系統702包括中斷接口706、配置空間總線(csb)接口708、主數據總線接口710(dbbif)、輔助數據總線接口712和上面關於圖1描述的重疊數據緩衝器102。cpu 704和dla子系統702耦合到系統存儲器714(例如dram)。dla子系統702通過主數據總線接口710耦合到系統存儲器714。dla子系統702可以耦合到輔助存儲器,例如sram(圖7中未示出)。應當注意,dla系統700可能不包括可選的輔助數據總線接口712,因為當整體系統性能不那麼重要時,系統存儲器714可以消耗比sram更少的功率。dla系統700可以更省電地使用系統存儲器714作為計算高速緩存。
[0090]
圖7的dla系統700表示比具有用於dla子系統702的逐單元管理的專用控制器或協處理器的dla系統更成本敏感的系統。dla系統700可以被認為是小型系統模型。小型系統模型可用於成本敏感的互聯物聯網(iot)類設備、人工智慧(ai)和具有明確定義任務的自動化定向系統,其中成本、面積和功率是其主要驅動因素。可以通過dla子系統702的可配置資源實現成本、面積和功率方面的節省。可以預編譯神經網絡模型並且可以優化它們的性能,從而允許更大的模型降低負載複雜度。反過來,負載複雜度的降低實現了按比例縮小的dla實現,其中模型消耗的存儲空間更少,系統軟體加載和處理所需的時間也更少。在至少一個實施例中,dla系統700可以一次執行一項任務。可替代地,dla系統700可以一次執行多個任務。對於dla系統700,dla系統700的上下文切換不會導致cpu704因服務來自dla子系統702的大量中斷而負擔過重。這消除了對附加微控制器的需要,並且cpu 704執行存儲器分配和其他dla子系統管理操作。如本文所述,dla子系統702包括重疊數據緩衝器102,用於在由固定功能引擎執行的連結層和由cpu 704執行的其他操作之間進行平鋪。
[0091]
圖8是根據至少一些實施例的dla系統800的框圖。dla系統800被認為是一個頭系統,其中主系統處理器cpu 802將高中斷頻率任務委託給耦合到dla子系統702的配套微控制器804。dla系統800類似於dla系統700,如類似附圖標記所述,除了dla系統800包括配套的微控制器804。dla系統800可以被認為是一個更大的系統,其特徵在於添加專用控制協處理器和高帶寬sram以支持dla子系統702。更大的系統模型可以用於可能同時運行許多任務的iot設備。
[0092]
在某些情況下,當需要更高的性能和多功能性時,使用圖8中較大的dla模型。面向性能的iot系統可以對許多不同的網絡拓撲進行推理;因此,它們保持高度的靈活性。此外,這些系統可能同時執行許多任務,而不是串行化推理操作,因此推理操作不會在cpu 704上消耗過多的處理能力。為了滿足這些需求,dla子系統702包括輔助數據總線接口712,其耦合到專用的高帶寬sram 812。sram 812可以用作dla子系統702的高速緩存。sram 812也可以由系統上的其他高性能計算機視覺相關組件使用,以進一步減少到主系統存儲器714(例如,dram)的流量。dla子系統702啟用與微控制器804(或專用控制協處理器)的接口以限制
cpu 704上的中斷負載。在至少一個實施例中,微控制器804可以是基於risc-v的picorv32處理器、arm cortex-m或cortex-r處理器,或其他微控制器設計。使用專用協處理器(微控制器804),主處理器(cpu 704)可以處理與管理dla子系統702相關的一些任務。例如,微控制器804或cpu 704仍然可以處理對dla硬體的細粒度或粗粒度調度、dla存儲器訪問的輸入-輸出存儲器管理(iommu)映射(根據需要)、輸入數據的存儲器分配和dla子系統702上的固定權重數組以及在dla子系統702上運行的其他系統組件和任務之間的同步。
[0093]
在至少一個實施例中,dla子系統702可編程為多種操作模式,例如獨立模式、融合模式等。每個功能塊都可以在獨立模式下配置它執行的時間和內容,每個塊都在執行其被指派的任務(類似於深度學習框架中的獨立層)。獨立操作可以以指派的塊執行存儲器到存儲器操作開始和結束、進出主系統存儲器或專用sram存儲器。在融合模式下,一些塊可以組裝成管道。管道可以通過繞過存儲器往返而不是讓塊通過小型先進先出(fifo)隊列相互通信來提高性能。例如,卷積引擎可以將數據傳遞給單數據點處理器(single data point processor),其可以將數據傳遞給平面數據處理器(planar data processor)和交叉通道數據處理器(cross-channel data processor)。
[0094]
本文公開的技術可以結合在任何可用於處理神經網絡的處理器中,例如中央處理單元(cpu)、gpu、智能處理單元(ipu)、神經處理單元(npu)、張量處理單元(tpu)、神經網絡處理器(nnp)、數據處理單元(dpu)、視覺處理單元(vpu)、專用集成電路(asic)、現場可編程門陣列(fpga)等。這種處理器可以併入個人計算機(例如膝上型電腦)、數據中心、物聯網(iot)設備、手持設備(例如智慧型手機)、車輛、機器人、語音控制設備,或對神經網絡進行推理、訓練或任何其他處理的任何其他設備。這樣的處理器可以用在虛擬化系統中,使得在系統上的虛擬機中執行的作業系統可以利用該處理器。
[0095]
作為示例,結合本文公開的技術的處理器可用於處理機器中的一個或更多個神經網絡,以識別、分類、操縱、處理、操作、修改或導航現實世界中的物理對象。例如,這樣的處理器可以用在自主車輛(例如,汽車、摩託車、直升機、無人機、飛機、船、潛艇、送貨機器人等)中,以使車輛在現實世界中移動。此外,這樣的處理器可用於工廠的機器人中以選擇部件並將部件組裝成組件。
[0096]
作為示例,結合本文公開的技術的處理器可用於處理一個或更多個神經網絡以識別圖像中的一個或更多個特徵或改變、生成或壓縮圖像。例如,可以採用這樣的處理器來增強使用光柵、光線追蹤(例如,使用nvidia rtx)和/或其他渲染技術渲染的圖像。在另一個示例中,可以採用這樣的處理器來減少通過網絡(例如,網際網路、移動電信網絡、wifi網絡以及任何其他有線或無線網絡系統)從渲染設備傳輸到顯示設備的圖像數據量。此類傳輸可用於將圖像數據從雲中的伺服器或數據中心流式傳輸到用戶設備(例如,個人計算機、視頻遊戲控制臺、智慧型手機、其他行動裝置等),以增強流式傳輸圖像的服務,例如nvidia geforce now(gfn)、google stadia等。
[0097]
作為示例,結合本文公開的技術的處理器可用於處理一個或更多個神經網絡,用於可利用神經網絡的任何其他類型的應用。例如,此類應用可能涉及翻譯語言、識別和消除音頻中的聲音、檢測商品和服務生產過程中的異常或缺陷、監視生物和非生物、醫療診斷、做出決定等。
[0098]
其他變體在本公開的精神內。因此,雖然所公開的技術容易受到各種修改和替代
構造的影響,但某些圖示的實施例在附圖中示出並且在上面進行了詳細描述。然而,應當理解,無意將本公開內容限制為特定的一種或更多種公開形式,相反,其意圖是涵蓋如所附權利要求中所定義的落入本公開的精神和範圍內的所有修改、替代結構和等同物。
[0099]
除非另有說明或明顯與上下文相矛盾,否則在描述公開的實施例的上下文中(尤其是在以下權利要求的上下文中)使用術語「一」和「一個」以及「該」和類似的指稱將被解釋為涵蓋單數和複數,而不是作為術語的定義。除非另有說明,否則術語「包括」、「具有」、「保護」和「含有」將被解釋為開放式術語(意思是「包括但不限於」)。「連接」,當未修改並指物理連接時,應解釋為部分或全部包含在之內、附接到或接合在一起,即使有東西介入。除非本文另有說明,否則本文中數值範圍的列舉僅意在用作單獨提及落入該範圍內的每個單獨值的速記方法。每個單獨的值都包含在說明書中,就好像它在本文中被單獨引用一樣。在至少一個實施例中,除非另有說明或與上下文相矛盾,否則術語「集合」(例如,「項目集合」)或「子集」的使用將被解釋為包括一個或更多個成員的非空集合。此外,除非另有說明或與上下文相矛盾,術語對應集合的「子集」不一定表示對應集合的真子集,而是子集和對應集合可以相等。
[0100]
連詞,例如「a、b和c中的至少一個」或「a、b和c中的至少一個」形式的短語,除非另有明確說明或與上下文明顯矛盾,在上下文中以其他方式理解為一般用於表示項目、術語等可以是a或b或c,或a和b和c的集合的任何非空子集。例如,在說明性的以具有三個成員的集合為例,連詞「a、b和c中的至少一個」和「a、b和c中的至少一個」是指以下任何一個集合:{a}、{b},{c},{a,b},{a,c},{b,c},{a,b,c}。因此,這種連詞語言通常不旨在暗示某些實施例需要a中的至少一個、b中的至少一個和c中的至少一個各自存在。此外,除非另有說明或與上下文相矛盾,否則術語「複數」表示複數的狀態(例如,「複數個項目」表示多個項目)。在至少一個實施例中,多個項目的數量至少為兩個,但當明確指示或通過上下文指示時可以更多。此外,除非另有說明或從上下文中明確,否則「基於」一詞是指「至少部分基於」而不是「僅基於」。
[0101]
本文描述的過程的操作可以以任何合適的順序執行,除非本文另有說明或與上下文明顯矛盾。在至少一個實施例中,諸如本文描述的那些過程(或其變體和/或組合)的過程在配置有可執行指令的一個或更多個計算機系統的控制下執行並且被實現為通過硬體或其組合在一個或更多個處理器上共同執行的代碼(例如,可執行指令、一個或更多個多個電腦程式或一個或更多個應用程式)。在至少一個實施例中,代碼例如以電腦程式的形式存儲在計算機可讀存儲介質上,該電腦程式包括可由一個或更多個處理器執行的多個指令。在至少一個實施例中,計算機可讀存儲介質是不包括瞬態信號(例如,傳播瞬態電或電磁傳輸)但在瞬態信號的收發器內包括非瞬態數據存儲電路(例如,緩衝器、高速緩存和隊列)的非暫態計算機可讀存儲介質。在至少一個實施例中,代碼(例如,可執行代碼或原始碼)存儲在其上存儲有可執行指令的一組一個或更多個非暫態計算機可讀存儲介質上(或存儲可執行指令的其他存儲器),當可執行指令由計算機系統的一個或更多個處理器執行(即,作為被執行的結果)使計算機系統執行本文所述的操作。在至少一個實施例中,一組非暫態計算機可讀存儲介質包括多個非暫態計算機可讀存儲介質,並且多個非暫態計算機可讀存儲介質中的一個或更多個單獨的非暫態存儲介質缺少所有代碼,同時多個非暫態計算機可讀存儲介質共同存儲所有代碼。在至少一個實施例中,可執行指令被執行使得不同的
指令由不同的處理器執行——例如,非暫態計算機可讀存儲介質存儲指令並且主中央處理單元(「cpu」)執行一些指令而圖形處理單元(「gpu」)和/或數據處理單元(「dpu」)——可能與gpu結合使用——執行其他指令。在至少一個實施例中,計算機系統的不同組件具有單獨的處理器並且不同的處理器執行不同的指令子集。
[0102]
因此,在至少一個實施例中,計算機系統被配置為實現一個或更多個服務,這些服務單獨或共同執行本文描述的過程的操作,並且這種計算機系統配置有能夠執行操作的適用硬體和/或軟體。此外,實現本公開的至少一個實施例的計算機系統是單個設備,並且在另一個實施例中,是分布式計算機系統,包括多個不同地操作的設備,使得分布式計算機系統執行本文描述的操作並且使得單個設備不執行所有操作。
[0103]
本文提供的任何和所有示例或示例性語言(例如,「諸如」)的使用僅旨在更好地闡明本公開的實施例並且不對本公開的範圍構成限制,除非另有聲明。說明書中的任何語言都不應被解釋為指示任何未要求保護的元素對於本公開的實踐是必不可少的。
[0104]
本文引用的所有參考文獻,包括出版物、專利申請和專利,均以相同的程度通過引用併入本文,就好像每個參考文獻單獨且具體地指示以通過引用的方式併入並本文全文闡述一樣。
[0105]
在說明書和權利要求書中,可以使用術語「耦合」和「連接」以及它們的派生詞。應當理解,這些術語可能不旨在作為彼此的同義詞。相反,在特定示例中,「連接」或「耦合」可用於指示兩個或更多個元素彼此直接或間接物理或電接觸。「耦合」也可能意味著兩個或更多個元素彼此不直接接觸,但仍相互合作或相互作用。
[0106]
除非另有明確說明,否則可以理解,貫穿說明書的術語,例如「處理」、「運算」、「計算」、「確定」等,指的是計算機或計算系統或類似的電子計算設備的動作和/或過程,其操縱和/或將計算系統的寄存器和/或存儲器中表示為物理量(例如電子量)的數據轉換為類似地表示為計算系統的存儲器、寄存器或其他此類信息存儲、傳輸或顯示設備中的物理量的其他數據。
[0107]
以類似的方式,術語「處理器」可以指處理來自寄存器和/或存儲器的電子數據並將該電子數據轉換成可以存儲在寄存器和/或存儲器中的其他電子數據的任何設備或設備的一部分。作為非限制性示例,「處理器」可以是cpu或gpu。「計算平臺」可以包括一個或更多個處理器。如本文所用,「軟體」過程可以包括例如隨時間執行工作的軟體和/或硬體實體,例如任務、線程和智能代理。此外,每個過程可以指多個過程,用於順序或並行、連續或間歇地執行指令。在至少一個實施例中,術語「系統」和「方法」在本文中可互換使用,只要系統可以體現一種或多種方法並且方法可以被認為是系統。
[0108]
在本文件中,可以參考獲得、獲取、接收或將模擬或數字數據輸入到子系統、計算機系統或計算機實現的機器中。在至少一個實施例中,獲得、獲取、接收或輸入模擬和數字數據的過程可以通過多種方式來完成,例如通過接收數據作為函數調用的參數或對應用程式接口的調用。在至少一個實施例中,獲得、獲取、接收或輸入模擬或數字數據的過程可以通過經由串行或並行接口傳輸數據來完成。在至少一個實施例中,獲得、獲取、接收或輸入模擬或數字數據的過程可以通過經由計算機網絡從提供實體到獲取實體傳輸數據來完成。在至少一個實施例中,還可以參考提供、輸出、傳輸、發送或呈現模擬或數字數據。在各種示例中,提供、輸出、傳輸、發送或呈現模擬或數字數據的過程可以通過將數據作為函數調用
的輸入或輸出參數、應用程式編程接口的參數或過程間通信機制來實現。
[0109]
儘管本文的描述闡述了所描述技術的示例實施例,但其他架構可以用於實現所描述的功能,並且旨在落入本公開的範圍內。此外,儘管為了描述的目的可以在上面定義職責的具體分配,但是可以根據情況以不同的方式分配和劃分各種功能和職責。
[0110]
此外,儘管已經以特定於結構特徵和/或方法行為的語言描述了主題,但是應當理解,所附權利要求中要求保護的主題不一定限於所描述的特定特徵或行為。相反,具體特徵和行為被公開為實施權利要求的示例性形式。

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀