TWI784845B - 對可重配置處理器之資料流功能卸載 - Google Patents

對可重配置處理器之資料流功能卸載 Download PDF

Info

Publication number
TWI784845B
TWI784845B TW110147198A TW110147198A TWI784845B TW I784845 B TWI784845 B TW I784845B TW 110147198 A TW110147198 A TW 110147198A TW 110147198 A TW110147198 A TW 110147198A TW I784845 B TWI784845 B TW I784845B
Authority
TW
Taiwan
Prior art keywords
data
reconfigurable
processor
reconfigurable unit
host
Prior art date
Application number
TW110147198A
Other languages
English (en)
Other versions
TW202240394A (zh
Inventor
馬丁 勞曼
鄭琪
班迪斯 夏
拉維德 庫瑪
建興 梁
蘇姆蒂 賈拉斯
格雷戈里 格羅霍斯
Original Assignee
美商聖巴諾瓦系統公司
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US17/127,818 external-priority patent/US11182264B1/en
Priority claimed from US17/127,929 external-priority patent/US11182221B1/en
Priority claimed from US17/379,921 external-priority patent/US11392740B2/en
Priority claimed from US17/379,924 external-priority patent/US11237880B1/en
Application filed by 美商聖巴諾瓦系統公司 filed Critical 美商聖巴諾瓦系統公司
Publication of TW202240394A publication Critical patent/TW202240394A/zh
Application granted granted Critical
Publication of TWI784845B publication Critical patent/TWI784845B/zh

Links

Images

Landscapes

  • Logic Circuits (AREA)
  • Hardware Redundancy (AREA)
  • Multi Processors (AREA)

Abstract

粗略地描述,本發明涉及一種系統,其包括複數個功能單元,該複數個功能單元執行資料流的不同區段,並且透過點對點(peer-to-peer)訊息協定共享中間結果。功能單元是可重配置的,不同的單元可在不同的粒度級重配置。點對點訊息協定包括控制符記(token)或其他機制,透過該些控制符記或其他機制,中間結果的消費者獲知資料已被傳輸,並且回應於此而觸發其下一個資料流區段。主機或配置控制器為資料單元配置它們各自的資料流區段,但是一旦開始執行經配置的資料流,就不需要主機參與編排資料同步、傳輸中間結果、或者在接收到資料之後觸發處理。因而將控制開銷最小化。

Description

對可重配置處理器之資料流功能卸載
所公開的技術係關於機器學習應用程式中的吞吐量改進,該機器學習應用程式使用如中央處理單元(CPU)、圖形處理單元(GPU)、現場可編程閘陣列(FPGA)、粗粒度可重配置架構(CGRA)、特殊應用積體電路(ASIC)、特殊應用指令集處理器(ASIP)及數位信號處理器(DSP)等的處理器。特別是,所公開的技術係關於部分地在一或多個CGRA上和部分地在一或多個智慧型可編程網路介面元件上執行基於資料流的處理圖。 合併案
出於所有目的,透過引用將下面內容併入,如在本文中完整闡述一般:
美國非臨時專利申請案號17/379,921,於2021年7月19日申請,名稱為“Dataflow Function Offload to Reconfigurable Processors”,(代理人案號為SBNV 1039-1);
美國非臨時專利申請案號17/379,924,於2021年7月19日申請,名稱為“DATAFLOW ALL-REDUCE FOR RECONFIGURABLE PROCESSOR SYSTEMS”,(代理人案號為SBNV 1039-2);
美國非臨時專利申請案號17/127,818,現為US 11,182,264 B1,於2020年12月18日申請,名稱為“INTRA-NODE BUFFER-BASED STREAMING FOR RECONFIGURABLE PROCESSOR-AS-A-SERVICE (RPaaS)”,(代理人案號為SBNV 1029-1)。
美國非臨時專利申請案號17/127,929,現為US 11,182,221 B1,於2020年12月18日申請,名稱為 “INTER-NODE BUFFER-BASED STREAMING FOR RECONFIGURABLE PROCESSOR-AS-A-SERVICE (RPaaS)”,(代理人案號為SBNV 1029-2)。
Prabhakar等人,“Plasticine: A Reconfigurable Architecture for Parallel Patterns”, ISCA ’17,2017年6月24-28日,加拿大安大略省多倫多;
Koeplinger等人,“Spatial: A Language And Compiler For Application Accelerators”,第39屆ACM SIGPLAN會議程式語言設計與實現會議(Conference On Programming Language Design And Implementation (PLDI))論文集,2018年第43屆國際計算機架構會議論文集;
美國非臨時專利申請案號16/239,252,於2019年1月3日申請,名稱為“VIRTUALIZATION OF A RECONFIGURABLE DATA PROCESSOR”,(代理人案號為SBNV 1000-1);
美國非臨時專利申請案號16/197,826,於2018年11月21日申請,名稱為“CONFIGURATION LOAD OF A RECONFIGURABLE DATA PROCESSOR”,(代理人案號為SBNV 1001-1A);
美國非臨時專利申請案號16/198,086,於於2018年11月21日申請,名稱為“CONFIGURATION UNLOAD OF A RECONFIGURABLE DATA PROCESSOR”,(代理人案號為SBNV 1001-1B);
美國非臨時專利申請案號16/260,548,於2019年1月29日申請,名稱為“MATRIX NORMAL/TRANSPOSE READ AND A RECONFIGURABLE DATA PROCESSOR INCLUDING SAME”,(代理人案號為SBNV 1005-1);
美國非臨時專利申請案號16/536,192,於2019年8月8日申請,名稱為“COMPILER FLOW LOGIC FOR RECONFIGURABLE ARCHITECTURES”,(代理人案號為SBNV 1006-1);
美國非臨時專利申請案號16/407,675,於2019年5月9日申請,名稱為“CONTROL FLOW BARRIER AND RECONFIGURABLE DATA PROCESSOR”,(代理人案號為SBNV 1007-1);
美國非臨時專利申請案號16/504,627,於2019年7月8日申請,名稱為“QUIESCE RECONFIGURABLE DATA PROCESSOR”,(代理人案號為SBNV 1008-1);
美國非臨時專利申請案號16/572,516,於2019年9月16日申請,名稱為“EFFICIENT EXECUTION OF OPERATION UNIT GRAPHS ON RECONFIGURABLE ARCHITECTURES BASED ON USER SPECIFICATION”,(代理人案號為SBNV 1009-2);
美國非臨時專利申請案號16/744,077,於2020年1月15日申請,名稱為“COMPUTATIONALLY EFFICIENT SOFTMAX LOSS GRADIENT BACKPROPAGATION”,(代理人案號為SBNV 1010-1);
美國非臨時專利申請案號16/590,058,於2019年10月1日申請,名稱為“COMPUTATION UNITS FOR FUNCTIONS BASED ON LOOKUP TABLES”,(代理人案號為SBNV 1011-1);
美國非臨時專利申請案號16/695,138,於2019年11月25日申請,名稱為“COMPUTATION UNITS FOR BATCH NORMALIZATION”,(代理人案號為SBNV 1012-1);
美國非臨時專利申請案號16/688,069,於2019年11月19日申請,名稱為“LOOK-UP TABLE WITH INPUT OFFSETTING”,(代理人案號為SBNV 1013-1);
美國非臨時專利申請案號16/718,094,於2019年12月17日申請,名稱為“COMPUTATION UNITS FOR ELEMENT APPROXIMATION”,(代理人案號為SBNV 1014-1);
美國非臨時專利申請案號16/560,057,於2019年9月4日申請,名稱為“SIGMOID FUNCTION IN HARDWARE AND A RECONFIGURABLE DATA PROCESSOR INCLUDING SAME”,(代理人案號為SBNV 1015-1);
美國非臨時專利申請案號16/572,527,於2019年9月16日申請,名稱為“PERFORMANCE ESTIMATION-BASED RESOURCE ALLOCATION FOR RECONFIGURABLE ARCHITECTURES”,(代理人案號為SBNV 1016-2);
美國非臨時專利申請案號15/930,381,於2020年5月12日申請,名稱為“COMPUTATIONALLY EFFICIENT GENERAL MATRIX-MATRIX MULTIPLICATION (GeMM)”,(代理人案號為SBNV 1019-1);
美國非臨時專利申請案號16/890,841,於2020年6月2日申請,名稱為“ANTI-CONGESTION FLOW CONTROL FOR RECONFIGURABLE PROCESSORS”,(代理人案號為SBNV 1021-1);
美國非臨時專利申請案號16/922,975,於2020年7月7日申請,名稱為“RUNTIME VIRTUALIZATION OF RECONFIGURABLE DATAFLOW RESOURCES”,(代理人案號為SBNV 1026-1);
美國非臨時專利申請案號16/996,66,於2020年8月18日申請,名稱為“RUNTIME PATCHING OF CONFIGURATION FILES”,(代理人案號為SBNV 1027-1);
美國非臨時專利申請案號17/023,015,於2020年9月16日申請,“COMPILE TIME LOGIC FOR DETECTING STREAMING COMPATIBLE AND BROADCAST COMPATIBLE DATA ACCESS PATTERNS”(代理人案號為SBNV 1022-1);及
美國非臨時專利申請案號17/031,679,於2020年9月24日申請,“SYSTEMS AND METHODS FOR MEMORY LAYOUT DETERMINATION AND CONFLICT RESOLUTION”(代理人案號為SBNV 1023-1)。
本節中所討論的主題不應僅由於在本節中被提及而被認為是現有技術。相似的,本節中所提及的或與作為背景技術而提供的主題相關聯的問題不應被認為是現有技術中先前已公認的。本節中的主題僅表示不同的方法,其中以及其本身亦可對應於申請專利範圍技術的實現。
傳統的儲存程式電腦架構係基於指令為基的控制流範例,其中回應於循序提供給中央處理器的軟體指令,對儲存在一些儲存裝置中的資料循序執行一基元組操作。程式計數器控制每條指令何時執行。相比之下,資料流架構係基於將不連續的計算參與者組織成可以管線化的階段的想法。資料從一個處理階段沿管線向下移動到下一個處理階段,而不是將資料儲存在記憶體中並將處理指令帶到中央處理器以執行每個後續步驟。
控制流指令是集中控制的,而資料流階段執行主要回應於所有所需的運算元的可用性。在資料流架構中,每個處理元件在其可以執行(或完成執行)該階段的函數之前,都有某些方式知道所有運算元何時可用。許多種類的演算法可以資料流處理來實現,例如自然語言處理、推薦引擎、資料庫分析、科學應用、SQL資料處理和深度學習的某些態樣。本申請聚焦於深度學習演算法作為範例,但本文中討論的概念同樣適用於其他類型的問題。
深度學習是受人腦結構和功能啟發的機器學習演算法的一子集。大多數深度學習演算法都涉及人工類神經網路架構,其中多層神經元各從前一層或前多層中的神經元接收輸入,進而影響隨後一層或隨後多層中的神經元。訓練這些類神經網路模型的計算要求非常高。近年來,透過將許多常用計算卸載到專門的GPU協同處理器硬體上取得了重大進展,但即便如此,網路訓練仍然可能在單一機器上花費不切實際的長時間。幸運的是,網路訓練中涉及的計算通常包括高度重複的冗長序列,並且不依賴於來自序列之其他實例的內部結果。這種計算通常可以透過在不同機器上運行序列的不同實例來平行化。演算法仍然需要在實例之間定期共享部分結果,因此隨著演算法進行,仍然需要定期同步。
用於平行化類神經網路訓練的機制大致可以分為兩類:模型平行和資料平行。使用模型平行,網路模型被劃分,並且將其之部分分配給不同機器。在一些版本中,模型被縱向劃分,使得模型的上游部分由一台機器執行,該機器將其結果傳遞給執行模型下游部分的另一台機器。同時,上游機器可以透過模型的上游部分開始處理下一批訓練資料。在其他版本的模型平行中,模型可以包括稍後合併到下游的分支。在此類版本中,不同分支可以在不同機器上處理。
使用資料平行,同一網路模型的不同實例被編程到不同機器中。不同實例通常各自處理不同批的訓練資料,並且結合部分結果。平行化機制也可以混合及匹配,使用模型平行和資料平行的組合。
然而,大多數平行實現仍需要集中控制,至少用於管理部分結果在各種機器之間的共享。現在可以使用GPU,GPU可以透過直接與GPU互連的專用高頻寬通訊鏈路與在相同或不同台機器中的GPU共享更新,該專用高頻寬通訊鏈路通常與將GPU連接到其本地CPU的通道分開。但是共享過程仍然是在運行時集中協調。例如,在GPU實現中,當每個處理節點在同步步驟之前已完成其工作時,它會透過某種控制通訊通知主機。主機通常等待從所有所需的處理節點接收此類通訊。然後主機將指令發送回所有處理節點以繼續並相互交換它們的部分結果資料。在一些實現中,在來自所有處理節點的部分結果資料的聚合本身要被分布在處理節點之間的情況下,發生進一步的控制信號往返。例如,可能需要集中控制來協調工作者之間的部分梯度分布、透過一或多個工作者的部分梯度組合、及/或將最終梯度分布回給所有工作者。此類集中控制產生的控制開銷可能會抑制系統擴展超出幾個節點。很少有具有集中式同步的架構能夠擴展到超過個位數的處理節點。
CPU和GPU對指令流進行操作,其中指令執行有狀態的操作。這種類型的指令處理器使用指令進行編程,被編碼為位元。任務被指定為軟體中處理器指令的有序列表。這些單元的硬體架構具有追蹤“程式狀態”的機制。除此之外,程式狀態可包括全局“程式計數器”暫存器的形式,以追蹤要從記憶體取出的下一條指令。此外,此類指令處理器的硬體還可具有用以解碼和執行這些已取出的指令的管線(指令管線)。換句話說,這些架構包含一管線,指令流在執行期間通過此管線流動,其中每條指令執行操作並更新硬體狀態。
GPU可以由核心內的分散式計算單元陣列組成,其通常依賴於共享的記憶體池。分散式計算單元是儲存程式處理器,其可透過編寫已提取、解碼和執行的指令來進行編程,如同普通處理器一樣。同步和通訊是透過執行在共享記憶體上操作的指令序列來實現的。
可重配置處理器,包括現場可編程閘陣列(FPGA),可被配置成比使用執行電腦程式的通用處理器所能達到的更有效率或更快地實現各種功能。正在開發所謂的粗粒度可重配置架構(CGRA),其中陣列中的可配置單元比傳統的更細粒度的FPGA中使用的還要複雜,並且能夠更快或更有效地執行各種類別的功能。例如,已提出CGRA可以實現用於機器學習和人工智慧工作負荷的節能加速器。參見Prabhakar等人,“Plasticine: A Reconfigurable Architecture for Parallel Patterns”, ISCA ’17,2017年6月24-28日,加拿大安大略省多倫多。在上面併入的專利申請案中描述了此類CGRA的各種態樣。
上面專利申請案中描述的CGRA包括可重配置單元陣列,在本文中有時稱為粗粒度可重配置單元(CGRU)。這些單元可以包括一些專門的計算和記憶體單元。這些單元透過組構連接,以實現單元間通訊和同步。元件可以透過多種方式重新配置,但通常依賴於直接硬體重配置,其係透過在運行前從位元檔加載到暫存器中的配置位元的控制下改變它們的行為。在運行時不提取、解碼或執行任何指令;相反,狀態機由位元檔內容配置,以實現操作序列。
此類CGRA的單元對流經大量可配置單元的資料流和控制訊息(而非指令)進行操作,其中可配置單元使用配置資料,諸如位元檔案進行編程。基於可配置單元的實施例具有與基於儲存程式指令的處理器不同的外觀和操作的架構,因為它們必須以不同的方式管理執行。CGRA和FPGA中的可配置單元陣列具有不同的編程合約:配置位元。這些架構沒有提取和處理指令的硬體,它們沒有指令處理器意義上的全局”程式計數器”暫存器,也沒有建構用於提取、解碼和執行指令流的管線。相反的,可配置執行單元和有狀態元件係物理分布在晶片上,並且使用可編程互連連接在一起。程式不是指令流;相反,配置位元對可配置執行單元進行編程,以構建應用程式的自定義控制和資料路徑。代替指令流,可配置單元被編程為對資料流和控制訊息進行操作,以產生其他資料和控制訊息。這使得此類架構本質上是分散式的,沒有單一的全局程式狀態。
CGRA針對執行某些類型的複雜計算進行了最佳化,這些複雜計算在特定類型的應用程式,諸如深度學習中很常見。這在執行更一般或更簡單類型的計算時可能會限制它們的效能。並且,由於CGRA針對處理流動資料進行了最佳化,因此節點間通訊和資料同步的協調可以是對它們功率的次佳使用。因此,希望找到一種執行此類函數的方法,而不影響CGRA單元繼續執行更符合其強大硬體元件之能力的函數的能力。特別希望避免或最小化對單獨主機執行節點間通訊和資料同步之此類協調的任何要求,以避免傾向抑制擴展的控制開銷。
更具體地,如上所述,平行深度學習應用程式,尤其那些基於隨機梯度下降法(SGD)的應用程式,需要在平行操作的各節點之間定期共享中間結果。針對資料平行,這種中間結果可以包括為了能夠計算完全聚合的梯度而與其他工作節點共享的部分聚合的梯度,以及被返回到工作節點的完全聚合的梯度或已更新的類神經網路參數二者。在傳統的基於GPU的資料平行實現中,部分聚合的梯度可以透過直接、高頻寬的鏈路在GPU之間傳遞,但GPU本身因此被佔用來計算完全聚合及更新參數。對於具有太多層而無法容納在單一GPU內的大型類神經網路而言,可以將計算管線化,使得每個GPU針對參數的一個區段計算部分聚合,並且透過直接互連在GPU之間共享這些中間結果,同時每個GPU針對參數的下一個區段進行計算部分聚合。然而,即使每個GPU可能足夠早地從其他GPU接收到部分聚合,它也還不能夠開始進行計算完全聚合,因為它還在為參數的下一個區段進行計算部分聚合。
需要改進類神經網路訓練應用程式中的資料平行的擴展,以便可以有效地訓練更大型及更強大的類神經網路。
粗略地描述,本發明涉及一種系統,其包括複數個功能單元,該複數個功能單元執行資料流的不同區段,並且透過點對點(peer-to-peer)訊息協定共享中間結果。功能單元是可重配置的,不同的單元可在不同的粒度級重配置。點對點訊息協定包括控制符記(token)或其他機制,透過該些控制符記或其他機制,中間結果的消費者獲知資料已被傳輸,並且回應於此而觸發其下一個資料流區段。主機或配置控制器為資料單元配置它們各自的資料流區段,但是一旦開始執行經配置的資料流,就不需要主機參與編排資料同步、傳輸中間結果、或者在接收到資料之後觸發處理。因而將控制開銷最小化。
提供本發明的上述發明內容是為了提供對本發明之一些態樣的基本理解。此發明內容並非旨在識別本發明的關鍵或關鍵要素或者描繪本發明的範圍。其唯一目的是以簡化的形式呈現本發明的一些概念,作為稍後呈現的更詳細的實施方式的前奏。本發明的特定態樣係描述於申請專利範圍、說明書和圖式中。
呈現以下討論以使本領域的任何技術人員能夠製造和使用所公開的技術,並且在特定應用及其要求的情境中提供。對所公開之實施方式的各種修改對本領域之技術人士而言將是顯而易見的,並且在不脫離所公開之技術的精神和範圍的情況下,可將本文中定義的一般原理應用於其他實施方式和應用。因此,所公開之技術並非旨在限於所示出的實施方式,而是應被賦予與本文中所公開之原理和特徵一致的最廣範圍。 資料中心
描述了用於提供可重配置處理器即服務(Reconfigurable Processor-as-a-Service,RPaaS)的系統和過程。這些系統和過程將參考圖1進行描述,圖1示出依據一種實現的資料中心100的架構級示意圖。因為圖1是一架構圖,所以有意地省略資料中心100的某些細節以提高描述的清晰度。可以注意到,資料中心100可以包括以與其他實現中相同或不同方式配置的相同、更多或更少的元件。圖1的討論將安排如下。首先,將描述圖式的元件,然後是它們的相互連接。接著,將更詳細地描述系統中元件的使用。
圖1示出資料中心100中的第一和第二處理節點。在圖1中,第一處理節點被標識為“處理節點1”,以及第二處理節點被標識為“處理節點n”。第一和第二處理節點被配置成以分散式方式協同執行應用程式的配置檔。本領域之技術人士將理解資料中心100可以具有任意數量的處理節點,其可操作地耦接用於透過網路136(本文中亦稱為“網路組構136”)進行資料傳輸。網路136的範例包括儲存區域網路(SAN)和區域網路(LAN)。SAN可以透過各種資料通訊組構、裝置和協定來實現。例如,SAN的組構可以包括光纖通道、乙太網路、InfiniBand、串列小型電腦系統介面(‘SAS’)等。與SAN一起使用的資料通訊協定可以包括先進技術附件(‘ATA’)、光纖通道協定、小型電腦系統介面(‘SCSI’)、網際網路小型電腦系統介面(‘iSCSI’)、HyperSCSI、組構上非揮發性記憶體Express(‘NVMe’)等。
LAN也可以使用各種組構、裝置和協定來實現。例如,LAN的組構可以包括乙太網路(802.3)、無線(802.11)等。LAN中使用的資料通訊協定可以包括傳輸控制協定(‘TCP’)、用戶資料報協定(‘UDP’)、網際網路協定(IP)、超文件傳輸協定(‘HTTP’)、無線存取協定(‘WAP’)、手持裝置傳送協定(‘HDTP’)、對話啟動協定(‘SIP’)、即時傳輸協定(‘RTP’)等。
網路136還連接資料中心100中的其他網路元件。其他網路元件的範例包括匯流排、交換器(switch)、路由器、負載平衡器、超管理器和應用程式設計介面(API)。沿著網路136,交換器例如可以透過複數個輸入埠接收封包並且可以透過複數個輸出埠發送封包。資料中心100中的處理節點可以使用由交換器建立的各種連網路徑透過網路136相互通訊。網路136的另一範例是廣域網路(WAN)。
處理節點(或節點)是在硬體裝置或連接到網路的虛擬裝置上運行的可定址應用程式,並且能夠透過通訊通道發送、接收或轉傳資訊至或自其他處理節點。可被部署為硬體處理節點的電子裝置的範例包括所有種類的電腦、工作站、膝上型電腦、手持電腦和智慧型手機。處理節點可以在基於雲端的伺服器系統中實現。可以使用單一物理裝置來實現多個配置為處理節點的虛擬裝置。
資料中心100包括可重配置資料流資源池。可重配置資料流資源池可以有多種計算規模和階層。可重配置資料流資源池可以是可操作地耦接到複數個可重配置處理器的單一處理節點,其又受到不同匯流排和記憶體資源支持。處理節點可以具有例如透過如快捷週邊組件互連(PCIe)介面的本地匯流排或另一互連組構與可重配置處理器交換資料的主機處理器(例如,CPU)。主機處理器可以具有運行時處理器(或運行時邏輯),其為請求從主機處理器執行的應用程式管理資源分配、記憶體映射和配置檔的執行。PCIe係描述於可由奧勒岡州比佛頓之PCI-SIG Administration取得的正式PCI Express規格書中,所有這些在其於本專利申請案之申請日為可取得的情況下透過引用併入本文。如本文中所使用的,術語“PCIe匯流排”和“PCIe組構(fabric)”是指滿足PCI Express規格書版本1.0或其之任何後續修訂版要求的匯流排或組構。PCIe亦描述於例如Jackson和Budruk之PCI Express Technology 3.0中,其可由德克薩斯州雪松公園(Cedar Park,TX)的MindShare公司取得,亦透過引用併入本文。術語“PCIe匯流排”和“PCIe組構”在本文中可互換使用。
可重配置資料流資源池可以是透過網路136連接的處理節點的框架(rack)(或叢集)。框架中的每個節點可以運行個別複數個可重配置處理器並且包括配置有個別運行時處理器的個別主機處理器。分散在節點間的運行時處理器彼此通訊以提供對連接到它們自己的處理節點的可重配置處理器的統一存取,以及對連接到資料中心100中的每個其他處理節點的可重配置處理器的統一存取。
可重配置資料流資源池可以是包含透過網路136連接的複數個框架的群(pod)。可重配置資料流資源池可以是包含透過網路136連接的複數群的超級群(superpod)。可重配置資料流資源池可以是包含透過網路136連接的複數個超級群的區(zone)。可重配置資料流資源池可以是包含透過網路136連接的複數個區的資料中心100。
可重配置資料流資源池可以包括匯流排(或傳輸)資源。匯流排資源的範例包括PCIe通道、直接記憶體存取(DMA)通道和雙倍資料速率(DDR)通道。可重配置資料流資源池可以包括記憶體(或儲存)資源。記憶體資源的範例包括主記憶體(例如,晶片外/外部動態隨機存取記憶體(DRAM)、NAND快閃)、本地輔助儲存器(例如,本地磁碟(例如,HDD、SSD))和遠端輔助儲存器(例如,分散式檔案系統、網站伺服器)。記憶體資源的其他範例包括鎖存器、暫存器、觸發器(flop)、旁路網路和快取(例如,由RAM/DRAM/SRAM明確定址的那些)。可重配置資料流資源池可動態擴展以滿足請求執行的應用程式的性能要求。應用程式透過一或多個網路(例如,網際網路)存取可重配置資料流資源池。
現在討論回到資料中心100的第一和第二處理節點。第一處理節點包括第一主機處理器102a。第一主機處理器102a的範例包括x86和x64處理器。第一主機處理器102a與主機記憶體134a(例如,RAM)介接。第一主機處理器102a具有編譯應用程式的編譯器112a和在複數個可重配置處理器142a上執行經編譯的應用程式的運行時邏輯122a。運行時邏輯122a被配置成提供對可重配置資料流資源池的按需求存取,其可以以最少的管理工作量或服務提供者互動來快速地配置和發布。
可重配置處理器142a的範例包括現場可編程閘陣列(FPGA)、粗粒度可重配置架構(CGRA)、特殊應用積體電路(ASIC)及特殊應用指令集處理器(ASIP)。可重配置處理器142a與可重配置處理器記憶體162a(例如,DRAM)介接。可重配置處理器142a之各者包括可編程互連結構中的可配置單元陣列(例如,計算單元和記憶體單元)。可重配置處理器中的可配置單元陣列可被劃分成複數個可配置單元的子陣列(或磚片)。關於可重配置處理器之架構的一種實現的額外細節稍後將在本申請中討論。在其他實現中,資料中心100中的處理節點包括替代/除了可重配置處理器142a之外的處理器。此類處理器的範例包括圖形處理單元(GPU)和數位信號處理器(DSP)。
網路介面控制器132a(例如,NIC、 SmartNIC)將第一主機處理器102a和可重配置處理器142a連接到網路136。匯流排交換器124a使用本地匯流排125a、126a和127a來可操作地耦接到第一主機處理器102a、可重配置處理器142a和網路介面控制器132a。本地匯流排125a、126a和127a的範例包括快捷週邊組件互連(PCIe)、加速器專屬快取互連一致性(CCIX)、Compute Express Link(CXL)和開放協調加速器處理器介面(OpenCAPI)。
第二處理節點包括第二主機處理器102n。第二主機處理器102n的範例包括x86和x64處理器。第二主機處理器102n與主機記憶體134n(例如,RAM)介接。第二主機處理器102n具有編譯應用程式的編譯器112n和在複數個可重配置處理器142n上執行經編譯的應用程式的運行時邏輯122n。運行時邏輯122n被配置成提供對可重配置資料流資源池的按需求存取,其可以以最少的管理工作量或服務提供者互動來快速地配置和發布。
可重配置處理器142n的範例包括現場可編程閘陣列(FPGA)、粗粒度可重配置架構(CGRA)、特殊應用積體電路(ASIC)及特殊應用指令集處理器(ASIP)。可重配置處理器142n與可重配置處理器記憶體162n(例如,DRAM)介接。可重配置處理器142n之各者包括可編程互連結構中的可配置單元陣列(例如,計算單元和記憶體單元)。可重配置處理器中的可配置單元陣列可被劃分成複數個可配置單元的子陣列(或磚片)。關於可重配置處理器之架構的一種實現的額外細節稍後將在本申請中討論。在其他實現中,資料中心100中的處理節點包括替代/除了可重配置處理器142n之外的處理器。此類處理器的範例包括圖形處理單元(GPU)和數位信號處理器(DSP)。
網路介面控制器132n(例如,NIC、 SmartNIC)將第二主機處理器102n和可重配置處理器142n連接到網路136。匯流排交換器124n使用本地匯流排125n、126n和127n來可操作地耦接到第二主機處理器102n、可重配置處理器142n和網路介面控制器132n。本地匯流排125n、126n和127n的範例包括快捷週邊組件互連(PCIe)、加速器專屬快取互連一致性(CCIX)、Compute Express Link(CXL)和開放協調加速器處理器介面(OpenCAPI)。
已經描述了圖1的元素和互連,現在討論轉向所公開之技術使用的緩衝器,用於節點內和節點間處理的延遲最佳化。 緩衝器
圖2A示出位於主機記憶體134a中的主機發送器緩衝器212a和主機接收器緩衝器202a。主機發送器緩衝器212a是可重配置處理器至主機處理器緩衝器,其被配置成從可重配置處理器142a接收資料,並將資料提供給第一主機處理器102a。主機接收器緩衝器202a是主機處理器至可重配置處理器緩衝器,其被配置成從第一主機處理器102a接收資料並且將資料提供給可重配置處理器142a。資料的範例包括純量資料(例如,控制位元)和向量資料(例如,向量、張量、參數、命令)。主機記憶體134a,因此還有主機發送器緩衝器212a和主機接收器緩衝器202a,可被資料中心100中的每個主機處理器(例如,第一和第二主機處理器102a、102n)、每個可重配置處理器(例如,可重配置處理器142a、142n)和每個網路介面控制器(例如,網路介面控制器132a、132n)存取。主機發送器緩衝器212a和主機接收器緩衝器202a可以是先進先出(FIFO)緩衝器、先進後出(FILO)緩衝器、後進先出(LIFO)緩衝器、後進後出(LILO)緩衝器或循環緩衝器。主機發送器緩衝器212a和主機接收器緩衝器202a的大小可以是8位元組、16位元組、32位元組、64位元組、128位元組、256位元組等,或是任何適合在主機處理器、網路介面控制器和可重配置處理器之間傳輸資料的方便的大小。
圖2B示出位於主機記憶體134n中的主機發送器緩衝器212n和主機接收器緩衝器202n。主機發送器緩衝器212n是可重配置處理器至主機處理器緩衝器,其被配置成從可重配置處理器142n接收資料並且將資料提供給第二主機處理器102n。主機接收器緩衝器202n是主機處理器至可重配置處理器緩衝器,其被配置成從第二主機處理器102n接收資料並且將資料提供給可重配置處理器142n。資料的範例包括純量資料(例如,控制位元)和向量資料(例如,向量、張量、參數、命令)。主機記憶體134n,因此還有主機發送器緩衝器212n和主機接收器緩衝器202n,可被資料中心100中的每個主機處理器(例如,第一和第二主機處理器102a、102n)、每個可重配置處理器(例如,可重配置處理器142a、142n)和每個網路介面控制器(例如,網路介面控制器132a、132n)存取。主機發送器緩衝器212n和主機接收器緩衝器202n可以是先進先出(FIFO)緩衝器、先進後出(FILO)緩衝器、後進先出(LIFO)緩衝器、後進後出(LILO)緩衝器或循環緩衝器。主機發送器緩衝器212n和主機接收器緩衝器202n的大小可以是8位元組、16位元組、32位元組、64位元組、128位元組、256位元組等,或是任何適合在主機處理器、網路介面控制器和可重配置處理器之間傳輸資料的方便的大小。
圖3A示出位於網路介面控制器132a的介面發送器緩衝器312a和介面接收器緩衝器302a。介面發送器緩衝器312a是可重配置處理器至主機處理器緩衝器,其被配置成從可重配置處理器142a接收資料並且將資料提供給第一主機處理器102a。介面接收器緩衝器302a是主機處理器至可重配置處理器緩衝器,其被配置成從第一主機處理器102a接收資料並且將資料提供給可重配置處理器142a。資料的範例包括純量資料(例如,控制位元)和向量資料(例如,向量、張量、參數、命令)。網路介面控制器132a,因此還有介面發送器緩衝器312a和介面接收器緩衝器302a,可被資料中心100中的每個主機處理器(例如,第一和第二主機處理器102a、102n)、每個可重配置處理器(例如,可重配置處理器142a、142n)和每個網路介面控制器(例如,網路介面控制器132a、132n)存取。介面發送器緩衝器312a和介面接收器緩衝器302a可以是先進先出(FIFO)緩衝器、先進後出(FILO)緩衝器、後進先出(LIFO)緩衝器、後進後出(LILO)緩衝器或循環緩衝器。介面發送器緩衝器312a和介面接收器緩衝器302a的大小可以是8位元組、16位元組、32位元組、64位元組、128位元組、256位元組等,或是任何適合在主機處理器、網路介面控制器和可重配置處理器之間傳輸資料的方便的大小。
圖3B示出位於網路介面控制器132n的介面發送器緩衝器312n和介面接收器緩衝器302n。介面發送器緩衝器312n是可重配置處理器至主機處理器緩衝器,其被配置成從可重配置處理器142n接收資料並且將資料提供給第二主機處理器102n。介面接收器緩衝器302n是主機處理器至可重配置處理器緩衝器,其被配置成從第二主機處理器102n接收資料並且將資料提供給可重配置處理器142n。資料的範例包括純量資料(例如,控制位元)和向量資料(例如,向量、張量、參數、命令)。網路介面控制器132n,因此還有介面發送器緩衝器312n和介面接收器緩衝器302n,可被資料中心100中的每個主機處理器(例如,第一和第二主機處理器102a、102n)、每個可重配置處理器(例如,可重配置處理器142a、142n)和每個網路介面控制器(例如,網路介面控制器132a、132n)存取。介面發送器緩衝器312n和介面接收器緩衝器302n可以是先進先出(FIFO)緩衝器、先進後出(FILO)緩衝器、後進先出(LIFO)緩衝器、後進後出(LILO)緩衝器或循環緩衝器。介面發送器緩衝器312n和介面接收器緩衝器302n的大小可以是8位元組、16位元組、32位元組、64位元組、128位元組、256位元組等,或是任何適合在主機處理器、網路介面控制器和可重配置處理器之間傳輸資料的方便的大小。
圖4A示出位於可重配置處理器142a之可重配置處理器記憶體162a中的可重配置處理器(RP)發送器緩衝器412a和可重配置處理器(RP)接收器緩衝器402a。可重配置處理器發送器緩衝器412a是可重配置處理器至主機處理器緩衝器,其被配置成從可重配置處理器142a接收資料並且將資料提供給第一主機處理器102a。可重配置處理器接收器緩衝器402a是主機處理器至可重配置處理器緩衝器,其被配置成從第一主機處理器102a接收資料並且將資料提供給可重配置處理器142a。資料的範例包括純量資料(例如,控制位元)和向量資料(例如,向量、張量、參數、命令)。可重配置處理器記憶體162a,因此還有可重配置處理器發送器緩衝器412a和可重配置處理器接收器緩衝器402a,可被資料中心100中的每個主機處理器(例如,第一和第二主機處理器102a、102n)、每個可重配置處理器(例如,可重配置處理器142a、142n)和每個網路介面控制器(例如,網路介面控制器132a、132n)存取。可重配置處理器發送器緩衝器412a和可重配置處理器接收器緩衝器402a可以是先進先出(FIFO)緩衝器、先進後出(FILO)緩衝器、後進先出(LIFO)緩衝器、後進後出(LILO)緩衝器或循環緩衝器。可重配置處理器發送器緩衝器412a和可重配置處理器接收器緩衝器402a的大小可以是8位元組、16位元組、32位元組、64位元組、128位元組、256位元組等,或是任何適合在主機處理器、網路介面控制器和可重配置處理器之間傳輸資料的方便的大小。
圖4B示出位於可重配置處理器142n之可重配置處理器記憶體162n中的可重配置處理器(RP)發送器緩衝器412n和可重配置處理器(RP)接收器緩衝器402n。可重配置處理器發送器緩衝器412n是可重配置處理器至主機處理器緩衝器,其被配置成從可重配置處理器142n接收資料並且將資料提供給第二主機處理器102n。可重配置處理器接收器緩衝器402n是主機處理器至可重配置處理器緩衝器,其被配置成從第二主機處理器102n接收資料並且將資料提供給可重配置處理器142n。資料的範例包括純量資料(例如,控制位元)和向量資料(例如,向量、張量、參數、命令)。可重配置處理器記憶體162n,因此還有可重配置處理器發送器緩衝器412n和可重配置處理器接收器緩衝器402n,可被資料中心100中的每個主機處理器(例如,第一和第二主機處理器102a、102n)、每個可重配置處理器(例如,可重配置處理器142a、142n)和每個網路介面控制器(例如,網路介面控制器132a、132n)存取。可重配置處理器發送器緩衝器412n和可重配置處理器接收器緩衝器402n可以是先進先出(FIFO)緩衝器、先進後出(FILO)緩衝器、後進先出(LIFO)緩衝器、後進後出(LILO)緩衝器或循環緩衝器。可重配置處理器發送器緩衝器412n和可重配置處理器接收器緩衝器402n的大小可以是8位元組、16位元組、32位元組、64位元組、128位元組、256位元組等,或是任何適合在主機處理器、網路介面控制器和可重配置處理器之間傳輸資料的方便的大小。
緩衝器可以由映射到記憶體中的記憶體位址(其可能是連續的或不連續的)的物理範圍的虛擬位址空間定義。在記憶體中分別使用讀指標和寫指標指示的位置讀取和寫入虛擬緩衝器。指標保存在記憶體中(其可能與保存虛擬緩衝器的記憶體相同或不同)。
已經描述了緩衝器,現在討論轉向由所公開之技術揭露的除錯邏輯和測試邏輯。 除錯邏輯和測試邏輯
圖5A是運行時邏輯122a的啟發式(heuristics)圖。運行時邏輯122a包括除錯邏輯502a和測試邏輯512a。運行時邏輯122a被配置成為在一或多個可重配置處理器142a上的應用程式加載和執行一或多個配置檔。可重配置處理器142a被配置成處理配置檔並產生輸出,並且使用至少一個可重配置處理器至主機處理器緩衝器(例如,主機發送器緩衝器212a、主機發送器緩衝器212n、介面發送器緩衝器312a、介面發送器緩衝器312n、可重配置處理器發送器緩衝器412a、可重配置處理器發送器緩衝器412n)將輸出發送到第一主機處理器102a。
在第一主機處理器102a上運行的除錯邏輯502a被配置成檢測錯誤(例如,在執行配置檔時)。在一種實現中,除錯邏輯502a還被配置成基於輸出與預期輸出的比較,向第一主機處理器102a上的除錯控制台報告錯誤。在另一實現中,除錯邏輯502a還被配置成基於輸出與預期輸出的比較,向第一主機處理器102a上的除錯輸出檔報告錯誤。
在一些實現中,在資料中心100中的特定主機處理器或可重配置處理器上運行的除錯邏輯可以向資料中心100中的任何其他主機處理器或可重配置處理器報告錯誤。例如,在第一主機處理器102a上運行的除錯邏輯502a可以基於輸出與預期輸出的比較,向第二主機處理器102n上的除錯控制台報告錯誤。在另一範例中,除錯邏輯502a可以基於輸出與預期輸出的比較,向第二主機處理器102n上的除錯輸出檔報告錯誤。
運行時邏輯122a還被配置成在可重配置處理器142a上執行用於測試應用程式的一或多個測試配置檔。可重配置處理器142a還被配置成處理測試配置檔並產生測試輸出,並且使用至少一個可重配置處理器至主機處理器緩衝器(例如,主機發送器緩衝器212a、主機發送器緩衝器212n、介面發送器緩衝器312a、介面發送器緩衝器312n、可重配置處理器發送器緩衝器412a、可重配置處理器發送器緩衝器412n)將測試輸出發送到第一主機處理器102a。在第一主機處理器102a上運行的測試邏輯512a被配置成基於測試輸出確定測試統計,並且將測試統計報告給第一主機處理器102a上的測試輸出檔。
在一些實現中,在資料中心100中的特定主機處理器或可重配置處理器上運行的測試邏輯可以向資料中心100中的任何其他主機處理器或可重配置處理器上的測試輸出檔報告測試統計。例如,在第一主機處理器102a上運行的測試邏輯512a可以向第二主機處理器102n上的測試輸出檔報告測試統計。
圖5B是運行時邏輯122n的啟發式圖。運行時邏輯122n包括除錯邏輯502n和測試邏輯512n。運行時邏輯122n被配置成為一或多個可重配置處理器142n上的應用程式加載和執行一或多個配置檔。可重配置處理器142n被配置成處理配置檔並產生輸出,並且使用至少一個可重配置處理器至主機處理器緩衝器(例如,主機發送器緩衝器212a、主機發送器緩衝器212n、介面發送器緩衝器312a、介面發送器緩衝器312n、可重配置處理器發送器緩衝器412a、可重配置處理器發送器緩衝器412n)將輸出發送到第二主機處理器102n。
在第二主機處理器102n上運行的除錯邏輯502n被配置成檢測錯誤(例如,在執行配置檔時)。在一種實現中,除錯邏輯502n還被配置成基於輸出與預期輸出的比較,向第二主機處理器102n上的除錯控制台報告錯誤。在另一實現中,除錯邏輯502n還被配置成基於輸出與預期輸出的比較,向第二主機處理器102n上的除錯輸出檔報告錯誤。
在一些實現中,在資料中心100中的特定主機處理器或可重配置處理器上運行的除錯邏輯可以向資料中心100中的任何其他主機處理器或可重配置處理器報告錯誤。例如,在第二主機處理器102n上運行的除錯邏輯502n可以基於輸出與預期輸出的比較,向第一主機處理器102a上的除錯控制台報告錯誤。在另一範例中,除錯邏輯502n可以基於輸出與預期輸出的比較,向第一主機處理器102a上的除錯輸出檔報告錯誤。
在一些實現中,在資料中心100中的特定主機處理器或可重配置處理器上運行的測試邏輯可以向資料中心100中的任何主機處理器或可重配置處理器上的測試輸出檔報告測試統計。例如,在第二主機處理器102n上運行的測試邏輯512n可以向第一主機處理器102a上的測試輸出檔報告測試統計。
圖6是訊息序列圖600,其說明除錯邏輯502a的一種實現,該除錯邏輯502a檢測在一或多個可重配置處理器(RP)142a上執行配置檔時的錯誤。在操作1,編譯器112a編譯應用程式602以產生包括用於應用程式602的一或多個配置檔的圖。在操作2,編譯器112a將圖發送給運行時邏輯122a用於執行。在操作3,運行時邏輯122a在一或多個可重配置處理器142a上加載配置檔。一旦已加載配置檔,運行時邏輯122a透過寫入為此目的存在的特定CSR(控制及狀態處理器)向可重配置處理器發送‘執行’(或開始)命令來觸發位元檔的執行。在操作4,可重配置處理器142a處理配置檔並產生輸出(例如,向量、張量)。在操作5,可重配置處理器142a將輸出發送給發送器緩衝器632(或可重配置處理器至主機處理器緩衝器)。發送器緩衝器632的範例包括主機發送器緩衝器212a、主機發送器緩衝器212n、介面發送器緩衝器312a、介面發送器緩衝器312n、可重配置處理器發送器緩衝器412a及可重配置處理器發送器緩衝器412n。在操作6,發送器緩衝器632將輸出提供給除錯邏輯502a。在操作7,除錯邏輯502a基於輸出與預期輸出的比較,檢測執行配置檔時的錯誤。在操作8,除錯邏輯502a向第一主機處理器102a上的除錯控制台或除錯輸出檔報告錯誤。與圖6中所示的操作相比,其他實現可以以不同的順序及/或使用不同、更少或額外的操作來執行操作。在一些實現中可以組合多個操作。
本領域之技術人士將理解,在圖6中,操作3和6包括使用諸如傳輸控制協定(TCP)的協定,透過本地匯流排(例如,PCIe匯流排),在相同處理節點1上的可重配置處理器(例如,RP 142a)和主機處理器(例如,主機102a)之間串流傳輸網路封包。
圖7是訊息序列圖700,其說明除錯邏輯502a的一種實現,該除錯邏輯502a檢測在一或多個可重配置處理器(RP)142n上執行配置檔時的錯誤。在操作1,編譯器112a編譯應用程式702以產生包括用於應用程式702的一或多個配置檔的圖。在操作2,編譯器112a將圖發送給運行時邏輯122a用於執行。在操作3,運行時邏輯122a在一或多個可重配置處理器142n上加載配置檔。一旦已加載配置檔,運行時邏輯122a透過寫入為此目的存在的特定CSR向可重配置處理器發送‘執行’(或開始)命令來觸發位元檔的執行。在操作4,可重配置處理器142n處理配置檔並產生輸出(例如,向量、張量)。在操作5,可重配置處理器142n將輸出發送給發送器緩衝器732(或可重配置處理器至主機處理器緩衝器)。發送器緩衝器732的範例包括主機發送器緩衝器212a、主機發送器緩衝器212n、介面發送器緩衝器312a、介面發送器緩衝器312n、可重配置處理器發送器緩衝器412a及可重配置處理器發送器緩衝器412n。在操作6,發送器緩衝器732將輸出提供給除錯邏輯502a。在操作7,除錯邏輯502a基於輸出與預期輸出的比較,檢測執行配置檔時的錯誤。在操作8,除錯邏輯502a向第一主機處理器102a上的除錯控制台或除錯輸出檔報告錯誤。與圖7中所示的操作相比,其他實現可以以不同的順序及/或使用不同、更少或額外的操作來執行操作。在一些實現中可以組合多個操作。
本領域之技術人士將理解,在圖7中,操作3和6包括使用諸如基於融合乙太網的RDMA(RoCE)、TCP、用戶資料報協定(UDP)和快速UDP網際網路連接(QUIC)的協定透過網路組構136(例如,乙太網路、InfiniBand(IB))在第二處理節點上的一或多個可重配置處理器(例如,RP 142n)和在第一處理節點上的主機處理器(例如,主機102a)之間串流傳輸網路封包。
圖8是訊息序列圖800,其說明一或多個可重配置處理器(RP)142a向第一主機處理器102a發出遠端程序呼叫的一種實現。在操作1,編譯器112a編譯應用程式802以產生包括用於應用程802的一或多個配置檔的圖。在操作2,編譯器112a將圖發送給運行時邏輯122a用於執行。在操作3,運行時邏輯122a在一或多個可重配置處理器142a上加載配置檔。一旦已加載配置檔,運行時邏輯122a透過寫入為此目的存在的特定CSR向可重配置處理器發送‘執行’(或開始)命令來觸發位元檔的執行。在操作4,可重配置處理器142a處理配置檔並產生輸出(例如,向量、張量)。在操作5,可重配置處理器142a使用發送器緩衝器832(或可重配置處理器至主機處理器緩衝器)向第一主機處理器102a發出一或多個遠端程序呼叫。發送器緩衝器832的範例包括主機發送器緩衝器212a、主機發送器緩衝器212n、介面發送器緩衝器312a、介面發送器緩衝器312n、可重配置處理器發送器緩衝器412a及可重配置處理器發送器緩衝器412n。在一種實現中,可重配置處理器142a使用遠端程序呼叫通知第一主機處理器102a錯誤報告。在操作6,可重配置處理器142a使用至少一個發送器緩衝器832來發送一或多個參數值給第一主機處理器102a用於執行遠端程序呼叫。在操作7,發送器緩衝器832將遠端程序呼叫和參數值提供給運行時邏輯122a。在操作8,對遠端程序呼叫的一或多個響應經由緩衝器(例如,第一主機處理器102a的發送器緩衝器和可重配置處理器142a的接收器緩衝器)被發送給可重配置處理器142n。與圖8中所示的操作相比,其他實現可以以不同的順序及/或使用不同、更少或額外的操作來執行操作。在一些實現中可以組合多個操作。
本領域之技術人士將理解,在圖8中,操作3和7包括使用諸如傳輸控制協定(TCP)的協定,透過本地匯流排,在相同處理節點1上的可重配置處理器(例如,RP 142a)和主機處理器(例如,主機102a)之間串流傳輸網路封包。
圖9是訊息序列圖900,其說明一或多個可重配置處理器(RP)142n向第一主機處理器102a發出遠端程序呼叫的一種實現。在操作1,編譯器112a編譯應用程式902以產生包括用於應用程式902的一或多個配置檔的圖。在操作2,編譯器112a將圖發送給運行時邏輯122a用於執行。在操作3,運行時邏輯122a在一或多個可重配置處理器142n上加載配置檔。一旦已加載配置檔,運行時邏輯122a透過寫入為此目的存在的特定CSR向可重配置處理器發送‘執行’(或開始)命令來觸發位元檔的執行。在操作4,可重配置處理器142n處理配置檔並產生輸出(例如,向量、張量)。在操作5,可重配置處理器142n使用發送器緩衝器932(或可重配置處理器至主機處理器緩衝器)向第一主機處理器102a發出一或多個遠端程序呼叫。發送器緩衝器932的範例包括主機發送器緩衝器212a、主機發送器緩衝器212n、介面發送器緩衝器312a、介面發送器緩衝器312n、可重配置處理器發送器緩衝器412a及可重配置處理器發送器緩衝器412n。在一種實現中,可重配置處理器142n使用遠端程序呼叫通知第一主機處理器102a錯誤報告。在操作6,可重配置處理器142n使用至少一個發送器緩衝器932將一或多個參數值發送給第一主機處理器102a用於執行遠端程序呼叫。在操作7,發送器緩衝器932將遠端程序呼叫和參數值提供給運行時邏輯122a。在操作8,對遠端程序呼叫的一或多個響應經由緩衝器(例如,第一主機處理器102a的發送器緩衝器和可重配置處理器142n的接收器緩衝器)被發送給可重配置處理器142n。與圖9中所示的操作相比,其他實現可以以不同的順序及/或使用不同、更少或額外的操作來執行操作。在一些實現中可以組合多個操作。
本領域之技術人士將理解,在圖9中,操作3和7包括使用諸如基於融合乙太網的RDMA(RoCE)、TCP、用戶資料報協定(UDP)和快速UDP網際網路連接(QUIC)的協定,透過網路組構136(例如,乙太網路、InfiniBand(IB) ),在第二處理節點上的一或多個可重配置處理器(例如,RP 142n)和第一處理節點上的主機處理器(例如,主機102a)之間串流傳輸網路封包。
圖10是訊息序列圖1000,其說明測試邏輯512a的一種實現,該測試邏輯512a報告在一或多個可重配置處理器(RP)142a上執行測試配置檔的測試統計。在操作1,編譯器112a編譯測試應用程式1002以產生包括用於測試應用程式1002的一或多個測試配置檔的測試圖。在操作2,編譯器112a將圖發送給運行時邏輯122a用於執行。在操作3,運行時邏輯122a在一或多個可重配置處理器142a上加載測試配置檔。一旦已加載配置檔,運行時邏輯122a透過寫入為此目的存在的特定CSR向可重配置處理器發送‘執行’(或開始)命令來觸發位元檔的執行。在操作4,可重配置處理器142a處理測試配置檔並產生測試輸出(例如,向量、張量)。在操作5,可重配置處理器142a將測試輸出發送到發送器緩衝器1032(或可重配置處理器至主機處理器緩衝器)。發送器緩衝器1032的範例包括主機發送器緩衝器212a、主機發送器緩衝器212n、介面發送器緩衝器312a、介面發送器緩衝器312n、可重配置處理器發送器緩衝器412a及可重配置處理器發送器緩衝器412n。在操作6,發送器緩衝器1032將測試輸出提供給測試邏輯512a。在操作7,測試邏輯512a基於測試輸出確定測試統計。在操作8,測試邏輯512a將測試統計報告給第一主機處理器102a上的測試輸出檔。與圖10中所示的操作相比,其他實現可以以不同的順序及/或使用不同、更少或額外的操作來執行操作。在一些實現中可以組合多個操作。
本領域之技術人士將理解,在圖10中,操作3和6包括使用諸如傳輸控制協定(TCP)的協定,透過本地匯流排(例如,PCIe匯流排),在相同處理節點1上的可重配置處理器(例如,RP 142a)和主機處理器(例如,主機102a)之間串流傳輸網路封包。
圖11是訊息序列圖1100,其說明測試邏輯512a的一種實現,該測試邏輯512a報告在一或多個可重配置處理器(RP)142n上執行測試配置檔的測試統計。在操作1,編譯器112a編譯測試應用程式1102以產生包括用於測試應用程式1102的一或多個測試配置檔的測試圖。在操作2,編譯器112a將圖發送給運行時邏輯122a用於執行。在操作3,運行時邏輯122a在一或多個可重配置處理器142n上加載測試配置檔。一旦已加載配置檔,運行時邏輯122a透過寫入為此目的存在的特定CSR向可重配置處理器發送‘執行’(或開始)命令來觸發位元檔的執行。在操作4,可重配置處理器142n處理測試配置檔並產生測試輸出(例如,向量、張量)。在操作5,可重配置處理器142n將測試輸出發送到發送器緩衝器1132(或可重配置處理器至主機處理器緩衝器)。發送器緩衝器1132的範例包括主機發送器緩衝器212a、主機發送器緩衝器212n、介面發送器緩衝器312a、介面發送器緩衝器312n、可重配置處理器發送器緩衝器412a及可重配置處理器發送器緩衝器412n。在操作6,發送器緩衝器1132將測試輸出提供給測試邏輯512a。在操作7,測試邏輯512a基於測試輸出確定測試統計。在操作8,測試邏輯512a將測試統計報告給第一主機處理器102a上的測試輸出檔。與圖11中所示的操作相比,其他實現可以以不同的順序及/或使用不同、更少或額外的操作來執行操作。在一些實現中可以組合多個操作。
本領域之技術人士將理解,在圖11中,操作3和6包括使用諸如基於融合乙太網的RDMA(RoCE)、TCP、用戶資料報協定(UDP)和快速UDP網際網路連接(QUIC)的協定,透過網路組構136(例如,乙太網路、InfiniBand(IB)),在第二處理節點上的一或多個可重配置處理器(例如,RP 142n)和第一處理節點上的主機處理器(例如,主機102a)之間串流傳輸網路封包。
已經描述了除錯邏輯和測試邏輯,現在討論轉向由所公開之技術揭露的可重配置處理器到主機處理器的工作負荷分擔(workload sharing)。 可重配置處理器到主機處理器的工作負荷分擔
圖12是訊息序列圖1200,其說明在一或多個可重配置處理器(RP)142a上執行配置檔中的第一組函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))以及在第一主機處理器102a上執行配置檔中的第二組函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))的一種實現。在操作1,編譯器112a接收應用程式1202用於編譯。在操作2,編譯器112a編譯應用程式1202以產生一或多個配置檔1212。配置檔1212包括複數個函數。複數個函數包括第一組函數1214和第二組函數1224。複數個函數中的函數範例包括諸如線性整流函數(Rectified Linear Unit,ReLU)及其變化(例如,leaky ReLU)、雙曲正切、sigmoid和softmax的非線性,逐元素加法,矩陣乘法(例如,通用矩陣乘法(General Matrix Multiply,GeMM)),層正規化(例如,批次正規化),諸如交叉熵的損耗函數以及諸如轉置的張量形狀修改器。在操作3,編譯器112a將配置檔1212發送給運行時邏輯122a用於執行。在操作4,運行時邏輯122a將第一組函數1214及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))以及第二組函數1224及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))加載到一或多個可重配置處理器142a。在操作5,可重配置處理器142a處理第一組函數1214及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))並產生第一組輸出(例如,向量、張量)。可重配置處理器142a使用一或多個可重配置處理器至主機處理器緩衝器,將第二組函數1224中的函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))傳輸到第一主機處理器102a。這在本文中稱為“可重配置處理器到主機處理器的工作負荷分擔”。在一種實現中,使用可重配置處理器至主機處理器緩衝器,將對其執行第二組函數1224中的函數的資料傳輸到第一主機處理器102a。在一些實現中,可重配置處理器至主機處理器緩衝器中的個別緩衝器被用來將第二組函數1224中的個別函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))傳輸到第一主機處理器102a。工作負荷分擔流的一個範例包括使用一或多個可重配置處理器發送器緩衝器412a和一或多個主機接收器緩衝器202a。在操作6,可重配置處理器142a將第二組函數1224中的函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))傳輸到可重配置處理器發送器緩衝器412a。在操作7,可重配置處理器發送器緩衝器412a將第二組函數1224中的函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))傳輸到主機接收器緩衝器202a。在操作8,主機接收器緩衝器202a將第二組函數1224中的函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))傳輸到第一主機處理器102a。在操作9,第一主機處理器102a執行第二組函數1224中的函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))以產生第二組輸出(或結果1234)(例如,向量、張量)。第一主機處理器102a使用一或多個主機處理器至可重配置處理器緩衝器將結果1234傳輸到一或多個可重配置處理器142a。在一些實現中,主機處理器至可重配置處理器緩衝器中的個別緩衝器被用來將執行個別第二組函數1224中的函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))的個別結果傳輸到可重配置處理器142a。一個工作負荷分擔流包括使用一或多個主機發送器緩衝器212a和一或多個可重配置處理器接收器緩衝器402a。在操作10,第一主機處理器102a將結果1234傳輸到主機發送器緩衝器212a。在操作11,主機發送器緩衝器212a將結果1234傳輸到可重配置處理器接收器緩衝器402a。在操作12,可重配置處理器接收器緩衝器402a將結果1234傳輸到可重配置處理器142a。在一些實現中,第一組函數1214中的一或多個函數等待在第一主機處理器102a上執行第二組函數1224中的一或多個函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))的結果,以在可重配置處理器142a上將該結果與執行第一組函數1214中的一或多個函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))的結果相結合。在其他實現中,第一組函數1214和第二組函數1224分開且平行地操作。在一種實現中,第二組函數1224中的一或多個函數將結果菊鏈到第一組函數1214中的一或多個函數,反之亦然。在另一實現中,第二組函數1224中的一或多個函數在將結果返回可重配置處理器142a之前執行一定次數的迭代。與圖12中所示的操作相比,其他實現可以以不同的順序及/或使用不同、更少或額外的操作來執行操作。在一些實現中可以組合多個操作。
本領域之技術人士將理解,在圖12中,操作6、7、8、10、11和12包括使用諸如傳輸控制協定(TCP)的協定,透過本地匯流排(例如,PCIe匯流排),在相同處理節點1上的可重配置處理器(例如,RP 142a)和主機處理器(例如,主機102a)之間串流傳輸網路封包。
圖13是訊息序列圖1300,其說明在一或多個可重配置處理器(RP)142a上執行配置檔中的第一組函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))以及在第二主機處理器102n上執行配置檔中的第二組函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))的一種實現。在操作1,編譯器112a接收應用程式1302用於編譯。在操作2,編譯器112a編譯應用程式1302以產生一或多個配置檔1312。配置檔1312包括複數個函數。複數個函數包括第一組函數1314和第二組函數1324。複數個函數中的函數範例包括諸如線性整流函數(ReLU)及其變化(例如,leaky ReLU)、雙曲正切、sigmoid和softmax的非線性,逐元素加法,矩陣乘法(例如,通用矩陣乘法(GeMM)),層正規化(例如,批次正規化),諸如交叉熵的損耗函數以及諸如轉置的張量形狀修改器。在操作3,編譯器112a將配置檔1312發送給運行時邏輯122a用於執行。在操作4,運行時邏輯122a將第一組函數1314及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))以及第二組函數1324及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))加載到一或多個可重配置處理器142a。在操作5,可重配置處理器142a處理第一組函數1314及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))並產生第一組輸出(例如,向量、張量)。可重配置處理器142a使用一或多個可重配置處理器至主機處理器緩衝器,將第二組函數1324中的函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))傳輸到第二主機處理器102n。這在本文中稱為”可重配置處理器到主機處理器的工作負荷分擔”。在一種實現中,使用可重配置處理器至主機處理器緩衝器,將對其執行第二組函數1324中的函數的資料傳輸到第二主機處理器102n。在一些實現中,可重配置處理器至主機處理器緩衝器中的個別緩衝器被用來將第二組函數1324中的個別函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))傳輸到第二主機處理器102n。一個示例性工作負荷分擔流包括使用一或多個可重配置處理器發送器緩衝器412a和一或多個主機接收器緩衝器202n。在操作6,可重配置處理器142a將第二組函數1324中的函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))傳輸到可重配置處理器發送器緩衝器412a。在操作7,可重配置處理器發送器緩衝器412a將第二組函數1324中的函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))傳輸到主機接收器緩衝器202n。在操作8,主機接收器緩衝器202n將第二組函數1324中的函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))傳輸到第二主機處理器102n。在操作9,第二主機處理器102n執行第二組函數1324中的函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))以產生第二組輸出(或結果1334)(例如,向量、張量)。第二主機處理器102n使用一或多個主機處理器至可重配置處理器緩衝器將結果1334傳輸到一或多個可重配置處理器142a。在一些實現中,主機處理器至可重配置處理器緩衝器中的個別緩衝器被用來將執行第二組函數1324中的個別函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))的個別結果傳輸到可重配置處理器142a。一個工作負荷分擔流包括使用一或多個主機發送器緩衝器212n和一或多個可重配置處理器接收器緩衝器402a。在操作10,第二主機處理器102n將結果1334傳輸到主機發送器緩衝器212n。在操作11,主機發送器緩衝器212n將結果1334傳輸到可重配置處理器接收器緩衝器402a。在操作12,可重配置處理器接收器緩衝器402a將結果1334傳輸到可重配置處理器142a。在一些實現中,第一組函數1314中的一或多個函數等待在第二主機處理器102n上執行第二組函數1324中的一或多個函數的結果,以將該結果與在可重配置處理器142a上執行第一組函數1314中的一或多個函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))的結果相結合。在其他實現中,第一組函數1314和第二組函數1324分開且平行地操作。在一種實現中,第二組函數1324中的一或多個函數將結果菊鏈到第一組函數1314中的一或多個函數,反之亦然。在另一實現中,第二組函數1324中的一或多個函數在將結果返回可重配置處理器142a之前執行一定次數的迭代。與圖13中所示的操作相比,其他實現可以以不同的順序及/或使用不同、更少或額外的操作來執行操作。在一些實現中可以組合多個操作。
本領域之技術人士將理解,在圖13中,操作6、7、8、10、11和12包括使用諸如基於融合乙太網的RDMA(RoCE)、TCP、用戶資料報協定(UDP)和快速UDP網際網路連接(QUIC)的協定,透過網路組構136(例如,乙太網路、InfiniBand(IB)),在第一處理節點上的一或多個可重配置處理器(例如,RP 142a)和第二處理節點上的主機處理器(例如,主機102n)之間串流傳輸網路封包。
已經描述了可重配置處理器到主機處理器的工作負荷分擔,現在討論轉向向由所公開之技術揭露的可重配置處理器到可重配置處理器的工作負荷分擔。 可重配置處理器到可重配置處理器的工作負荷分擔
圖14A示出可重配置處理器142a中個別可重配置處理器使用的發送器和接收器緩衝器。可重配置處理器1(RP 1)接收器緩衝器1402a和可重配置處理器1(RP 1)發送器緩衝器1412a被可重配置處理器142a中的第一可重配置處理器用來從資料中心100中的另一主機處理器或可重配置處理器接收資料以及將資料發送到資料中心100中的另一主機處理器或可重配置處理器。可重配置處理器(RP n)接收器緩衝器1422a和可重配置處理器n(RP n)發送器緩衝器1432a被可重配置處理器142a中的第二可重配置處理器用來從資料中心100中的另一主機處理器或可重配置處理器接收資料以及將資料發送到資料中心100中的另一主機處理器或可重配置處理器。可重配置處理器1接收器緩衝器1402a、可重配置處理器1發送器緩衝器1412a、可重配置處理器n接收器緩衝器1422a和可重配置處理器n發送器緩衝器1432a位於可重配置處理器記憶體162a中。
圖14B示出可重配置處理器142n中個別可重配置處理器使用的發送器和接收器緩衝器。可重配置處理器1(RP 1)接收器緩衝器1402n和可重配置處理器1(RP 1)發送器緩衝器1412n被可重配置處理器142n中的第一可重配置處理器用來從資料中心100中的另一主機處理器或可重配置處理器接收資料以及將資料發送到資料中心100中的另一主機處理器或可重配置處理器。可重配置處理器n(RP n)接收器緩衝器1422n和可重配置處理器n(RP n)發送器緩衝器1432n被可重配置處理器142n中的第二可重配置處理器用來從資料中心100中的另一主機處理器或可重配置處理器接收資料以及將資料發送到資料中心100中的另一主機處理器或可重配置處理器。可重配置處理器1接收器緩衝器1402n、可重配置處理器1發送器緩衝器1412n、可重配置處理器n接收器緩衝器1422n和可重配置處理器n發送器緩衝器1432n位於可重配置處理器記憶體162n中。 節點間處理
圖15是訊息序列圖1500,其說明在可重配置處理器142a中的第一可重配置處理器上執行配置檔中的第一組函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))以及在可重配置處理器142a中的第二可重配置處理器上執行配置檔中的第二組函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))的一種實現。在圖15中,第一可重配置處理器被標識為“RP 1”以及第二可重配置處理器被標識為“RP N”。注意,第一可重配置處理器和第二可重配置處理器可操作地被耦接到同一處理節點,即,第一處理節點。這在本文中稱為“節點內處理”。在操作1,編譯器112a接收應用程式1502用於編譯。在操作2,編譯器112a編譯應用程式1502以產生一或多個配置檔1512。配置檔1512包括複數個函數。複數個函數包括第一組函數1514和第二組函數1524。複數個函數中的函數範例包括諸如線性整流函數(ReLU)及其變化(例如,leaky ReLU)、雙曲正切、sigmoid和softmax的非線性,逐元素加法,矩陣乘法(例如,通用矩陣乘法(GeMM)),層正規化(例如,批次正規化),諸如交叉熵的損耗函數以及諸如轉置的張量形狀修改器。在操作3,編譯器112a將配置檔1512發送給運行時邏輯122a用於執行。在操作4,運行時邏輯122a將第一組函數1514及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))和第二組函數1524及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))加載到第一可重配置處理器。在操作5,第一可重配置處理器處理第一組函數1514及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))並產生第一組輸出(例如,向量、張量)。第一可重配置處理器使用一或多個可重配置處理器到可重配置處理器緩衝器,將第二組函數1524中的函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))傳輸到第二可重配置處理器。這在本文中稱為“可重配置處理器的工作負荷分擔”。在一種實現中,使用可重配置處理器到可重配置處理器緩衝器,將對其執行第二組函數1524中的函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))的資料傳輸到第二可重配置處理器。在一些實現中,可重配置處理器到可重配置處理器緩衝器中的個別緩衝器被用來將第二組函數1524中的個別函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))傳輸到第二可重配置處理器。一個示例性工作負荷分擔流包括使用一或多個可重配置處理器1(RP 1)發送器緩衝器1412a和一或多個可重配置處理器N(RP N)接收器緩衝器1422a。在操作6,第一可重配置處理器將第二組函數1524中的函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))傳輸到可重配置處理器1發送器緩衝器1412a。在操作7,可重配置處理器1發送器緩衝器1412a將第二組函數1524中的函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))傳輸到可重配置處理器N接收器緩衝器1422a。在操作8,可重配置處理器N接收器緩衝器1422a將第二組函數1524中的函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))傳輸到第二可重配置處理器。在操作9,第二可重配置處理器執行第二組函數1524中的函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))以產生第二組輸出(或結果1534)(例如,向量、張量)。第二可重配置處理器使用一或多個可重配置處理器到可重配置處理器緩衝器將結果1534傳輸到第一可重配置處理器。在一些實現中,可重配置處理器到可重配置處理器緩衝器中的個別緩衝器被用來將執行第二組函數1524中的個別函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))的個別結果傳輸到第一可重配置處理器。一個工作負荷分擔流包括使用一或多個可重配置處理器N(RP N)發送器緩衝器1432a和一或多個可重配置處理器1(RP 1)接收器緩衝器1402a。在操作10,第二可重配置處理器將結果1534傳輸到可重配置處理器N發送器緩衝器1432a。在操作11,可重配置處理器N發送器緩衝器1432a將結果1534傳輸到可重配置處理器1接收器緩衝器1402a。在操作12,可重配置處理器1接收器緩衝器1402a將結果1534傳輸到第一可重配置處理器。在一些實現中,第一組函數1514中的一或多個函數等待在第二可重配置處理器上執行第二組函數1524中的一或多個函數的結果,以將該結果與在第一可重配置處理器上執行第一組函數1514中的一或多個函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))的結果相結合。在其他實現中,第一組函數1514和第二組函數1524分開且平行地操作。在一種實現中,第二組函數1524中的一或多個函數將結果菊鏈到第一組函數1514中的一或多個函數,反之亦然。在另一實現中,第二組函數1524中的一或多個函數在將結果返回第一可重配置處理器之前執行一定次數的迭代。與圖15中所示的操作相比,其他實現可以以不同的順序及/或使用不同、更少或額外的操作來執行操作。在一些實現中可以組合多個操作。
本領域之技術人士將理解,在圖15中,操作6、7、8、10、11和12包括使用諸如傳輸控制協定(TCP)的協定,透過本地匯流排(例如,PCIe匯流排),在相同處理節點1上的可重配置處理器之間串流傳輸網路封包。 節點間處理
圖16是訊息序列圖1600,其說明在可重配置處理器142a中的第一可重配置處理器上執行配置檔中的第一組函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))以及在可重配置處理器142n中的第一可重配置處理器上執行配置檔中的第二組函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))的一種實現。在圖16中,可重配置處理器142a中的第一可重配置處理器被標識為“RP 1”以及可重配置處理器142n中的第一可重配置處理器被標識為“RP 1'“。注意,可重配置處理器142a中的第一可重配置處理器和可重配置處理器142n中的第一可重配置處理器可操作地被耦接到不同處理節點,即,第一處理節點和第二處理節點。這在本文中稱為“節點間處理”。在操作1,編譯器112a接收應用程式1602用於編譯。在操作2,編譯器112a編譯應用程式1602以產生一或多個配置檔1612。配置檔1612包括複數個函數。複數個函數包括第一組函數1614和第二組函數1624。複數個函數中的函數範例包括諸如線性整流函數(ReLU)及其變化(例如,leaky ReLU)、雙曲正切、sigmoid和softmax的非線性,逐元素加法,矩陣乘法(例如,通用矩陣乘法(GeMM)),層正規化(例如,批次正規化),諸如交叉熵的損耗函數以及諸如轉置的張量形狀修改器。在操作3,編譯器112a將配置檔1612發送給運行時邏輯122a用於執行。在操作4,運行時邏輯122a將第一組函數1614及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))以及第二組函數1624及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))加載到可重配置處理器142a中的第一可重配置處理器。在操作5,可重配置處理器142a中的第一可重配置處理器處理第一組函數1614及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))並產生第一組輸出(例如,向量、張量)。可重配置處理器142a中的第一可重配置處理器使用一或多個可重配置處理器到可重配置處理器緩衝器,將第二組函數1624中的函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))傳輸到可重配置處理器142n中的第一可重配置處理器。這在本文中稱為“可重配置處理器到可重配置處理器的工作負荷分擔”。在一種實現中,使用可重配置處理器到可重配置處理器緩衝器,將對其執行第二組函數1624中的函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))的資料傳輸到可重配置處理器142n中的第一可重配置處理器。在一些實現中,可重配置處理器到可重配置處理器緩衝器中的個別緩衝器被用來將第二組函數1624中的個別函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))傳輸到可重配置處理器142n中的第一可重配置處理器。一個示例性工作負荷分擔流包括使用一或多個可重配置處理器1(RP 1)發送器緩衝器1412a和一或多個可重配置處理器1'(RP 1')接收器緩衝器1402n。在操作6,可重配置處理器142a中的第一可重配置處理器將第二組函數1624中的函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))傳輸到可重配置處理器1發送器緩衝器1412a。在操作7,可重配置處理器1發送器緩衝器1412a將第二組函數1624中的函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))傳輸到可重配置處理器1'接收器緩衝器1402n。在操作8,可重配置處理器1'接收器緩衝器1402n將第二組函數1624中的函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))傳輸到可重配置處理器142n中的第一可重配置處理器。在操作9,可重配置處理器142n中的第一可重配置處理器執行第二組函數1624中的函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))並產生第二組輸出(或結果1634)(例如,向量、張量)。可重配置處理器142n中的第一可重配置處理器使用一或多個可重配置處理器到可重配置處理器緩衝器,將結果1634傳輸到可重配置處理器142a中的第一可重配置處理器。在一些實現中,可重配置處理器到可重配置處理器緩衝器中的個別緩衝器被用來將執行第二組函數1624中的個別函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))的個別結果傳輸到可重配置處理器142a中的第一可重配置處理器。一個工作負荷分擔流包括使用一或多個可重配置處理器1'(RP 1')發送器緩衝器1412n和一或多個可重配置處理器1(RP 1)接收器緩衝器1402a。在操作10,可重配置處理器142n中的第一可重配置處理器將結果1634傳輸到可重配置處理器1'發送器緩衝器1412n。在操作11,可重配置處理器1'發送器緩衝器1412n將結果1634傳輸到可重配置處理器1接收器緩衝器1402a。在操作12,可重配置處理器1接收器緩衝器1402a將結果1634傳輸到可重配置處理器142a中的第一可重配置處理器。在一些實現中,第一組函數1614中的一或多個函數等待在可重配置處理器142n中的第一可重配置處理器上執行第二組函數1624中的一或多個函數的結果,以將該結果與在可重配置處理器142a中的第一可重配置處理器上執行第一組函數1614中的一或多個函數及/或其資料(例如,權重、係數、向量、張量(影像資料、音頻資料、自然語言處理(NLP資料))、控制資料(例如,控制符記))的結果相結合。在其他實現中,第一組函數1614和第二組函數1624分開且平行地操作。在一種實現中,第二組函數1624中的一或多個函數將結果菊鏈到第一組函數1614中的一或多個函數,反之亦然。在另一實現中,第二組函數1624中的一或多個函數在將結果返回可重配置處理器142a中的第一可重配置處理器之前執行一定次數的迭代。與圖16中所示的操作相比,其他實現可以以不同的順序及/或使用不同、更少或額外的操作來執行操作。在一些實現中可以組合多個操作。
本領域之技術人士將理解,在圖16中,操作6、7、8、10、11和12包括使用諸如基於融合乙太網的RDMA(RoCE)、TCP、用戶資料報協定(UDP)和快速UDP網際網路連接(QUIC)的協定,透過網路組構136(例如,乙太網路、InfiniBand(IB)),在不同處理節點1和n上的可重配置處理器之間串流傳輸網路封包。
已經描述了可重配置處理器到可重配置處理器的工作負荷分擔,現在討論轉向向由所公開之技術揭露的非同步張量串流。 非同步張量串流
圖17A是訊息序列圖1700A,其說明非同步張量串流的一種實現,其中在可重配置處理器正處理當前張量時緩衝下一個張量。資料中心100中的可重配置處理器(例如,一或多個可重配置處理器142a)被配置成使用一系列的資料單元1712執行一或多個配置檔。在一種實現中,資料單元系列1712包括張量1到N的序列。第一複數個緩衝器1704被配置成從源記憶體1702(例如,主機記憶體134a、主機記憶體134n)接收資料單元系列1712中的資料單元,並將資料單元串流傳輸到可重配置處理器用於處理。第一複數個緩衝器1704中的緩衝器的範例包括先進先出(FIFO)緩衝器、先進後出(FILO)緩衝器、後進先出(LIFO)緩衝器、後進後出(LILO)緩衝器和循環緩衝器。第一複數個緩衝器1704中的緩衝器的大小可以是8位元組、16位元組、32位元組、64位元組、128位元組、256位元組等,或是任何適合在主機處理器、網路介面控制器和可重配置處理器之間傳輸資料的方便的大小。第二複數個緩衝器1706被配置成串流傳輸來自可重配置處理器的處理資料單元的結果,並將結果發送到目的地記憶體1708(例如,可重配置處理器記憶體162a、可重配置處理器記憶體162n)用於儲存。第二複數個緩衝器1706中的緩衝器的範例包括先進先出(FIFO)緩衝器、先進後出(FILO)緩衝器、後進先出(LIFO)緩衝器、後進後出(LILO)緩衝器和循環緩衝器。第二複數個緩衝器1706中的緩衝器的大小可以是8位元組、16位元組、32位元組、64位元組、128位元組、256位元組等,或是任何適合在主機處理器、網路介面控制器和可重配置處理器之間傳輸資料的方便的大小。
運行時邏輯(例如,運行時邏輯122a、運行時邏輯122n)被配置成使第一複數個緩衝器1704中的緩衝器從源記憶體1702接收資料單元系列1712中的下一個資料單元,同時可重配置處理器處理資料單元系列1712中的當前資料單元。該運行時邏輯還被配置成在第二複數個緩衝器1706中的緩衝器從可重配置處理器串流傳輸處理當前資料單元的結果之後,將下一個資料單元串流傳輸到可重配置處理器用於處理。
轉到圖17A中所示的範例。考量張量1是當前的資料單元,以及張量2和3是下一個資料單元,在時步(timestep)1,第一複數個緩衝器1704中的緩衝器從源記憶體1702接收張量1。在時步2,第一複數個緩衝器1704中的緩衝器將張量1串流傳輸到可重配置處理器。在時步3,可重配置處理器開始處理張量1。當可重配置處理器正在處理張量1時,第一複數個緩衝器1704中的緩衝器分別在時步4和5從源記憶體1702接收張量2和3。在時步6,可重配置處理器將處理張量1的結果(結果1)串流傳輸到第二複數個緩衝器1706中的緩衝器。在時步7,第二複數個緩衝器1706中的緩衝器將處理張量1的結果串流傳輸到目的地記憶體1708用於儲存。在時步8,第一複數個緩衝器1704中的緩衝器將張量2串流傳輸到可重配置處理器。在其他實現中,將張量2從第一複數個緩衝器1704中的緩衝器串流傳輸到可重配置處理器先於將處理張量1的結果從第二複數個緩衝器1706中的緩衝器串流傳輸到目的地記憶體1708。與圖17A中所示的步驟相比,其他實現可以以不同的順序及/或使用不同、更少或額外的步驟來執行步驟。在一些實現中,可重配置處理器142a在一或多個先前時步/迭代中對張量(例如,張量2和3)的處理與可重配置處理器142a在當前時步/迭代中對張量(例如,張量1)的處理重疊。這在本文中稱為“元管線(meta-pipelining)”。在一些實現中可以組合多個步驟。
圖17B是訊息序列圖1700B,其說明非同步張量串流的一種實現,其中在可重配置處理器處理當前張量之前緩衝下一個張量。該運行時邏輯還被配置成使第一複數個緩衝器1704中的緩衝器在可重配置處理器開始處理當前張量之前,從源記憶體1702接收下一個資料單元。
轉到圖17B中所示的範例。在時步1,第一複數個緩衝器1704中的緩衝器從源記憶體1702接收張量1。在時步2,第一複數個緩衝器1704中的緩衝器將張量1串流傳輸到可重配置處理器。在可重配置處理器開始處理張量1之前,第一複數個緩衝器1704中的緩衝器分別在時步3和4從源記憶體1702接收張量2和3。在時步5,可重配置處理器開始處理張量1。在時步6,可重配置處理器將處理張量1的結果(結果1)串流傳輸到第二複數個緩衝器1706中的緩衝器。在時步7,第二複數個緩衝器1706中的緩衝器將處理張量1的結果串流傳輸到目的地記憶體1708用於儲存。在時步8,第一複數個緩衝器1704中的緩衝器將張量2串流傳輸到可重配置處理器。在其他實現中,將張量2從第一複數個緩衝器1704中的緩衝器串流傳輸到可重配置處理器先於將處理張量1的結果從第二複數個緩衝器1706中的緩衝器串流傳輸到目的地記憶體1708。與圖17B中所示的步驟相比,其他實現可以以不同的順序及/或使用不同、更少或額外的步驟來執行步驟。在一些實現中可以組合多個步驟。
圖17C是訊息序列圖1700C,其說明非同步張量串流的一種實現,其中在可重配置處理器已處理當前張量之後緩衝下一個張量。該運行時邏輯還被配置成使第一複數個緩衝器1704中的緩衝器在第二複數個緩衝器1706中的緩衝器從可重配置處理器串流傳輸處理當前資料單元的結果之後,從源記憶體1702接收下一個資料單元。
轉到圖17C中所示的範例。在時步1,第一複數個緩衝器1704中的緩衝器從源記憶體1702接收張量1。在時步2,第一複數個緩衝器1704中的緩衝器將張量1串流傳輸到可重配置處理器。在時步3,可重配置處理器開始處理張量1。在時步4,可重配置處理器將處理張量1的結果(結果1)串流傳輸到第二複數個緩衝器1706中的緩衝器。在第二複數個緩衝器1706中的緩衝器從可重配置處理器串流傳輸處理張量1的結果之後,第一複數個緩衝器1704中的緩衝器分別在時步5和6從源記憶體1702接收張量2和3。在時步7,第二複數個緩衝器1706中的緩衝器將處理張量1的結果串流傳輸到目的地記憶體1708用於儲存。在時步8,第一複數個緩衝器1704中的緩衝器將張量2串流傳輸到可重配置處理器。在其他實現中,將張量2從第一複數個緩衝器1704中的緩衝器串流傳輸到可重配置處理器先於將處理張量1的結果從第二複數個緩衝器1706中的緩衝器串流傳輸到目的地記憶體1708。與圖17C中所示的步驟相比,其他實現可以以不同的順序及/或使用不同、更少或額外的步驟來執行步驟。在一些實現中可以組合多個步驟。
已經描述了非同步張量串流,現在討論轉向所公開的技術如何在資料中心100中的不同處理節點上的可重配置處理器上執行配置檔。這在本文中稱為“配置檔案的節點間執行”。 配置檔案的節點間執行
圖18是訊息序列圖1800,其說明在資料中心100中的不同處理節點上的可重配置處理器上執行配置檔的一種實現。這在本文中稱為“配置檔案的節點間執行”。資料中心100包括可重配置資料流資源池。可重配置資料流資源池包括複數個處理節點(例如,處理節點1至n)。複數個處理節點中的個別處理節點可操作地耦接到各自的複數個可重配置處理器(RP)和各自的複數個緩衝器。個別處理節點還可操作地耦接到各自的主機處理器。個別處理節點還可操作地耦接到各自的複數個網路介面控制器(NIC)或智慧型網路介面控制器(SmartNIC)。
在一種實現中,個別複數個緩衝器中的緩衝器位於個別複數個可重配置處理器的個別記憶體中。個別複數個可重配置處理器的個別記憶體的範例包括晶片外及/或晶片上記憶體,諸如DRAM、NAND快閃、SRAM、鎖存器、觸發器、旁路網路和暫存器。在另一實現中,緩衝器位於個別複數個NIC或SmartNIC中的NIC或SmartNIC的個別記憶體中。在又另一實現中,緩衝器位於個別主機處理器中的主機處理器的個別記憶體(例如,RAM/ROM、快取)。在其他實現中,緩衝器可以位於或連接到資料中心100的任何網路元件,諸如PCIe匯流排、雙倍資料速率(DDR)通道、雙行記憶體模組(DIMM)、路由器和交換器。緩衝器可以是先進先出(FIFO)緩衝器、先進後出(FILO)緩衝器、後進先出(LIFO)緩衝器、後進後出(LILO)緩衝器或循環緩衝器。緩衝器的大小可以是8位元組、16位元組、32位元組、64位元組、128位元組、256位元組等,或是任何適合在主機處理器、網路介面控制器和可重配置處理器之間傳輸資料的方便的大小。
編譯器1812編譯應用程式1802(操作1)並產生配置檔1822(操作2)。配置檔1822指定執行配置檔1822所需的虛擬資料流資源1824的配置。在一種實現中,虛擬資料流資源1824包括在第一虛擬處理節點1824a中的第一虛擬可重配置處理器1824a1、在第二虛擬處理節點1824b中的第二虛擬可重配置處理器1824b1以及在第一虛擬可重配置處理器1824a1和第二虛擬可重配置處理器1824b1之間串流傳輸資料的虛擬緩衝器1824c。虛擬緩衝器1824c包括第一虛擬SmartNIC緩衝器1824c1和第二虛擬SmartNIC緩衝器1824c2。
運行時處理器1832可操作地耦接到可重配置資料流資源池並且被配置為接收配置檔1822(操作3)。運行時處理器1832包括運行時邏輯1842和分配邏輯1844。分配邏輯1844被配置為將可重配置資料流資源池中的可重配置資料流資源分配給虛擬資料流資源1824(操作4)。被分配的可重配置資料流資源包括個別處理節點中被分配給第一虛擬處理節點1824a的第一處理節點、個別處理節點中被分配給第二虛擬處理節點1824b的第二處理節點、被分配給第一虛擬可重配置處理器1824a1之可操作地耦接到第一處理節點的第一可重配置處理器、被分配給第二虛擬可重配置處理器1824b1之可操作地耦接到第二處理節點的第二可重配置處理器以及被分配給虛擬緩衝器1824c之可操作地耦接到第一處理節點的第一複數個緩衝器和可操作地耦接到第二處理節點的的第二複數個緩衝器。運行時邏輯1842被配置為使用分配的可重配置資料流資源執行配置檔1822(操作5)。在實施例中,運行時邏輯1842也將起始權重寫入RP。
現在討論轉向如何透過將緩衝器的物理記憶體位址映射到資料中心100中的不同網路元件的記憶體(例如,主機記憶體、可重配置處理器記憶體、NIC記憶體、SmartNIC記憶體、PCIe匯流排記憶體、DDR通道記憶體、DIMM記憶體等)來分配緩衝器用於節點間串流傳輸配置資料(例如,位元流)。 緩衝器分配
緩衝器是可編程的,並且可以透過指定物理記憶體位址來分配。緩衝器的物理記憶體位址指定緩衝器的記憶體位置。緩衝器的物理記憶體位址可以由主機處理器及/或由可重配置處理器指定。虛擬緩衝器1824c的配置指定被分配用於執行應用程式1802之緩衝器的虛擬記憶體區段(例如,第一和第二複數個緩衝器),包括虛擬記憶體區段的虛擬位址空間(例如,起始或基底位址)和虛擬位址空間的大小(例如,記憶體塊的大小,以位元組為單位)。運行時處理器1832將虛擬記憶體區段的虛擬位址空間映射到被分配的緩衝器所在的記憶體中物理記憶體區段的物理位址空間。記憶體可以是主機處理器記憶體、可重配置處理器記憶體(晶片外或晶片上)、NIC記憶體、SmartNIC記憶體、PCIe匯流排記憶體、DMA記憶體、DIMM記憶體或資料中心100中的任何其他網路元件記憶體。
圖19示出記憶體映射1900的一種實現,將虛擬緩衝器1824c記憶體映射到分配的緩衝器1902/物理緩衝器1902,其位於示例性可重配置資料流資源的個別物理記憶體中,諸如SmartNIC 1(SmartNIC 1)記憶體、SmartNIC 2(SmartNIC 2)記憶體、可重配置處理器1(RP 1)記憶體、可重配置處理器2(RP 2)記憶體、PCIe 1記憶體、DMA 1記憶體和主機處理器1記憶體。圖19示出示例性可重配置資料流資源的控制及狀態暫存器(CSR)1980被用於將虛擬記憶體空間中的虛擬緩衝器1824c記憶體映射到物理記憶體空間。在被分配的物理元件(例如,SmartNIC、RP、PCIe裝置的DMA引擎等)中的CSR 1913、1923、1933、1943、1953、1963和1973被用來透過讓運行時邏輯對其進行編程,以將應用程式虛擬緩衝器位址映射到適當的物理位址。(例如,SmartNIC 1緩衝器1912、SmartNIC 2緩衝器1922、RP 1緩衝器1932、RP 2緩衝器1942、PCIe 1緩衝器1952、DMA 1緩衝器1962、主機1緩衝器1972)到連續物理記憶體空間中的分配的緩衝器1902(例如,SmartNIC 1緩衝器1914(第一物理記憶體位址範圍)、SmartNIC 2緩衝器1924(第二物理記憶體位址範圍)、RP 1緩衝器1934(第三物理記憶體位址範圍)、RP 2緩衝器1944(第四物理記憶體位址範圍)、PCIe 1緩衝器1954(第五物理記憶體位址範圍)、DMA 1緩衝器1964(第六物理記憶體位址範圍)、主機1緩衝器1974(第七物理記憶體位址範圍))。
現在討論轉向如何為在給定的可重配置資料流資源集(例如,可重配置處理器、NIC、SmartNIC、PCIe匯流排、DMA通道)上同時或平行執行的多個應用程式獨立地完成緩衝器分配,以及被分配的緩衝器如何在逐個應用程式的基礎上保持隔離。 逐應用程式(Application-Wise)的緩衝器分配和隔離
在一種實現中,運行時處理器1832使用識別虛擬位址空間和物理位址空間之間的映射的配置資料(例如,位元流)來配置可重配置資料流資源的控制及狀態暫存器,以便配置檔1822在執行應用程式1802期間存取物理記憶體區段。在一些實現中,映射到被分配給應用程式1802中的第一應用程式的緩衝器的第一組物理記憶體區段不同於映射到被分配給應用程式1802中的第二應用程式的緩衝器的第二組物理記憶體區段。並且,被分配給應用程式1802中的第一應用程式的緩衝器的存取限於第一組物理記憶體區段,以及被分配給應用程式1802中的第二應用程式的緩衝器的存取限於第二組物理記憶體區段。
在一些實現中,可重配置處理器具有用於個別應用程式的個別複數個緩衝器,使得第一複數個緩衝器可用於串流傳輸配置資料(例如,位元流)以執行用於第一應用程式的配置檔、第二複數個緩衝器可用於串流傳輸配置資料(例如,位元流)以執行用於第二應用程式的配置檔、第三複數個緩衝器可用於串流傳輸配置資料(例如,位元流)以執行用於第三應用程式的配置檔等。用於第一、第二和第三應用程式的配置檔可以分別使用第一、第二和第三複數個緩衝器平行或按順序執行。在一種實現中,用於第一、第二和第三應用程式的配置檔可以分別使用第一、第二和第三複數個緩衝器在單一可重配置處理器上平行或按順序執行。在另一實現中,用於第一、第二和第三應用程式的配置檔可以分別使用第一、第二和第三複數個緩衝器在同一處理節點上的可重配置處理器間平行或按順序執行,使得在一些實現中,第一、第二和第三複數個緩衝器之各者包括針對同一處理節點上之各個可重配置處理器或NIC或SmartNIC的用於執行配置檔的一組發送器(TX)緩衝器和接收器(RX)緩衝器。在又另一實現中,用於第一、第二和第三應用程式的配置檔可以分別使用第一、第二和第三複數個緩衝器在不同處理節點上的可重配置處理器間平行或按順序執行,使得在一些實現中,第一、第二和第三複數個緩衝器之各者包括針對不同處理節點上之各個可重配置處理器或NIC或SmartNIC的用於執行配置檔的一組發送器(TX)緩衝器和接收器(RX)緩衝器。
在一種實現中,運行時處理器1832在資料中心100中的各個主機處理器上運行,並且提供對資料中心100中的可重配置資料流資源池的統一存取。關於分配邏輯1844如何跨越運行時處理器或運行時邏輯在其上運行的主機處理器的使用者空間及核心空間的額外細節可以參見美國非臨時專利申請案號16/922,975,於2020年7月7日申請,名稱為“RUNTIME VIRTUALIZATION OF RECONFIGURABLE DATAFLOW RESOURCES”,(代理人案號為SBNV 1026-1),其透過引用併入本文(具體參考透過引用併入的申請中的運行時程式庫312、核心模組322、資源管理器471、裝置驅動器474及其他分配邏輯和元件)。
現在討論轉向如何在不使用主機或主機處理器的情況下執行本申請中描述的公開技術的各種態樣。本文中將這種實現稱為“無主機(host-less)實現”。 超管理器及無主機實現
在另一實現中,運行時處理器1832在資料中心100中的各個可重配置處理器上運行,並且提供對資料中心100中的可重配置資料流資源池的統一存取。在又另一實現中,運行時處理器1832僅在資料中心100中的主機處理器的子集上(例如,僅在一個主機處理器上)作為超管理器運行。在又另一實現中,運行時處理器1832在資料中心100中的可重配置處理器的子集上(例如,僅在一個可重配置處理器上)作為超管理器運行。
圖20示出資料中心100之一種實現的架構級示意圖2000,其中資料中心100的處理節點不包括主機處理器。架構級示意圖2000中所示的實現被配置成執行本申請中討論的其他實現(例如,節點內處理、節點間執行配置檔),除了其他實現是在不使用主機處理器的情況下執行的。在許多無主機實現中,其他由主機處理器執行的功能改為由資料中心100中的可重配置處理器執行。在無主機實現中由可重配置處理器執行的功能的一些範例包括託管編譯器1812、編譯應用程式1802、產生配置檔1822、產生虛擬資料流資源1824的配置、託管運行時處理器1832、記憶體映射、資源分配(例如,指定和分配緩衝器的物理記憶體位址和其他可重配置資料流資源)、執行配置檔1822、剖析傳入的網路封包並以超低和確定性延遲運行異常檢測等)。在其他無主機實現中,其他由主機處理器執行的功能被資料中心100中的其他網路元件,例如,由包括微控制器以本地觸發類似主機命令而不需要外部主機的SmartNIC排除。
在超管理器和無主機實現中,可以將運行時處理器1832視為分散式運行時處理器、分散式運行時邏輯、分散式資源管理器及/或分散式資源分配器,其提供對資料中心100中的可重配置資料流資源池的統一存取。
現在討論轉向為了有效執行配置檔,所公開的技術如何使用緩衝器透過網路組構在資料中心100的不同處理節點上的可重配置處理器之間串流傳輸配置資料(例如,位元流)。這在本文中稱為“透過網路組構之基於緩衝器的節點間串流傳輸配置資料(例如,位元流)”。
透過網路組構之基於緩衝器的節點間串流傳輸配置資料(例如,位元流)
圖21是訊息序列圖2100,其說明透過網路組構136之基於緩衝器的節點間串流傳輸配置資料(例如,位元流)的一種實現。在圖21所示的實現中,用於節點間串流傳輸的緩衝器,即,發送器緩衝器2176a、接收器緩衝器2178a、發送器緩衝器2176n和接收器緩衝器2178n,位於SmartNIC裝置132a和132n各自的記憶體中。然而,這些緩衝器可以位於資料中心100的任何網路元件中(例如,主機處理器的記憶體、可重配置處理器的記憶體、NIC裝置的記憶體、PCIe匯流排上的記憶體、DDR通道上的記憶體、DIMM的記憶體等)。
在圖21所示的實現中,可操作地將同一處理節點上的可重配置處理器耦接到相同處理節點的主機處理器以及耦接到連接至相同處理節點的NIC裝置或SmartNIC裝置的本地匯流排125a、126a、127a、125n、126n和127n以及匯流排交換器124a和124n分為為PCIe匯流排2132a、2136a、2132n和2136n以及PCIe交換器(PEX)2112a、2134a、2112n和2134n。在其他實現中,PCIe協定可以由其他匯流排協定替代或補充,諸如加速器專屬快取互連一致性(CCIX)、Compute Express Link(CXL)和開放協調加速器處理器介面(OpenCAPI)。
雖然訊息序列圖2100起始於操作1,但為了清楚起見,省略了一些前面的操作。轉到圖18中所示的範例,省略的操作的一些範例包括應用程式1802請求執行、編譯器1812編譯應用程式1802並產生配置檔1822、運行時處理器1832分配物理資源,即,可重配置資料流資源,用於執行配置檔1822以及運行時處理器1832將配置檔1812加載到分配的可重配置資料流資源。這些省略的操作可以在資料中心100中的任何主機處理器或任何可重配置處理器上執行。
繼續圖18中所示的範例,考量虛擬資料流資源1824和虛擬緩衝器1824c被分配了資料中心100中的處理節點1和處理節點n的可重配置資料流資源。第一虛擬處理節點1824a被分配了處理節點1(以下稱為“第一處理節點”)。第一虛擬可重配置處理器1824a1被分配了處理節點1上的可重配置處理器N(RP N)(以下稱為“第一可重配置處理器”)。第二虛擬處理節點1824b被分配了處理節點n(以下稱為“第二處理節點”)。第二虛擬可重配置處理器1824b1被分配了處理節點n上的可重配置處理器N(RP N)(以下稱為“第二可重配置處理器”)。第一虛擬SmartNIC緩衝器1824c1被分配了發送器緩衝器2176a和接收器緩衝器2178a(以下稱為“第一複數個緩衝器”)。第二虛擬SmartNIC緩衝器1824c2被分配了發送器緩衝器2176n和接收器緩衝器2178n(以下稱為“第二複數個緩衝器”)。
第一複數個緩衝器包括第一組發送器緩衝器2176a,其被配置為從第一可重配置處理器接收資料並將資料提供給第二複數個緩衝器中的第二組接收器緩衝器2178n。第二組接收器緩衝器2178n被配置為將資料提供給第二可重配置處理器。第二複數個緩衝器包括第二組發送器緩衝器2176n,其被配置為從第二可重配置處理器接收資料並將資料提供給第一複數個緩衝器中的第一組接收器緩衝器2178a。第一組接收器緩衝器2178a被配置為將資料提供給第一可重配置處理器。
運行時處理器1832被配置為以路由表配置第一SmartNIC 132a,該路由表將第一可重配置處理器指定為本地可重配置處理器,以及將第二可重配置處理器指定為目的地可重配置處理器。運行時處理器1832被配置為以路由表配置第二SmartNIC 132n,該路由表將第二可重配置處理器指定為本地可重配置處理器,以及將第一可重配置處理器指定為目的地可重配置處理器。
特別是,圖21示出運行時處理器1832如何在第一處理節點(處理節點1)和第二處理節點(處理節點n)上執行配置檔1822的一種實現。在一種實現中,該執行包括使用第一複數個緩衝器中的一或多個緩衝器和第二複數個緩衝器中的一或多個緩衝器,在第一可重配置處理器和第二可重配置處理器之間串流傳輸定義應用程式1802之配置檔1822的資料(例如,配置資料(例如,位元流)和應用程式資料(權重、係數、向量、張量、控制資料(例如,控制符記)等),藉此串流傳輸旁路第一主機處理器102a和第二主機處理器102n(如圖21中的虛線所示)。因此,在一些實現中,訊息序列圖2100可以在不使用主機處理器的情況下執行(例如,如關於圖20所討論的無主機實現)。這節省了等待時間並提高吞吐量,並且也不需要第一和第二主機處理器102a和102n上所需的任何處理時間(例如,用於由它們各自的作業系統進行處理)。
在一些實現中,該執行包括將應用程式1802的輸入資料從第一可重配置處理器串流傳輸到第二可重配置處理器。在一些實現中,第一組發送器緩衝器2176a中的一或多個發送器緩衝器被配置為從第一可重配置處理器接收輸入資料(操作1),並將輸入資料提供給第二組接收器緩衝器2178n中的一或多個接收器緩衝器(操作2)。
第一可重配置處理器被配置為將輸入資料推送到第一SmartNIC 132a(例如,經由PCIe端點埠(Endpoint Port,EP)2146a)(操作1)。在一些實現中,操作1透過第一可重配置處理器的位址產生器(例如,位址產生與合併單元)(AGCU))將輸入資料寫入映射到第一組發送器緩衝器2176a中的發送器緩衝器的物理記憶體位址(例如,經由硬體寫(HWRITE)命令)來完成。在一種實現中,第一SmartNIC 132a被配置為將封裝後的輸入資料寫入第一組發送器緩衝器2176a中的發送器緩衝器。在一種實現中,第一SmartNIC 132a被配置為回應於輸入資料的寫入,更新第一組發送器緩衝器2176a中的發送器緩衝器的尾指標。在一種實現中,第一SmartNIC 132a被配置為處理輸入資料作為負載2156a、施用封裝、將其儲存在快取2186a並透過網路組構136(例如,經由MAC埠2196a)將其串流傳輸到第二SmartNIC 132n。
本領域之技術人士將理解,操作1和6包括使用諸如交換層封包(Transaction Layer Packet,TLP)(例如,2120a、2128a)的協定,透過本地匯流排PCIe 2132a和2136a,在第一可重配置處理器和第一SmartNIC 132a之間串流傳輸網路封包。本領域之技術人士也將理解,操作2包括使用諸如基於融合乙太網的RDMA(RoCE)、TCP、用戶資料報協定(UDP)和快速UDP網際網路連接(QUIC)(例如,2198a、2198n)的協定,透過網路組構136(例如,乙太網路、InfiniBand(IB)),從第一SmartNIC 132a串流傳輸網路封包到第二SmartNIC 132n。
第二組接收器緩衝器2178n中的接收器緩衝器被配置為將輸入資料提供給第二可重配置處理器(操作3)。在一些實現中,操作3透過第二可重配置處理器的位址產生器(例如,位址產生與合併單元)(AGCU))從映射到第二組接收器緩衝器2178n中的接收器緩衝器的物理記憶體位址讀取輸入資料(例如,經由硬體讀(HWREAD)命令)來完成。在一種實現中,第一SmartNIC 132a被配置為回應於更新後的尾指標,將輸入資料發送到第二SmartNIC 132n。在一種實現中,第二SmartNIC 132n被配置為將解封裝後的輸入資料寫入第二組接收器緩衝器2178n中的接收器緩衝器。在一種實現中,第二SmartNIC 132n被配置為回應於輸入資料的寫入,更新第二組接收器緩衝器2178n中的接收器緩衝器的尾指標。第二可重配置處理器被配置為回應於更新後的尾指標,透過從第二組接收器緩衝器2178n中的接收器緩衝器讀取輸入資料,從第二SmartNIC 132n拉取輸入資料(例如,經由PCIe端點埠(EP) 2146n)。
在一些實現中,該執行包括將應用程式1802的輸出資料從第二可重配置處理器串流傳輸到第一可重配置處理器。輸出資料作為處理輸入資料的結果(例如,由第二可重配置處理器處理輸入資料)而產生。在一些實現中,第二組發送器緩衝器2176n中的一或多個發送器緩衝器被配置為從第二可重配置處理器接收輸出資料(操作4),以及將輸出資料提供給第一組接收器緩衝器2178a中的一或多個接收器緩衝器(操作5)。
第二可重配置處理器被配置為將輸出資料推送到第二SmartNIC 132n(例如,經由PCIe端點埠(EP) 2146n)(操作4)。在一些實現中,操作4透過第二可重配置處理器的位址產生器(例如,位址產生與合併單元) (AGCU))將輸出資料寫入映射到第二組發送器緩衝器2176n中的發送器緩衝器的物理記憶體位址(例如,經由硬體寫(HWRITE)命令)來完成。在一種實現中,第二SmartNIC 132n被配置為將封裝後的輸出資料寫入第二組發送器緩衝器2176n中的發送器緩衝器。在一種實現中,第二SmartNIC 132n被配置為回應於輸出資料的寫入,更新第二組發送器緩衝器2176n中的發送器緩衝器的尾指標。在一種實現中,第二SmartNIC 132n被配置為處理輸出資料作為負載2156n、施用封裝、將其儲存在快取2186n並透過網路組構136(例如,經由MAC埠2196n)將其串流傳輸到第一SmartNIC 132a。
本領域之技術人士將理解,操作3和4包括使用諸如交換層封包(TLP)(例如,2120n、2128n)的協定,透過本地匯流排PCIe 2132n和2136n,第二可重配置處理器到第二SmartNIC 132n之間串流傳輸網路封包。本領域之技術人士也將理解,操作5包括使用諸如基於融合乙太網的RDMA(RoCE)、TCP、用戶資料報協定(UDP)和快速UDP網際網路連接(QUIC)(例如,2198a、2198n)的協定,透過網路組構136(例如,乙太網路、InfiniBand(IB)),從第二SmartNIC 132n串流傳輸網路封包到第一SmartNIC 132a。
第一組接收器緩衝器2178a中的接收器緩衝器被配置為將輸出資料提供給第一可重配置處理器(操作6)。在一些實現中,操作6透過第一可重配置處理器的位址產生器(例如,位址產生與合併單元)(AGCU))從映射到第一組接收器緩衝器2178a中的接收器緩衝器的物理記憶體位址讀取輸出資料(例如,經由硬體讀(HWREAD)命令)來完成。在一種實現中,第二SmartNIC 132n被配置為回應於更新後的尾指標,將輸出資料發送到第一SmartNIC 132a。在一種實現中,第一SmartNIC 132a被配置為將解封裝後的輸出資料寫入第一組接收器緩衝器2178a中的接收器緩衝器。在一種實現中,第一SmartNIC 132a被配置為回應於輸出資料的寫入,更新第一組接收器緩衝器2178a中的接收器緩衝器的尾指標。第一可重配置處理器被配置為回應於更新後的尾指標,透過從第一組接收器緩衝器2178a中的接收器緩衝器讀取輸出資料,從第一SmartNIC 132a拉取輸出資料(例如,經由PCIe端點埠(EP)2146a)。
在一些實現中,第一可重配置處理器使用一或多個遠端程序呼叫通知第二可重配置處理器遠端調用。在一種實現中,第一可重配置處理器使用第一組發送器緩衝器2176a中的發送器緩衝器和第二組接收器緩衝器2178n中的接收器緩衝器,透過網路組構136將一或多個參數值發送到第二可重配置處理器用於執行遠端程序呼叫(類似於圖21中的操作2)。
在一些實現中,第二可重配置處理器使用一或多個遠端程序呼叫通知第一可重配置處理器遠端調用。在一種實現中,第二可重配置處理器使用第二組發送器緩衝器2176n中的發送器緩衝器和第一組接收器緩衝器2178a中的接收器緩衝器,透過網路組構136將一或多個參數值發送到第一可重配置處理器用於執行遠端程序呼叫(類似於圖21中的操作5)。
圖22是訊息序列圖2200,其說明透過網路組構136之基於緩衝器的節點間串流傳輸配置資料(例如,位元流)的另一種實現。特別是,圖22示出運行時處理器1832如何在第一處理節點(處理節點1)和第二處理節點(處理節點n)上執行配置檔1822的另一種實現。在一種實現中,該執行包括使用第一複數個緩衝器中的一或多個緩衝器和第二複數個緩衝器中的一或多個緩衝器,在第一可重配置處理器和第二主機處理器102n之間串流傳輸定義應用程式1802之配置檔1822的資料(例如,配置資料(例如,位元流)和應用程式資料(權重、係數、向量、張量、控制資料(例如,控制符記)等),藉此串流傳輸旁路第一主機處理器102a(如圖22中的虛線所示)。這節省了等待時間並提高吞吐量,並且也不需要第一主機處理器102a上所需的任何處理時間(例如,用於由其作業系統進行處理)。
在一些實現中,該執行包括將應用程式1802的輸入資料從第一可重配置處理器串流傳輸到第二主機處理器102n。在一些實現中,第一組發送器緩衝器2176a中的一或多個發送器緩衝器被配置為從第一可重配置處理器接收輸入資料(操作1),以及將輸入資料提供給第二組接收器緩衝器2178n中的一或多個接收器緩衝器(操作2)。
第一可重配置處理器被配置為將輸入資料推送到第一SmartNIC 132a(例如,經由PCIe端點埠(EP) 2146a)(操作1)。在一些實現中,操作1透過第一可重配置處理器的位址產生器(例如,位址產生與合併單元)(AGCU))將輸入資料寫入映射到第一組發送器緩衝器2176a中的發送器緩衝器的物理記憶體位址(例如,經由硬體寫(HWRITE)命令)來完成。在一種實現中,第一SmartNIC 132a被配置為將封裝後的輸入資料寫入第一組發送器緩衝器2176a中的發送器緩衝器。在一種實現中,第一SmartNIC 132a被配置為回應於輸入資料的寫入,更新第一組發送器緩衝器2176a中的發送器緩衝器的尾指標。在一種實現中,第一SmartNIC 132a被配置為處理輸入資料作為負載2156a、施用封裝、將其儲存在快取2186a並透過網路組構136(例如,經由MAC埠2196a)將其串流傳輸到第二SmartNIC 132n。
本領域之技術人士將理解,操作1和6包括使用諸如交換層封包(TLP)(例如,2120a、2128a)的協定,透過本地匯流排PCIe 2132a和2136a,在第一可重配置處理器和第一SmartNIC 132a之間串流傳輸網路封包。本領域之技術人士也將理解,操作2包括使用諸如基於融合乙太網的RDMA(RoCE)、TCP、用戶資料報協定(UDP)和快速UDP網際網路連接(QUIC)(例如,2198a、2198n)的協定,透過網路組構136(例如,乙太網路、InfiniBand(IB)),從第一SmartNIC 132a串流傳輸網路封包到第二SmartNIC 132n。
第二組接收器緩衝器2178n中的接收器緩衝器被配置為將輸入資料提供給第二主機處理器102n(操作3)。在一些實現中,操作3透過第二主機處理器102n的位址產生器(例如,一旦DMA操作完成,第二主機處理器讀取已DMA的資料)從映射到第二組接收器緩衝器2178n中的接收器緩衝器的物理記憶體位址讀取輸入資料(例如,經由硬體讀(HWREAD)命令)來完成。在一種實現中,第一SmartNIC 132a被配置為回應於更新後的尾指標,將輸入資料發送到第二SmartNIC 132n。在一種實現中,第二SmartNIC 132n被配置為將解封裝後的輸入資料寫入第二組接收器緩衝器2178n中的接收器緩衝器。在一種實現中,第二SmartNIC 132n被配置為回應於輸入資料的寫入,更新第二組接收器緩衝器2178n中的接收器緩衝器的尾指標。第二主機處理器102n被配置為回應於更新後的尾指標,透過從第二組接收器緩衝器2178n中的接收器緩衝器讀取輸入資料,從第二SmartNIC 132n拉取輸入資料(例如,經由PCIe端點埠(EP)2146n)。通常SmartNIC會將負載DMA到主機102n記憶體134n,然後透過DMA完成機制通知主機。
在一些實現中,該執行包括將應用程式1802的輸出資料從第二主機處理器102n串流傳輸到第一可重配置處理器。輸出資料作為處理輸入資料的結果(例如,由第二主機處理器102n處理輸出資料)而產生。在一些實現中,第二組發送器緩衝器2176n中的一或多個發送器緩衝器被配置為從第二主機處理器102n接收輸出資料(操作4),以及將輸出資料提供給第一組接收器緩衝器2178a中的一或多個接收器緩衝器(操作5)。
第二主機處理器102n被配置為將輸出資料推送到第二SmartNIC 132n(例如,經由PCIe端點埠(EP) 2146n)(操作4)。在一些實現中,操作4透過DMA操作完成。在一種實現中,第二SmartNIC 132n被配置為將封裝後的輸出資料寫入第二組發送器緩衝器2176n中的發送器緩衝器。在一種實現中,第二SmartNIC 132n被配置為回應於輸出資料的寫入,更新第二組發送器緩衝器2176n中的發送器緩衝器的尾指標。在一種實現中,第二SmartNIC 132n被配置為處理輸出資料作為負載2156n、施用封裝、將其儲存在快取2186n並透過網路組構136(例如,經由MAC埠2196n)將其串流傳輸到第一SmartNIC 132a。
本領域之技術人士將理解,操作3和4包括使用諸如交換層封包(TLP)(例如,2120n、2128n)的協定,透過本地匯流排PCIe 2132n和2136n,在第二主機處理器102n到第二SmartNIC 132n之間串流傳輸網路封包。本領域之技術人士也將理解,操作5包括使用諸如基於融合乙太網的RDMA(RoCE)、TCP、用戶資料報協定(UDP)和快速UDP網際網路連接(QUIC)(例如,2198a、2198n)的協定,透過網路組構136(例如,乙太網路、InfiniBand(IB)),從第二SmartNIC 132n串流傳輸網路封包到第一SmartNIC 132a。
第一組接收器緩衝器2178a中的接收器緩衝器被配置為將輸出資料提供給第一可重配置處理器(操作6)。在一些實現中,操作6透過第一可重配置處理器的位址產生器(例如,位址產生與合併單元)(AGCU))從映射到第一組接收器緩衝器2178a中的接收器緩衝器的物理記憶體位址讀取輸出資料(例如,經由硬體讀(HWREAD)命令)來完成。在一種實現中,第二SmartNIC 132n被配置為回應於更新後的尾指標,將輸出資料發送到第一SmartNIC 132a。在一種實現中,第一SmartNIC 132a被配置為將解封裝後的輸出資料寫入第一組接收器緩衝器2178a中的接收器緩衝器。在一種實現中,第一SmartNIC 132a被配置為回應於輸出資料的寫入,更新第一組接收器緩衝器2178a中的接收器緩衝器的尾指標。第一可重配置處理器被配置為回應於更新後的尾指標,透過從第一組接收器緩衝器2178a中的接收器緩衝器讀取輸出資料,從第一SmartNIC 132a(例如,經由PCIe端點埠(EP)2146a)拉取輸出資料。
在一些實現中,第一可重配置處理器使用一或多個遠端程序呼叫通知第二主機處理器102n遠端調用。在一種實現中,第一可重配置處理器使用第一組發送器緩衝器2176a中的發送器緩衝器和第二組接收器緩衝器2178n中的接收器緩衝器,透過網路組構136將一或多個參數值發送到第二主機處理器102n用於執行遠端程序呼叫(類似於圖22中的操作2)。
在一些實現中,第二主機處理器102n使用一或多個遠端程序呼叫通知第一可重配置處理器遠端調用。在一種實現中,第二主機處理器102n使用第二組發送器緩衝器2176n中的發送器緩衝器和第一組接收器緩衝器2178a中的接收器緩衝器,透過網路組構136將一或多個參數值發送到第一可重配置處理器用於執行遠端程序呼叫(類似於圖22中的操作5)。
在使用第一組緩衝器的遠端程序呼叫的同步模式中,所公開的技術允許執行遠端程序呼叫的遠端實體產生一或多個結果值,並使用不同組的緩衝器將該些結果值發送回遠端呼叫者。在一種實現中,兩個通訊實體可以指定兩個緩衝器佇列,每個方向一個緩衝器佇列。呼叫者將透過將資料複製到第一緩衝器佇列來傳送資料。接收器將從第一緩衝器佇列拉取資料、計算操作、然後將結果放到第二緩衝器佇列。原始呼叫者將只是等待,直到第二緩衝器佇列有可用的資料,並且一旦遠端計算好的結果到達第二緩衝器佇列,就能夠馬上使用該結果。
在公開技術的其他實現中,SmartNIC可以替換為NIC,其可由NIC DMA或者經由主機處理器控制以實現圖21和22中所示的流程(例如,更新緩衝器的頭和尾指標)。例如,在NIC實現中,圖21和22的操作2和5是由第一和第二主機處理器102a和102n透過啟動第一NIC 132a和第二NIC 132n之間的網路封包的遠端DMA(RDMA),並且在網路封包到達時更新緩衝器的相應尾指標來執行的。
在一些實現中,SmartNIC和NIC嵌入在可重配置處理器的晶片上。 模型平行
圖23示出使用所公開的透過網路組構136之基於緩衝器的節點間串流傳輸配置資料(例如,位元流)來平行執行2300模型/應用程式的一種實現。這在本文中稱為“模型平行”。
應用程式2302是使用一組處理模組(例如,處理模型1至5)的資料流圖。處理模型的範例包括神經元或深度類神經網路的層。運行時處理器1832被配置成將該組處理模組分成處理模組的第一子集2304a和處理模組的第二子集2304b。運行時處理器1832被配置成在第一可重配置處理器(例如,來自處理節點1上的RP 142a的RP N)上執行處理模組的第一子集2304a的配置檔2322a。運行時處理器1832被配置成在第二可重配置處理器(例如,來自處理節點n上的RP 142n的RP N)上執行處理模組的第二子集2304b的配置檔2322b。
例如,透過隨機梯度下降法(Stochastic Gradient Descent,SGD)實現的深度類神經網路訓練包括前向傳遞和反向傳遞。反向傳遞包括差量(delta)傳遞和鏈式(chain)傳遞。前向傳遞在前向方向上傳播啟動。差量傳遞在反向方向上傳播差量。當差量傳遞中產生差量時,鏈式傳遞基於差量計算梯度。
運行時處理器1832被配置成使用第一複數個緩衝器2176a、2178a和第二複數個緩衝器2176n、2178n,在處理模組的第一子集2304a和處理模組的第二子集2304b之間串流傳輸資料。資料包括在前向傳遞期間產生的特徵圖及/或啟動(activation),以及在反向傳遞期間產生的參數梯度。
圖23中描述的操作一至六與圖21中的相應操作類似。 資料平行
圖24示出使用所公開的透過網路組構136之基於緩衝器的節點間串流傳輸配置資料(例如,位元流)來平行執行2400模型/應用程式的多個實例的一種實現。這在本文中稱為“資料平行”。運行時處理器1832被配置成初始化資料流圖的第一實例2404a和資料流圖的第二實例2404b。
運行時處理器1832被配置成在第一可重配置處理器(例如,來自處理節點1上的RP 142a的RP N)上執行資料流圖的第一實例2404a的配置檔2422a。運行時處理器1832被配置成在第二可重配置處理器(例如,來自處理節點n上的RP 142n的RP N)上執行資料流圖的第二實例2404b的配置檔2422b。
運行時處理器1832被配置成使用第一複數個緩衝器2176a、2178a和第二複數個緩衝器2176n、2178n,在資料流圖的第一實例和資料流圖的第二實例之間串流傳輸資料。資料包括在反向傳遞期間產生的梯度。
圖24中描述的操作一至六與圖21中的相應操作類似。 異質可重配置處理器
圖25示出在異質可重配置處理器(例如,圖25中的RP 1和RP 2)上執行2500配置檔的一種實現。異質可重配置處理器的範例包括中央處理單元(CPU)、圖形處理單元(GPU)、現場可編程閘陣列(FPGA)、粗粒度可重配置架構(CGRA)、特殊應用積體電路(ASIC)、特殊應用指令集處理器(ASIP)及數位信號處理器(DSP)。
異質可重配置處理器具有不同級別的可配置粒度。運行時處理器1832被配置成接收應用程式(例如,1802)的一組配置檔(例如,1822)。運行時處理器1832被配置成在異質可重配置處理器中的第一可重配置處理器(RP 1)上加載並執行該組配置檔中的第一配置檔子集2502a。第一可重配置處理器具有第一配置及/或第一級可配置粒度。運行時處理器1832被配置成在異質可重配置處理器中的第二可重配置處理器(RP 2)上加載並執行該組配置檔中的第二配置檔子集2502b。第二可重配置處理器具有不同於第一配置及/或第一級可配置粒度的第二配置及/或第二級可配置粒度。
第一配置為位元級可配置粒度,並且第一可重配置處理器為現場可編程閘陣列(FPGA)。第二配置為字級可配置粒度,並且第二可重配置處理器為粗粒度可重配置架構(CGRA)。第一配置為閘級可重配置性( reconfigurability),並且第一可重配置處理器為FPGA。第二配置為暫存器轉移級(register transfer-level)可重配置性,並且第二可重配置處理器具有CGRA。第一配置使用逐位元查找表(LUT)和交換器,並且第一可重配置處理器為FPGA。第二配置使用字組寬的發送插槽(Issue Slot,IS)/算術邏輯單元(ALU)/功能單元(FU)/處理元件(PE)、暫存器檔(RF)及互連,並且第二可重配置處理器具有CGRA。第二可重配置處理器使用的IS的數量少於第一可重配置處理器使用的LUT的數量。配置第二可重配置處理器所需的位元數比配置第一可重配置處理器所需的位元數小幾個數量級。 晶片上NIC/SmartNIC
圖26示出使用嵌入在可重配置處理器上的NIC或SmartNIC裝置來執行2600配置檔的一種實現。
第一可重配置處理器(例如,來自處理節點1上的RP 142a中的RP N)具有第一網路介面控制器(NIC),並且第一NIC具有第一複數個緩衝器2176a、2178a。第二可重配置處理器(例如,來自處理節點n上的RP 142n中的RP N)具有第二NIC,並且第二NIC具有第二複數個緩衝器2176n、2178n。運行時處理器1832被配置為使用第一可重配置處理器和第二可重配置處理器執行應用程式1802的配置檔1812。該執行包括使用第一NIC之第一複數個緩衝器和第二NIC之第二複數個緩衝器,在第一可重配置處理器和第二可重配置處理器之間串流傳輸用於定義應用程式1802之配置檔1822的資料(例如,配置資料(例如,位元流)和應用程式資料(權重、係數、向量、張量、控制資料(例如,控制符記)等)。
圖26中描述的操作一至六與圖21中的相應操作類似。 示例性可重配置處理器
圖27是說明包括主機2720、記憶體2740及示例性可重配置資料處理器2710之系統2700的圖,其中如本文描述的計算單元透過硬體或者透過可重配置元件的配置來部署並且配置有虛擬化邏輯2797。如在圖27的範例中所示,可重配置資料處理器2710包括可配置單元陣列2790和配置加載/卸載控制器2795。
虛擬化邏輯2797可以包括支持或致能在一個晶粒或一個多晶片模組上的可配置單元陣列中同時執行多個不相關的應用程式圖(或相關的應用程式圖)的資源。在圖示中,第一應用程式圖在特定的可配置單元集2798中的虛擬機VM1中實現,而第二應用程式圖在另一可配置單元集2799中的虛擬機VM2中實現。
可配置單元陣列2790中的可配置單元參考圖30及31進一步說明,並且配置有虛擬化邏輯2797。如本文所述,可配置單元可包括,或者可具有被配置成實現一或多個計算單元的單元。
可重配置資料處理器2710包括透過線2725連接到主機2720的外部I/O介面2730、以及透過線2745連接到記憶體2740的外部I/O介面2750。I/O介面2730、2750經由匯流排系統2715連接到可配置單元陣列2790以及連接到配置加載/卸載控制器2795。匯流排系統2715可具有乘載一個資料塊的匯流排寬度,針對此範例可以是128位元(貫穿全文對128位元的引用可更一般地被視為示例性塊的大小)。
為了用配置檔案來配置可配置單元陣列2790中的可配置單元,主機2720可以經由可重配置資料處理器2710中的I/O介面2730、匯流排系統2715及I/O介面2750將配置檔案發送到記憶體2740。可按照適合特定架構的多種方式,包括在可配置處理器2710外部的資料路徑中,加載配置檔案。可以經由記憶體I/O介面2750從記憶體2740提取配置檔案。然後可以依照分發順序將配置檔案的塊發送到可重配置資料處理器2710中之可配置單元陣列2790中的可配置單元。
外部時鐘產生器2770或其他時鐘線源可以將時鐘線2775或多條時鐘線提供給可重配置資料處理器2710中的元件,包括可配置單元陣列2790、及匯流排系統2715、及外部資料I/O介面。匯流排系統2715可以經由時鐘線2775或多條時鐘線以處理器時鐘速率傳輸資料。
圖28是CGRA(粗粒度可重配置架構)處理器的元件的簡化方塊圖2800。在此範例中,CGRA處理器有2個磚片(Tile1、Tile2)。磚片包含連接到匯流排系統的可配置單元陣列,其在此範例中包括陣列級網路。磚片中的可配置單元陣列(例如,2790,圖27)包括硬體或透過配置可重配置元件的計算單元,其配置有虛擬化邏輯2797。該匯流排系統包括頂級網路,其將磚片連接到外部I/O介面2805(或任意數量的介面)。在其他實施例中,可以使用不同的匯流排系統配置。在此實施例中,每個磚片中的可配置單元是陣列級網路上的節點。
每個磚片有4個AGCU(位址產生與合併單元)(例如,MAGCU1、AGCU9、AGCU13、AGCU14)。AGCU是頂級網路上的節點和陣列級網路上的節點,並且包括用於在每個磚片中的頂級網路上的節點與陣列級網路上的節點之間路由資料的資源。
在此範例中,頂級網路上的節點包括一或多個外部I/O,其包括介面2805。至外部裝置的介面包括資源,用於在頂級網路上的節點與連接到介面的外部裝置(諸如高容量記憶體、主處理器、其他CGRA處理器、FPGA裝置等)之間路由資料。
在此範例中,磚片中的一個AGCU被配置成主AGCU,其包括用於該磚片的陣列配置加載/卸載控制器。在其他實施例中,可以實現一個以上的陣列配置加載/卸載控制器,並且可以透過分佈在一個以上的AGCU之間的邏輯來實現一個陣列配置加載/卸載控制器。
MAGCU1包括用於Tile1的配置加載/卸載控制器,並且MAGCU2包括用於Tile2的配置加載/卸載控制器。在其他實施例中,配置加載/卸載控制器可被設計用於一個以上的磚片的加載和卸載配置。在其他實施例中,一個以上的配置控制器可被設計用於單一磚片的配置。並且,配置加載/卸載控制器可以在系統的其他部分中實現,包括作為頂級網路上和一或多個陣列級網路上的獨立節點。
頂級網路係使用頂級交換器(2811、2813、2814和2816)來構成,該些頂級交換器彼此連接並且連接到頂級網路上的其他節點,包括AGCU及I/O介面2805。頂級網路包括連接頂級交換器的鏈路(例如,L11、L9、L21、L22)。資料以封包形式在鏈路上的頂級交換器之間傳輸,並且從交換器傳輸到與交換器連接的網路上的節點。例如,頂級交換器2811和2812透過鏈路L11連接,頂級交換器2814和2815透過鏈路L9連接,頂級交換器2811和2814透過鏈路L13連接,以及頂級交換器2812和2813透過鏈路L21連接。這些鏈路可以包括一或多個匯流排,並且支援控制線,例如包括塊寬(chunk-wide)匯流排(向量匯流排)。例如,頂級網路可以包括資料、請求和回應通道,可協同操作用於以類似AXI相容協定的方式傳輸資料。參見AMBA®AXI及ACE協定規格書,ARM。
頂級交換器可被連接到AGCU。例如,頂級交換器2811、2812、2814及2815被分別連接到磚片Tile1中的MAGCU1、AGCU9、AGCU13及AGCU14。頂級交換器2812、2813、2815及2816被分別連接到磚片Tile2中的MAGCU2、AGCU22、AGCU23及AGCU24。
頂級交換器可被連接到一或多個外部I/O介面(例如,介面2805)。
圖29是可在圖28的配置中使用的磚片和陣列級網路的簡化圖,其中陣列中的可配置單元是陣列級網路上的節點,並且可被配置成實現虛擬化邏輯2797。
在此範例中,可配置單元陣列2900包括多種類型的可配置單元,其配置有虛擬化邏輯2797。此範例中的可配置單元的類型包括型樣計算單元(PCU)、型樣記憶體單元(PMU)、交換單元(S)及位址產生單元與合併單元(每個單元包括兩個位址產生器AG和一共享的CU)。這些類型的可配置單元的功能的範例,參見Prabhakar等人,“Plasticine: A Reconfigurable Architecture for Parallel Patterns”,ISCA ’17,2017年6月24-28日,加拿大安大略省多倫多,其透過引用併入,如在本文中完整闡述一般。在此範例中,可配置單元陣列2900中的PCU(例如,2942)和PMU(例如,2943)可以包括針對計算單元之實施例可配置的資源,本文描述了其示例性配置。這些可配置單元之各者都包含一配置儲存,其包括一組暫存器或正反器,其代表運行程式的設定或序列,並且可以包括巢狀環圈的數量、每個迴圈迭代器的限制、每個階段要執行的路由及/或指令,包括輸入和輸出介面的階段、運算元的來源及網路參數。配置檔案可以包括如本文所述的查找表的條目。
此外,這些可配置單元之各者都包含一配置儲存,其包括一組暫存器或正反器,其儲存可用於追蹤巢狀迴圈或其他情況中的進度的狀態。配置儲存中的配置檔案包含表示每個執行程式的元件的初始配置或起始狀態的位元流。此位元流稱為位元檔案。程式加載是基於位元檔案的內容設定可配置單元陣列中的配置儲存,以允許元件執行程式(即,機器),包括利用虛擬化邏輯2797的程式的過程。程式加載可能還需要加載所有的PMU記憶體。
陣列級網路包括互連陣列中可配置單元的鏈接。陣列級網路中的鏈接包括一或多種,在此情況下為三種的實體匯流排:塊級(chunk-level)向量匯流排(例如,128位元的資料)、字級純量匯流排(例如,32位元的資料)、及多位元級控制匯流排。例如,交換單元2911和2912之間的互連2921包括具有向量匯流排寬度為128位元的向量匯流排互連、具有純量匯流排寬度為32位元的純量匯流排互連、及控制匯流排互連。
三種物理匯流排不同之處在於所傳輸的資料粒度。在一個實施例中,向量匯流排可以運載一包括16位元組(=128位元)的資料的塊作為其負載。純量匯流排可以具有32位元負載,並且運載純量運算元或控制資訊。在使用此系統實現的一些機器中,可以使用浮點資料格式來表示資料,其包括標準或非標準格式。示例性格式包括FP32和BF16等。可以理解的是,在純量和向量匯流排上運載的資料值的數量是資料值之編碼格式的函數,FP32每值利用32位元,而BF16每值使用16位元。
控制匯流排可以攜帶控制交握,諸如權杖和其他線路。向量和純量匯流排可進行分封交換,包括指示每個封包目的地的標頭和其他資訊,例如當亂序接收到封包時可被用來重組檔案的序列號。每個封包標頭可以包含目的地識別符,其識別目的地交換單元的地理座標(例如,陣列中的列及行),以及介面識別符,其識別用來到達目的地單元之目的地交換器上的介面(例如,北、南、東、西等)。舉例來說,控制網路可以基於裝置中的時序電路進行電路交換。配置加載/卸載控制器可以針對每個128位元的配置資料塊(例如,位元流)產生標頭。在標頭匯流排上將標頭發送給可配置單元陣列中的每個可配置單元。
在一個範例中,在向量匯流排上傳輸具有128位元的資料塊,該向量匯流排將該塊作為向量輸入提供給可配置單元。向量匯流排可以包括128條負載線路,以及一組標頭線路。標頭可以包括用於每個塊的序列ID,其可以包括: •     用以指示塊是高速暫存記憶體或是配置儲存資料的一位元。 •     形成塊號碼的位元。 •     指示行識別符的位元。 •     指示列識別符的位元。 •     指示元件識別符的位元。
對於加載操作,配置加載控制器可以按照從N-1至0的順序,將數量N的塊發送到可配置單元。例如,若N=6,則以塊5->塊4->塊3->塊2->塊1->塊0的最高有效位元優先順序來發送塊。(應注意,此最高有效位元優先順序導致塊5在陣列配置加載控制器的分發序列的第0輪中被發送)。對於卸載操作,配置卸載控制器可以將卸載資料亂序寫入記憶體。對於加載和卸載兩操作,在可配置單元中的配置資料(例如,位元流)儲存中的配置串聯鏈中的移位是從LSB(最低有效位元)到MSB(最高有效位元)、或者是MSB先出。
圖29B示出連接陣列級網路中之元件的示例性交換單元。如圖29B之範例中所示,交換單元可以有8個介面。交換單元的北、南、東、西介面係用於交換單元之間的連接。交換單元的東北、東南、西北、西南介面係分別用於建立與PCU或PMU實例的連接。每個磚片象限中的一組2個交換單元連接到位址產生單元與合併單元(AGCU),其包括多個位址產生(AG)單元及連接到多個位址產生單元的合併單元(CU)。合併單元(CU)在AG之間進行仲裁,並處理記憶體請求。交換單元之八個介面中的每個介面可以包括向量介面、純量介面、及控制介面,以與向量網路、純量網路、及控制網路進行通訊。
在配置之後執行機器的期間,可以經由一或多個單元交換器及該些單元交換器之間的一或多條鏈路將資料發送給可配置單元,其使用陣列級網路上的向量匯流排及該一或多個交換單元的向量介面。
在本文所述的實施例中,在配置磚片之前,可以使用相同的向量匯流排從配置加載控制器,經由一或多個單元交換器和該些單元交換器之間的一或多條鏈路,將配置檔案或位元檔案發送至可配置單元,其使用陣列級網路上的向量匯流排及該一或多個交換單元的向量介面。例如,可將單元檔案中特定於可配置單元PMU 2941的配置資料塊(例如,位元流)從配置加載/卸載控制器2901發送到PMU 2941,其係經由配置加載/卸載控制器2901與交換單元2911的西(W)向量介面之間的鏈路2920、交換單元2911及交換單元2911的東南(SE)向量介面與PMU 2941之間的鏈路2931。
在此範例中,將AGCU之其中一者配置成主AGCU,其包括配置加載/卸載控制器(例如,2901)。主AGCU實現了一暫存器,透過該暫存器,主機(2720,圖27)可以經由匯流排系統將命令發送到主AGCU。主AGCU控制對磚片中的可配置單元陣列的操作,並且實施一程式控制狀態機,以基於其從主機接收的命令透過寫入到暫存器來追蹤磚片的狀態。針對每一狀態轉換,主AGCU透過菊鏈命令匯流排(圖30)向磚片上的所有元件發出命令。該些命令包括程式重置命令及程式加載命令,該程式重置命令用以重置磚片中可配置單元陣列中的可配置單元,以及該程式加載命令用以將配置檔案加載到可配置單元。
主AGCU中的配置加載控制器負責從記憶體讀取配置檔案,並且將配置資料(例如,位元流)發送到磚片的每一可配置單元。主AGCU可以較佳地以頂級網路的最大吞吐量從記憶體讀取配置檔案。主AGCU透過陣列級網路上的向量介面將讀取自記憶體的資料依據本文所述的分發順序發送到相對應的可配置單元。
在一個實施例中,以一種可以減少可配置單元內的佈線要求的方式,將元件中保存要在配置加載過程中加載、或者要在配置卸載過程中卸載的單元檔案的配置及狀態暫存器以串聯鏈連接,並且可以經由透過串聯鏈移位位元的過程進行加載。在一些實施例中,可能會有一條以上的並聯或串聯配置的串聯鏈。例如,當一可配置單元在一個匯流排週期中從主AGCU接收到128位元的配置資料(例如,位元流)時,該可配置單元以每週期1位元的速率通過其串聯鏈移位此資料,其中移位器週期可以以與匯流排週期相同的速率運行。可配置單元將耗費128個移位器週期,將128個配置位元載滿透過向量介面接收的128位元的資料。128位元的配置資料(例如,位元流)被稱為塊。可配置單元可能需要多個資料塊來加載其所有的配置位元。
可配置單元透過多個記憶體介面(2750,圖27)與記憶體介接。可以使用多個AGCU來存取每個記憶體介面。每個AGCU都包含一可重配置純量資料路徑以產生對外接記憶體的請求。每個AGCU都包含FIFO(用於組織資料的先進先出緩衝器),以緩衝來自外接記憶體的輸出命令、資料以及輸入響應。
圖30是示出示例性可配置單元3000,諸如型樣計算單元(PCU)的方塊圖,其配置有虛擬化邏輯2797。可配置單元可以與純量、向量及控制匯流排介接,在此範例中使用三組相應的輸入及輸出(IO):純量輸入/輸出、向量輸入/輸出及控制輸入/輸出。純量IO可被用來傳輸單一字組的資料(例如,32位元)。在諸如單元配置加載過程中接收配置資料(例如,位元流)以及在多個PCU之間的長管線進行配置之後的操作過程中傳送和接收資料的情況下,向量IO可被用來傳輸資料塊(例如,128位元)。控制IO可被用來在控制線上傳輸信號,諸如執行可配置單元的開始或結束。控制輸入可以由控制塊1190接收,而控制輸出由控制塊3090提供。
在此範例中,每個向量輸入使用向量FIFO塊3060中的向量FIFO來進行緩衝,該向量FIFO塊3060可以包括一或多個向量FIFO。同樣的,在此範例中,每個純量輸入使用純量FIFO 3070來進行緩衝。使用輸入FIFO可解耦資料生產者和消費者之間的時序,並且透過使其對輸入延遲失配更強健來簡化可配置單元間的控制邏輯。
可配置單元包括塊3080中的多個可重配置資料路徑。可配置單元中的資料路徑可被組織為多階段(階段1…階段N)、可重配置SIMD(單指令、多資料)管線。被推送到可配置單元中的配置串聯鏈的資料塊包括用於可配置單元中每個資料路徑的每個階段的配置資料(例如,位元流)。配置資料(例如,位元流)儲存3020中的配置串聯鏈經由線路3021連接到塊3080中的多個資料路徑。
組織為多階段管線的可配置資料路徑可以在個別階段包括多個功能單元(例如,3081、3082、3083、3084、3085、3086)。計算單元或部分計算單元可以在一多階段管線或多個多階段管線中的個別階段的多個功能單元中實現。包括虛擬化邏輯2797的電路可以在多個功能單元和多個記憶體單元中實現。功能單元中的輸入暫存器可以暫存來自純量FIFO 3070或向量FIFO 3060或來自多階段管線中的先前階段的輸入。在多階段管線中之一階段的功能單元可以執行例如邏輯移位、算術函數、比較、邏輯運算等的功能,並且產生輸出。
可配置單元陣列中的可配置單元包括配置資料(例如,位元流)儲存3020(例如,串聯鏈),用以儲存單元檔案,其包括特定於相應可配置單元的配置資料(例如,位元流)的複數塊(或其他大小的子檔案)。可配置單元陣列中的可配置單元各包括單元配置加載邏輯3040,其經由線路3022連接到配置資料(例如,位元流)儲存3020,用以執行單元配置加載過程。單元配置加載過程包括經由匯流排系統(例如,向量輸入)接收特定於可配置單元的單元檔案的塊,以及將接收到的塊加載到可配置單元的配置資料(例如,位元流)儲存3020。被加載到配置資料(例如,位元流)儲存3020的單元檔案可以包括配置資料(例如,位元流),其包括運算碼及路由配置,用於電路(例如,模組)在多個功能單元和多個記憶體單元中實現虛擬化邏輯2797,如本文所述。
在此範例中,在複數個可配置單元中之可配置單元中的配置資料(例如,位元流)儲存包括鎖存器的串聯鏈,其中鎖存器儲存控制可配置單元中的資源配置的位元。配置資料(例如,位元流)中的串聯鏈可以包括串聯連接的用於配置資料(例如,位元流)的移位暫存器鏈和用於狀態資訊及計數器值的第二移位暫存器鏈。
輸入配置資料(例如,位元流)3010可被提供給向量FIFO作為向量輸入,然後被傳送到配置資料(例如,位元流)儲存3020。可以使用向量輸出從配置資料(例如,位元流)儲存3020卸載輸出配置資料3030。
CGRA使用菊鏈式完成匯流排以指示加載/卸載命令何時被完成。主AGCU透過菊鏈式命令匯流排將程式加載和卸載命令傳送到可配置單元陣列中的可配置單元。如在圖30的範例中所示,控制塊3090、菊鏈式完成匯流排3091和菊鏈式命令匯流排3092被連接到菊鏈邏輯3093,其與單元配置加載邏輯3040通訊。菊鏈邏輯3093可以包括加載完成狀態邏輯,如下所述。下面進一步說明菊鏈式完成匯流排。顯然命令和完成匯流排的其他拓樸也是可能的,但未於此處說明。
圖31是示出示例性可配置單元3100,諸如型樣記憶體單元(PMU)的方塊圖,其配置有虛擬化邏輯2797(即,讀取就緒(ready-to-read)信用計數器、寫信用計數器和用於操作它們的流控制邏輯)。PMU可以包含高速暫存記憶體3130,其與旨在用於高速暫存記憶體3130的位址計算(RA,WA)和控制(WE,RE)的可重配置純量資料路徑3120耦合,以及PCU中所使用的匯流排介面。
匯流排介面可以包括純量輸入、向量輸入、純量輸出及向量輸出,可用於提供寫入資料WD。可將資料路徑組織為多階段可重配置管線,包括功能單元FU的階段以及暫存功能單元之輸入和輸出的相關聯管線暫存器PR。PMU可被用來儲存分散在整個可重配置單元陣列的晶載記憶體。
高速暫存記憶體內置有多個SRAM庫(例如,3131、3132、3133、3134)。用於高速暫存記憶體內之SRAM庫的分庫(banking)及緩衝邏輯3135可被配置成以數種分庫模式操作,以支援各種存取型樣。如本文描述的計算單元可以包括儲存在高速暫存記憶體3130中、來自配置檔案或來自其他來源的查找表。在如本文描述的計算單元中,純量資料路徑3120可以將用於尋址實現函數f(I)的查找表的原始輸入值I的一部分轉換成SRAM高速暫存記憶體3130所使用的尋址格式,添加適當的偏移等,以使用該輸入值I的該部分來讀取儲存在高速暫存記憶體3130中的查找表的條目。每個PMU可以包括寫入位址計算邏輯和讀取位址計算邏輯,其將寫入位址WA、寫入致能WE、讀取位址RA及讀取致能RE提供給分庫緩衝邏輯3135。基於本地FIFO 3111和3112的狀態以及外部控制輸入,控制塊3115可被配置成透過致能適當的計數器3116來觸發寫入位址計算、讀取位址計算或二者。可編程計數器鏈3116(控制輸入、控制輸出)及控制塊3115可以觸發PMU執行。
這是用於實現如本文所述之計算單元的可配置處理器的配置的一個簡化範例。可以以其他方式配置可配置處理器以實現計算單元。其他類型的可配置處理器可以以其他方式實現計算單元。此外,在一些範例中可以使用專用邏輯、或專用邏輯和指令控制處理器的組合來實現計算單元。 其他實現
在公開技術的各種實現中,當兩個或更多個可重配置處理器協同執行應用程式時,該兩個或更多個可重配置處理器獨立且分別地配置(例如,透過運行時處理器)有相同的配置檔集合。在一種實現中,當配置有給定配置檔集合的第一可重配置處理器開始執行該給定配置檔集合中的配置檔及/或其功能及/或其資料,並且需要同時也配置有給定配置檔集合的第二可重配置處理器執行該給定配置檔集合中的某些配置檔及/或其功能及/或其資料時,則第二可重配置處理器等待來自第一可重配置處理器的信號。信號的範例包括控制信號,其指示靜止(quiesce)條件之後的斷點/檢查點,諸如美國非臨時專利申請案號16/504,627,於2019年7月8日申請,名稱為“QUIESCE RECONFIGURABLE DATA PROCESSOR”,(代理人案號為SBNV 1008-1)中描述的一種。
接著,在從第一可重配置處理器接收到信號和相應的應用程式資料和張量狀態之後,第二可重配置處理器使用它自己的被獨立且分別地配置有的給定配置檔集合的副本,開始執行某些配置檔及/或其功能及/或其資料。在一些實現中,在第一可重配置處理器處產生檢查點,將檢查點傳輸到第二可重配置處理器,第二可重配置處理器加載檢查點並開始執行某些配置檔及/或其功能及/或其資料。
加速深度學習的第一範例是使用使用深度學習加速器來訓練類神經網路。加速深度學習的第二範例是使用深度學習加速器來操作經訓練的類神經網路以執行推論。加速深度學習的第三範例是使用深度學習加速器來訓練類神經網路,隨後使用任何一或多個經訓練的類神經網路、來自其之資訊及其之變體執行推論。
類神經網路的範例包括全連接類神經網路(FCNN)、遞迴類神經網路(RNN)、卷積類神經網路(CNN)、長短期記憶體(LSTM)網路、自動編碼器、深度信念網路及生成對抗網路(GAN)。
訓練類神經網路的範例是確定與類神經網路相關聯的一或多個權重,諸如透過經由深度學習加速器的硬體加速。進行推論的範例是使用經訓練的類神經網路,透過基於與經訓練的類神經網路相關聯的權重處理輸入資料來計算結果。如本文中所使用的,術語‘權重’是例如在各種形式的類神經網路處理中使用的‘參數’的範例。例如,一些類神經網路學習旨在確定參數,其然後可用於使用這些參數來執行類神經網路推論。
類神經網路根據包括神經元層的資料流圖來處理資料。刺激(例如,輸入資料)是由神經元的輸入層接收,並且資料流圖的計算結果(例如,輸出資料)是由神經元的輸出層提供。神經元的示例性層包括輸入層、輸出層、線性整流函數層、全連接層、遞迴層、長短期記憶體層、卷積層、核心層、丟棄層(dropout layer)及池化層。類神經網路是有條件地及/或選擇性地被訓練,受硬體加速的影響。在訓練後,類神經網路是有條件地及/或選擇性被用於推論,受硬體加速的影響。
深度學習加速器的範例是一或多個相對專用的硬體元件,其與一或多個軟體元件結合操作,以比使用相對不那麼專用的硬體元件相對更有效地訓練神經網路及/或使用神經網路執行推論。相對專用的硬體元件的一些實現包括一或多個硬體邏輯電路元件,諸如電晶體、電阻器、電感器、電容器、導線互連、組合邏輯(例如,NAND、NOR)閘、鎖存器、暫存器檔、記憶體陣列、記憶體陣列的標籤、內容可定址記憶體、快閃記憶體、ROM、DRAM、SRAM、序列器/解除序列器(SerDes)、I/O驅動器等,諸如透過定製邏輯、合成邏輯、ASIC及/或FPGA來實現。一些相對不那麼專用的硬體元件包括傳統的CPU和傳統的GPU。
儲存的範例是能夠保留狀態資訊的一或多個元件,例如,以下任一或多者:正反器、鎖存器或鎖存器陣列、暫存器或暫存器陣列、暫存器檔、記憶體、記憶體陣列、磁性儲存裝置、光學儲存裝置、SRAM、DRAM、快閃記憶體和ROM。在各種實施例中,儲存是揮發性的(例如,SRAM或DRAM)及/或非揮發性的的(例如,快閃記憶體或ROM)。
積體電路(IC)的範例是在半導體材料的一或多個部分,諸如單晶粒或複數個晶粒,上實現的電路集合。晶粒之3D堆疊的範例是提供晶粒之間(例如在與晶粒之主要表面正交的維度上)的機械連接及/或電連接以形成一單元。機械連接及/或電連接以各種方式實現,例如,透過一或多個焊球、微凸塊及矽通孔。晶粒之2.5D堆疊的範例是透過公用元件(例如,矽中介層)提供晶粒之間的機械連接及/或電連接以形成一單元,其中每個晶粒和公用基板之間的機械連接及/或電連接是在與晶粒之主要表面正交的維度上。機械連接及/或電連接以各種方式實現,例如,透過一或多個焊球、微凸塊及矽通孔。特殊應用積體電路(ASIC)的一範例是為特定用途設計的IC。
封裝的範例是能夠機械地保持及/或包含一或多個電子電路及/或電互連一或多個電子電路的元件。示例性電子電路是半導體材料的一或多個部分、一或多個晶粒、一或多個中介層及一或多個基板中的任意一或多個。封裝的特定範例包括BGA封裝及其變體。一些IC包括封裝。基底的範例是機械地保持及/或電互連一或多個晶粒及/或一或多個封裝的元件。基底的特定範例是PCB,用以例如保持和互連封裝。基底的另一特定範例是矽中介層,用以例如耦接一或多個3D堆疊的或2.5D堆疊的晶粒。基底的另一特定範例是例如保持複數個晶粒的封裝。
如本文中所使用的,SmartNIC是網路介面元件或網路適配器,其直接對資料封包進行操作,獨立於主機核心資源並運行作業系統網路堆疊,從而減少對主機處理資源的爭用,減少網路延遲,並增加網路資料封包吞吐量。SmartNIC透過從系統主機CPU卸載某些IP網路協定堆疊處理任務來實現這一點,充當某種協同處理器。在一些實施例中,SmartNIC安裝在插入背板的印刷電路卡上,而在其他實施例中,其被整合到亦支持主機CPU或一或多個RP的主機板上。在又一實施例中,SmartNIC可以整合到具有RP或其他元件的單一晶片上。
在本文中的一些實施例中,SmartNIC裝備有完全可編程的硬體實現,支持為網路處理任務配置的作業系統。硬體實現可包括單晶片系統(SoC)、FPGA、ASIC、CGRA或其他可編程處理器電路,諸如ARM系列。SmartNIC可以支持專用硬體功能集合加速特定類別的功能(例如,Open vSwitch資料平面)或執行通用封包和流過濾、封包檢驗、流表處理、加密、RDMA、VXLAN覆蓋及NVMe-oF功能。
SmartNIC可包括主機核心旁路邏輯,用於向/從節點和其他主機發送和接收封包。SmartNIC可以透過提供一組包含用於輸入和輸出的共用記憶體的物理位址來實現這一點。在一態樣中,可重編程處理器可以使用如前所述的頭和尾指標的組合直接存取SmartNIC FIFO緩衝器集合以推送和拉取資料,從而繞過主機核心並且減少至少一跳。主機還可以透過寫入物理位址直接與SmartNIC介接而無需驅動器控制網路流,進一步提高理論吞吐量。
在一態樣中,SmartNIC可以提供配置介面以指定複數個I/O共享記憶體緩衝器的物理位址,該複數個I/O共享記憶體緩衝器包括FIFO佇列和映射表用於包含封包緩衝的記憶體區域。在另外的態樣中,SmartNIC可以耦接節點、可重編程處理器(RP)和主機,以從共享記憶體緩衝器擷取封包緩衝並透過網路將封包緩衝從主機、節點或RP DRAM發送至SmartNIC共享記憶體緩衝器。
網路組構是複數個節點和主機的介面。SmartNIC提供主機和網路之間或者節點和網路之間的連接。一節點包括複數個可重編程處理器(RP),並且在與SmartNIC介接時繞過主機。SmartNIC可以透過網路連接到第一物理/鏈路連接,將SmartNIC與主機、節點或RP耦接。SmartNIC連接到第二物理/鏈路連接,將SmartNIC耦接到網路。連接到網路組構介面的物理/鏈路連接各者可以是任何類型,例如,乙太網路、光纖通道、InfiniBand、PCIe等等。物理/鏈路連接也可以是無線媒體。SmartNIC包括媒體存取控制器(MAC),用以與物理/鏈路連接介接以將資料封包路由到RP和主機。
示例性SmartNIC可以使用FPGA來實現用以執行網際網路路由的通訊協定,例如傳送控制協定(“TCP”),並且可以包括PCIe高速網路介面、共享物理記憶體和FPGA。FPGA可以將SmartNIC控制器實現為主機、節點、RP和位在“物理層”的網路之間的橋接器,以直接整合到資料路徑中。SmartNIC可以進一步實現開放系統互連(“OSI”)模型,該模型是一概念模型,其透過將通訊系統劃分為抽象層來表徵和標準化通訊系統的內部功能。物理抽象層定義了裝置和傳輸媒體(諸如銅纜或光纖電纜)之間的電氣和物理規範。這包括針腳佈局、電壓、線路阻抗、電纜規格、信號時序、集線器、轉發器、網路適配器、主機匯流排適配器等。物理層執行的主要功能和服務包括:(1)建立和終止與通訊媒體的連接;(2)爭用解決;(3)流控制;及(4)調變以將使用者設備上的數位資料轉換成在通訊通道上傳輸的相應信號。這些是透過物理電纜(諸如銅或光纖)或者透過無線電鏈路運行的信號。
例如,網路流可以是傳送控制協定/網際網路協定(TCP/IP)流。SmartNIC可以透過包含媒體/物理鏈路的網路/光纖與節點或主機交換網路封包,並且可以透過至主機NIC的面向主機的媒體/物理鏈路與它們各自的節點或主機交換網路封包。應用程式用來交換資料的網路流可以通過SmartNIC,如下所述。基於主機的應用程式可以具有應用程式層資料,以傳送例如遠端呼叫調用。主機遠端呼叫調用可以包括用於通過作業系統應用程式設計介面(API)的命令或資料(例如,串流或插座)作為對SmartNIC上的物理位址的寫入,命令或資料在該物理位址進入網路堆疊。API將命令或資料寫入共用記憶體FIFO的物理位址並放置在一或多個傳輸封包(例如,TCP/IP封包)內。接著,將傳輸封包封裝成網路封包(例如,以主機的網際網路協定(IP)位址為發送者的TCP/IP封包),然後加載到一或多個物理層幀(例如,乙太網路幀)的負載中。然後該些幀通過網路組構的第一個物理/鏈路連接。在第二SmartNIC上,上述過程相反,其中網路封包需要解封裝,資料最終抵達主機、節點或RP的物理位址。
透過對個別計算和記憶體元件進行編程,應用程式以分散形式在可重配置處理器上執行,並且可非同步地接收、處理和發送資料並控制資訊。在可重配置處理器中,計算可以作為深度、巢狀資料流管線執行,其非常有效地利用巢狀平行性和資料局部性。這些資料流管線包含數個計算階段,其中每個階段以不規則記憶體存取型樣從一或多個輸入緩衝器讀取資料、對資料執行計算同時使用一或多個內部緩衝器來儲存和提取中間結果並且產生要寫到一或多個輸出緩衝器的輸出。這些管線的結構取決於表示應用程式的控制和資料流圖。管線可以任意地嵌套並且在彼此之內循環。
應用程式/圖/應用程式圖/使用者應用程式/資料流圖/控制流圖/資料和控制流圖/模型/深度學習應用程式/深度類神經網路/程式/程式圖像/工作/任務包含高階程式。高階程式是例如使用PyTorch、TensorFlow、ONNX、Caffe和Keras等的深度學習框架,以C、C++、Java、JavaScript、Python和Spatial等的程式語言編寫的原始碼。高階程式可以實現AlexNet、VGG Net、GoogleNet、ResNet、ResNeXt、RCNN、YOLO、SqueezeNet、SegNet、GAN、BERT、ELMo、USE、Transformer和 Transformer-XL等機器學習模型的計算機結構和演算法。在一個範例中,高階程式可以實現具有多個處理層的卷積神經網路,使得每個處理層可以包括一或多個巢狀迴圈。高階程式可以執行不規則的記憶體操作,其涉及存取輸入和權重,並執行輸入和權重之間的矩陣乘法。高階程式可以包括具有高迭代計數的巢狀環圈和迴圈體,其加載來自前一處理層的輸入值,並將其與後一處理層的權重相乘,以產生輸出給後一處理層。高階程式可以具有最外層迴圈體的迴圈級平行性,其可以使用粗粒度管線操作進行利用。高階程式可以具有最內層迴圈體的指令級平行性,其可以使用迴圈展開、SIMD向量化和管線操作來進行利用。
關於應用程式之高階程式中的迴圈,直接嵌套在迴圈體中的迴圈被稱為外父迴圈的子迴圈。若一迴圈沒有任何子迴圈,即,其體內沒有任何巢狀迴圈,則稱為最內層迴圈。若一迴圈沒有任何父迴圈,即,其並未嵌套在另一迴圈的體內,則其為最外層迴圈。不完美巢狀迴圈的主體包含非迴圈的語句(例如,基元算術、邏輯和關係運算)及一或多個子迴圈的混合體。不完美巢狀迴圈中的平行性可以在任何或所有迴圈級別中、以及在包含迴圈體的運算中使用。平行性可以以多種形式出現,諸如細粒度和粗粒度管線平行、資料平行和任務平行。
在一些實現中,軟體開發套件(SDK)(或資料流圖產生器)產生應用程式之高階程式的資料流圖。SDK將高階程式的輸入行為描述轉換為中間表示,諸如資料流圖。這可以包括程式碼最佳化步驟,如錯誤資料相依刪除、死碼刪除和常數折疊。資料流圖對高階程式的資料和控制相依性進行編碼。
資料流圖包含節點和邊。(為了避免與在本文中使用術語‘節點’來指稱處理節點產生混淆,圖節點在本文中有時被稱為‘頂點’)。圖節點或頂點可以表示計算操作和記憶體分配。邊可以表示資料流和控制流。在一些實現中,高階程式中的每個迴圈都可以表示為資料流圖中的控制器。資料流圖支持分支、迴圈、函數呼叫和控制相依性的其他變體。在一些實現中,在產生了資料流圖之後,可以執行專注於迴圈轉換的額外分析或最佳化,諸如迴圈展開、迴圈管線化、迴圈分裂/融合及迴圈分塊(loop tiling)。
SDK還支持在多級別,例如,從高階深度學習框架到C++和組合語言,對可重配置資料流資源池中的可重配置處理器進行編程。在一些實現中,SDK允許程式設計師開發直接在可重配置處理器上運行的程式碼。在其他實現中,SDK提供包含預定義函數的程式庫,如在可重配置處理器上創建、執行和分析資料流圖所需的線性代數運算、逐元素張量運算、非線性及縮減。SDK通過應用程式介面(API)與深度學習框架進行通訊。
資料流圖中的頂點表示操作單元,並且可配置為生產者以產生用於執行應用程式的張量,以及配置為消費者以消耗用於執行應用程式的張量。生產者和消費者沿著資料連接非同步地傳輸資料。張量包括一或多個向量。
「編譯器」將資料流圖轉換為特定於硬體的配置,並且在由編譯器114產生的執行檔中指定。在一種實現中,編譯器將資料流圖劃分為記憶體分配和執行片段,其中在執行檔中指定這些劃分。執行片段表示對資料進行運算。執行片段可以包括程式中表示工作量的部分。執行片段可以包括由一組迴圈、一組圖形節點或需要同步的一些其他工作單元所包含的計算。根據程式的需要,執行片段可以包括固定的或可變的工作量。執行片段中的不同片段可以包括不同的計算量。執行片段可以表示平行模式或部分的平行模式,並且可以非同步地執行。
在一些實現中,將資料流圖劃分為執行片段包括將資料流圖之巢狀迴圈的至少一個最內層迴圈內的計算視為單獨的執行片段。在其他實現中,將資料流圖劃分為執行片段包括將圍繞資料流圖之最內層迴圈的外迴圈的計算視為單獨的執行片段。在不完美巢狀迴圈的情況下,迴圈體內直到該迴圈體內巢狀迴圈之起始為止的運算都被組合在一起作為單獨的執行片段。
記憶體分配表示在晶片上(on-chip)及/或晶片外(off-chip)記憶體中為實現資料流圖所需的資料創建邏輯記憶體空間,並且在執行檔中指定這些記憶體分配。記憶體分配定義了硬體資源(功能單元、儲存器或連接元件)的類型和數量。主記憶體(例如,DRAM)是可以進行記憶體分配的晶片外記憶體。高速暫存記憶體(scratchpad memory)(例如,SRAM)是可以進行記憶體分配的晶片上記憶體。可以針對各種存取型樣和佈局進行記憶體分配的其他記憶體類型包括唯讀查找表(LUT)、固定大小的佇列(例如,FIFO)及暫存器檔案。
編譯器將記憶體分配綁定到虛擬記憶體單元以及將執行片段綁定到虛擬計算單元,並且在執行檔中指定這些綁定。在一些實現中,編譯器將執行片段劃分成記憶體片段和計算片段,並且在執行檔中指定這些劃分。記憶體片段包括引導至記憶體存取的位址計算。計算片段包括父執行片段中的所有其他運算。在一種實現中,每個執行片段被分解成複數個記憶體片段和恰好一個計算片段。在一種實現中,編譯器使用反向資料流分析來執行劃分,使得在記憶體存取中使用的位址的輸入遞迴地標記,直到編譯器達到常數值或(界限)迴圈/型樣迭代器之任一者。單一執行片段可以產生一或多個記憶體片段,這取決於有多少記憶體存取存在於原始迴圈體中。在多個記憶體存取共享同一記憶體定址邏輯的情況下,位址計算可能會被重複以從同一執行片段創建多個記憶體片段。
執行片段的記憶體片段被配置成編索引到資料結構。至少一個記憶體片段編索引到記憶體分配之一的邏輯記憶體空間中的資料結構。每個計算和記憶體片段都保留有關其迴圈體直接包含相應執行片段中的運算的所有迴圈的資訊。在一種實現中,這對應於將每個迴圈的迴圈迭代器的計算複製到每個計算和記憶體片段。這種複製允許每個片段保留與原始程式相同的迭代行為,同時還允許迴圈迭代器的分散式計算。
編譯器將使用諸如Keras和PyTorch等常用開源套裝軟體開發的應用程式轉譯為可重配置處理器規格。編譯器產生配置檔案,其具有用於放置位置和路由資料及控制網路的配置資料(例如,位元流)。在一種實現中,這包括透過將單元放置及路由到處理器陣列上來分配實體記憶體和計算單元的坐標和通訊資源,同時最大化頻寬和最小化延遲。 處理節點
圖32示出一示例性處理節點3201,其包括一主機3210和八個RP 3212,編號為RP0到RP7,全部透過PCIe匯流排3220互連。其他實現可以包括其他數量的RP 3212,諸如4個或16個。在一些實現中,配置位元檔可以將其中一個RP指定為“主(master)”RP,並且將某些高階責任分配給它。在其他實現中,位元檔可以將所有RP配置為資料流圖或圖片段的相同實例。在其他實現中,配置位元檔可以使用不同的資料流圖或圖片段來配置部分或所有的RP。處理節點3201還包括一SmartNIC 3222,其具有連接到PCIe匯流排3220的一個埠3224,以及連接到LAN 3228的第二個埠3226。本實施例中的LAN 3228是乙太網路,但在其他實施例中,其可以是其他類型的LAN,諸如WiFi或InfiniBand。在其他實施例中,處理節點包括多於一個SmartNIC連接到PCIe匯流排。例如,另一實施例可以為節點中的每個RP提供一個SmartNIC,在這種情況下,每個SmartNIC可以物理上位於與其相對應的RP相鄰(或者在同一主機板或同一晶片上)的位置。參見圖48作為範例,如下所討論。此外,在各種實施例中,每個SmartNIC可以有多個PCIe埠及/或多個LAN(或其他)埠。
圖33是圖32中SmartNIC 3222的方塊圖。(在適當的實施例中,SmartNIC 4822可以是相同的)。其包括PCIe介面3310用於與PCIe匯流排3220通訊以及LAN介面3312(在圖33中顯示為更具體的乙太網路介面)用於與LAN 3228通訊。PCIe匯流排3220通常根據PCIe協定承載資料和其他信號,並且SmartNIC 3222包括IP協定處理設施3231,用以根據IP標準封裝此類資料並透過LAN介面3222將其轉發到LAN 3228。IP協定處理設施3231亦從透過LAN介面3222傳入的IP封包中提取此類資料,並透過PCIe介面3310經提取出來的資料轉發到PCIe匯流排3220。
PCIe匯流排3220還根據點對點(P2P)訊息協定承載訊息。P2P訊息協定,如本文中所使用的術語,是促進在對等點之間傳遞訊息的協定層,而不需要使用中央伺服器電腦或伺服器軟體。使用P2P協定的進行通訊的對等點在應用程式中是大致相等的參與者。對等點既是資源供應者又是資源消耗者,這與傳統的客戶端-伺服器模型相反,在傳統的客戶端-伺服器模型中,資源的消耗和供應是分開的。
SmartNIC 3222的一個目的是將P2P對等點的網路透過LAN 3228透明地擴展到另一處理節點。SmartNIC 3222因此還包括封裝/解封裝設施3230。封裝/解封裝設施3230從PCIe匯流排3220接收P2P訊息,將其解封裝以提取訊息,並將其重新封裝在資料塊中用於透過LAN 3228傳輸。其類似地從LAN 3228接收P2P訊息,將其解封裝以提取P2P訊息,並將其重新封裝在PCIe匯流排封包中用於PCIe匯流排3220。每個資料封包都包括在系統中唯一識別任意RP的目的地位址(其可能被分為兩個或更多個分量),因此封裝/解封裝設施3230能夠從PCIe匯流排3220上傳入的封包確定要將哪個乙太網路MAC位址應用於其在LAN 3228上發出的重新封裝的資料塊(反之亦然)。封裝/解封裝設施3230透過參考先前透過配置位元檔被編程到SmartNIC 3222的位址轉譯表來執行此位址轉譯。為了簡化和加速處理節點之間的LAN通訊,系統可以使用OSI協定堆疊的第2級協定,而不是諸如IP或TCP的第3/4級協定。
SmartNIC 3222還包括資料流卸載控制器3232、本地記憶體池3234及一或多個FPGA核心3236。資料流卸載控制器3232包含如上文關於RP所述的緩衝器,並且包括以如上文關於RP所述的方式透過P2P協定與其他RP交互的邏輯。因此,它與所有RP一樣參與相同的P2P訊息對話。因此除了作為訊息轉譯器以從本地PCIe匯流排轉發P2P訊息到LAN 3228用於傳遞到不同的處理節點之外,SmartNIC 3222(以及配置到FPGA計算核心3236中的任意端點,若有的話)也可以是來自本地RP(透過PCIe匯流排3220)和來自外部RP(透過LAN 3228)的P2P訊息的目的地。其亦可產生發往本地RP(透過PCIe匯流排3220)和來自外部RP(透過LAN 3228)的自己的P2P訊息。其亦可產生發往可透過LAN 3228到達的另一個SmartNIC的自己的P2P訊息,並且也可以是透過另一個SmartNIC產生並透過LAN 3228到達的P2P訊息的目的地。如同RP一樣,SmartNIC 3222(以及配置到FPGA計算核心3236中的任意端點,若有的話)被分配了P2P協定位址空間中的位址,並且該位址空間內的RP位址的唯一性也被傳遞到SmartNIC中的任意端點。本地記憶體池3234中的位置也被分配了在P2P協定位址空間內唯一的位址。在本文的實施例中,PCIe匯流排上的位址和P2P協定位址空間中的位址之間存在1:1的關係(儘管具體的位址值可能不同)。
在一個實施例中,封裝/解封裝設施3230、IP協定處理設施3231及資料流卸載控制器3232中的一或多者可以在硬體邏輯中實現,包括作為FPGA 3236的一部分。在替代實施例中,它們之中的一或多者可以透過軟體或韌體指令控制的處理器來實現。並且,如本文中所使用的,PCIe協定、乙太網路協定、P2P訊息協定、P2P透過PCIe(P2P-over-PCIe)及P2P透過乙太網路(P2P-over-Ethernet)均被視為是不同的協定。如果多個協定在其各自的協定堆疊的至少一層不同,則本文中將該多個協定視為是“不同的”。
FPGA計算核心3236可以與圖33中所示的一或多個其他元件整合在同一晶片上,或者它可以是單獨的積體電路裝置,諸如舉例來說,Intel Agilex F系列和I系列FPGA以及Xilinx Virtex Ultrascale+FPGA中的一或多個。本地記憶體池3234可以例如包括現成的DRAM陣列。SmartNIC 3222本身在P2P協定中具有唯一的位址,因此P2P訊息可被定向到SmartNIC本身而不是另一個RP。資料流卸載控制器3232從傳入的P2P封包(傳入自PCIe匯流排3220或自LAN 3228)中的目的地位址確定目的地是SmartNIC 3222還是相反介面。若其目的地是SmartNIC 3222,則資料流卸載控制器3232將提取的訊息轉發到FPGA計算核心3236。SmartNIC 3222,更具體來說是FPGA核心3236,被實現為被用來配置整體系統以進行演算法的資料流處理的同一資料流圖中的頂點或圖片段。
由於FPGA中在編程期間被配置以執行所欲功能的基礎構建塊比CGRA中的那些構建塊更小且更通用,因此某些功能在FPGA中可以更有效率地執行。特別是,粗粒度可配置單元在一個實施例中具有兩種特定類型:型樣計算單元(PCU)和型樣記憶體單元(PMU),被排列成二維陣列。每個PCU具有一可重配置管線,其具有多階段的SIMD功能單元,支持跨SIMD通道位移和縮減。每個PMU具有被分庫的高速暫存記憶體和專用的定址邏輯和位址解碼器。這些單元透過具有單獨匯流排級和字級資料以及位元級控制網路的經管線化的靜態混合互連相互通訊。例如,編譯器能夠將內迴圈計算映射到一個PCU,使得大多數運算元可以在功能單元之間直接傳輸而無需高速暫存記憶體存取或PCU間通訊。晶片上、已分庫的高速暫存記憶體可配置成支持串流和雙緩衝存取。晶片外記憶體控制器支持串流(叢發)型樣和分散/集中存取二者。並且,晶片上控制羅級可配置成支持巢狀型樣。
架構中的階層旨在簡化編譯器映射和提高Map、FlatMap、Fold及HashReduce之特定常見平行型樣的執行效率,但也可以將裝置配置為實現其他型樣。圖34示出這些型樣之各者的概念範例,其中顯示計算同時在四個索引上運行。這些型樣之各者將一或多個函數和描述型樣運行之值範圍的索引域作為輸入。這些型樣之各者構建一輸出並讀取自任意數量的輸入集合。
Map使用函數f為每個索引創建單一輸出元素,其中f的每次執行都保證是獨立的。Map的輸出元素的數量與輸入迭代域的大小相同。基於f中讀取的集合數量和每次讀取的存取型樣,Map可以透過軟體配置以捕獲集中的行為、標準逐元素(element-wise)映射、壓縮(zip)、窗口化(windowed)的過濾器或其之任意組合。
FlatMap使用函數g為每個索引產生任意數量的元素,其中函數執行一樣是獨立的。所產生的元素被連接成扁平輸出。實現FlatMap的功能元件也可被配置成實現條件式資料選擇(例如,SQL中的WHERE、Haskell或Scala中的過濾器),因為這些功能元件是FlatMap的特殊情況,其中g產生零個或一個元素。
Fold首先作用如同Map,使用函數f為每個索引產生單一元素,然後使用關聯組合函數r縮減這些元素。
HashReduce使用函數k和v為每個索引分別產生雜湊鍵和值。使用關聯組合函數r將具有相同對應鍵的值即時縮減到單一累加器。HashReduce可以是密集的,其中鍵的空間預先可知並且所有的累加器可以靜態分配,或者也可以是稀疏的,其中型樣可在運行時產生任意數量的鍵。直方圖創建是HashReduce的一常見簡單的範例,其中鍵函數給出直方圖箱(bin),值函數被定義為始終為“1”,且組合函數是整數加法。
為了支持上面的平行型樣,每個PCU被設計成在應用程式中執行單一、最內層平行型樣。PCU資料路徑被組織成多階段的、可重配置的SIMD管線。每個SIMD通道的每個階段包括功能單元(FU)和相關聯的管線暫存器(PR)。FU執行32位元的字級算術和二進制運算,其包括支援浮點和整數運算。由於單一管線階段中的FU在SIMD中運行,因此每個階段只需要單一配置暫存器。每個FU的結果被寫入其相關聯的暫存器。每個通道中的管線暫存器跨管線階段鏈接在一起,以允許實時值在同一通道內的多個階段之間傳播。FU之間的跨通道通訊是使用兩種類型的PCU內網路捕獲的:簡化樹網路,其允許將多個通道的值縮減為單一純量,以及移位網路,其允許使用PR作為跨階段的滑動窗口,以利用模板應用程式中的重新使用。兩種網路都使用PR內的專用暫存器來最小化硬體開銷。
PCU使用三種輸入和輸出(IO)與全局互連介接;純量、向量和控制。純量IO被用來傳輸單一字組的資料,諸如Fold的結果。每個向量IO允許在PCU中每通道傳輸一個字,並用於諸如讀取和寫入PMU中的高速暫存記憶體以及跨多個PCU之間的長管線傳輸中間資料等情況。每個向量和純量輸入都使用小型FIFO來進行緩衝。控制IO被用來傳輸控制信號,諸如開始或結束執行PCU、或者被用來指示背壓(backpressure)。
計數器的可重配置鏈產生型樣迭代索引和控制信號以協調執行。當控制塊致能計數器之一時,PCU執行開始。基於應用程式的控制和資料相依性,程式可以將控制塊配置成組合來自本地FIFO和全局控制輸入二者的多個控制信號以觸發PCU執行。使用可重配置組合邏輯和用於狀態機的可編程上下(up-down)計數器來實現控制塊。
PMU可類似地以粗粒度元件配置。每個PMU包含程式設計師管理的高速暫存記憶體,其與可用於位址計算的可重配置純量資料路徑耦合。PMU被用來在整個裝置中分配晶片上記憶體。高速暫存記憶體由與PCU通道數量相匹配的多個SRAM庫構建。高速暫存記憶體周圍的位址解碼邏輯可以由程式配置為以條帶式分庫模式操作,以支持密集資料結構上常見的線性存取型樣,或者支持FIFO模式,以支持類似於滑動窗口的存取型樣。位址解碼邏輯也可被配置為複製模式,其中內容在所有記憶體庫中複製。複製模式提供多個讀取位址通道,以支援平行化的晶片上集中運算。
為了支援粗粒度的管線,每個PMU高速暫存記憶體可被配置成以上面任一種分庫模式操作的N個緩衝器。透過將每個SRAM庫中的位址空間分割成N個不相交的區域來實現N個緩衝器。使用寫和讀狀態資訊,將適當的偏移加到每個分庫的本地位址來存取正確的資料。
可編程計數器鏈和控制塊觸發類似於PCU的PMU執行。每個PMU通常包含來自生產者型樣的寫位址計算邏輯,以及來自消費者型樣的讀位址計算邏輯。基於本地FIFO的狀態和外部控制輸入,控制塊可被配置為透過致能適當的計數器來觸發寫位址計算、讀位址計算或兩者。
FU之間的互連也可以由程式配置。關於CGRA實施例中的功能單元的結構和可配置性的更多資訊可見於本文中的其他地方以及Prabhakar等人,名稱為“Plasticine: A Reconfigurable Architecture for Parallel Patterns”,ISCA ’17,2017年6月24-28日,加拿大安大略省多倫多,之上述併入的出版物。
傳統的FPGA也可被配置成實現上面的型樣,但通常能源效率要低得多。另一方面,FPGA具有更小和更通用的構建塊,因此在實現不適合如上所述之平行計算的編程範例的功能時更加靈活。FPGA因此更擅長實現如加法、減法、乘法和除法等簡單算術運算、任意狀態機、從本地記憶體中的任意位置移入和移出資料等功能及/或其他功能,如定製加密、壓縮、雜湊、轉換或在CGRA中不容易或有效地以SIMD方式實現的簡化功能。
因此,在SmartNIC 3222上包括FPGA計算核心和本地記憶體致能配置程式將有限的計算核心的執行分配給SmartNIC,從而自RP卸載資料流圖片段,或在RP上補充它們的執行。SmartNIC 3222能夠產生/回應於P2P流量、卸載核心、組構最佳化引擎、支持資料流控制/資料請求、資料流卸載及在FPGA計算核心和RP之間協調P2P控制/資料請求。本地記憶體池3234可用作計算核心3236的高速暫存記憶體。其亦可由系統中的任意裝置存取,包括任意RP和任意其他的SmartNIC。以此方式,CGRA和FPGA可以相互依賴地協作以進一步最佳化資料流圖的執行。
處理圖範例
圖35示出來自示例性處理圖的一區段。處理圖被用來實現類神經網路,諸如CNN、FCNN、RNN、LSTM網路、自動編碼器、深度信念網路、GAN及/或之類的。圖35示出處理圖的一個示例性區段3500,其包括實現卷積運算的處理節點3508、3512和實現最大池化(max-pooling)運算的處理節點3516。處理圖的區段3500包括一系列的處理節點或層。個別處理節點或層執行對應的運算。例如,該系列的層中的多層包括卷積層、最大池化層、最小池化層、平均池化層、非線性層、正規化層、丟棄層、連接層、轉置層、全連接層、SoftMax層及/或損失層中的一或多者。圖35的示例性區段3500包括兩種示例性種類的層,諸如卷積層和最大池化層。實現運算的術語“層”和實現運算的“處理節點”可互換使用。
例如,該系列的處理節點包括輸入處理節點3508,被配置成接收輸入張量3502。區段3500的輸入處理節點3508將輸入張量3502與核心(未示出)進行卷積,以產生中間張量3510。區段3500的中間處理節點3512將中間張量3510與另一核心(未示出)進行卷積,以產生另一中間張量3514。區段3500的輸出處理節點3516對中間張量3514執行池化運算(諸如最大池化運算),以產生輸出張量3520和索引張量3522。可以注意到,圖35中所示的處理圖的示例性區段3500僅是範例,並非旨在限制本公開的範圍。例如,雖然區段3500被示出包括三個處理節點,但在另一範例中,區段3500可以包括更多(或更少)數量的處理節點。例如,區段3500可以包括更多數量的卷積層。此外,雖然在處理圖的區段3500中僅示出卷積和最大池化層,但也可以包括其他類型的層,諸如實現ReLU的層、平均池化層、全連接層及/或類似的。並且,處理圖可以包括更簡單的功能,諸如簡單算術運算、讀取和寫入記憶體等。另外,雖然圖35示出應用程式的處理圖的單一區段,但應用程式的處理圖可以包括串行或平行地管線化、或者二者之組合的多個此種區段。
如所述,軟體編譯器被用來產生應用程式之高階程式的資料流圖。編譯器將高階程式的輸入行為描述轉換成中間表示,諸如資料流圖。這可包括程式碼最佳化步驟,如錯誤資料相依性消除、死碼消除及常數摺疊。資料流圖編碼資料並且控制高階程式的相依性。
圖36示出可用於編譯器的整體架構。可以看出,編譯器3610包括常見開源機器學習框架,諸如PyTorch和TensorFlow的使用者入口點。也可以導入來自其他框架和工具的序列化圖。這些輸入被提供給資料流圖分析器3612,其接受來自框架的模型,然後分析模型以提取資料流圖。針對每個運算子,確定計算和通訊需求,因此可以在稍後分配適當的RP資源。分析器利用空間編程模型來確定運算子和通訊型樣到RP的最有效映射。借助模型架構和RP架構二者的知識,分析器還可以執行高階、特定於域的最佳化,例如節點融合。分析器還確定應將應用程式的哪個片段分配給FPGA,若系統中存在有一個的話。資料流圖分析器3612的輸出是有註釋的資料流圖3614,其用作被傳遞給資料流編譯器3616的第一中間表示(IR)。
對於需要運算子但在現有框架中不可用的情況,可以透過高階、張量索引符號API來描述新的運算子。模板編譯器3618分析運算子並為RP產生最佳化的資料流實現,稱為空間模板3620。所產生的模板包括使新的運算子能夠以與內建框架運算子相同的方式直接從應用程式碼中使用的綁定。若分析器3612確定要在FPGA上而不是在RP上執行運算子,則對運算子的編譯由FPGA編譯器3622執行。
資料流最佳化器、編譯器及組譯器3616接收有註釋的資料流圖並執行高階轉換,如元管線化、多區段支持和平行化。其亦理解RP硬體屬性並執行低階轉換,主要是透過將圖映射到物理RP和FPGA硬體上來放置和路由,然後輸出可執行的運行時配置位元檔3624。在一個實施例中,位元檔可以包含用於RP的程式碼以及指向用於FPGA硬體之位元檔的指標,因為FPGA硬體編譯過程(P&R、細粒度編程)可能與RP編譯過程不同。如前所述,空間編程方案被用來確定RP資源的最有效位置。 配置卸載
一旦配置位元檔準備就緒,可將其加載到系統中以配置所有的RP和FPGA在運行期間執行應用程式。特別是,配置檔被儲存在記憶體中,並且透過平行和串行技術的組合傳輸到可重配置的處理器。可配置單元包括使用例如串行的鎖存器鏈來實現的配置資料儲存,以儲存配置資料的單元檔。可配置單元特有的單元檔可以包括配置資料的複數個子檔案。在本文描述的範例中,子檔案由具有適合使用匯流排系統進行有效分發的大小的資料“塊(chunk)”組成。
每個可配置單元,包括FPGA核心3236,各可以包括用以執行單元配置加載過程的邏輯,該過程包括透過匯流排系統接收可配置單元特有的單元檔的子檔案,以及將接收到的子檔案加載到可配置單元的配置儲存中。在一些實施例中,複數個可配置單元中的可配置單元在配置之後的執行期間使用匯流排系統中的路由,該些路由也被用於配置加載過程中。
可以將單元檔組織成包括附數個有序的子檔案。在一些實施例中,不同可配置單元特有的單元檔可以具有不同數量的有序的子檔案。可配置單元陣列的配置檔被安排為使得單元檔的子檔案與其他單元檔之具有相同順序的其他子檔案交錯排列,並且被安排為使得配置檔中的子檔案的位置表示子檔案陣列中的可配置單元及其在可配置單元所特有的單元檔中的順序。
陣列配置加載過程的範例透過將子檔案發送到複數個可配置單元,以N輪的分發序列(R(i)輪,i=0到N-1)來執行。在每一輪R(i)中,過程透過匯流排系統將一個順序為(i)的子檔案傳送到具有包括多達(i+1)個子檔案的單元檔的可配置單元。
可配置單元中的配置資料儲存可以包括串行鏈,並且單元配置加載過程可以透過在一個匯流排週期內從匯流排系統接收在一輪分發序列中的可配置單元特有的單元檔的所有或部分第一子檔案,並且在隨後的匯流排週期中、在接收下一輪分發序列中的第二子檔案之前,開始將接收到的第一子檔案推入串行鏈,並且在稍後的匯流排週期內從匯流排系統接收下一輪分發序列中的第二子檔案,在將較早接收到的子檔案推入串行鏈之後,開始在匯流排週期內將接收到的第二子檔案推入串行鏈來執行。在分發序列的某幾輪中,第一子檔案在由可配置單元接收到複數個有序的子檔案中的第二子檔案之前,由可配置單元中的單元配置加載過程消耗。
系統可以包括多於一種類型的可配置單元,並且不同類型的可配置單元的單元檔可以包括不同數量的配置資料的子檔案。例如,第一類型的可配置單元的單元檔包括Z1個塊,而第二類型的可配置單元的單元檔包括Z2個塊,其中Z1小於Z2。配置加載過程可以包括擷取配置檔中包括在R(i)輪中要分發的第一和第二類型的所有可配置單元的單元檔的子檔案(i)的的區段,(i)從0到Z1-1,然後擷取配置檔中包括在R(i)輪中要分發的第二類型的所有可配置單元的單元檔的子檔案(i)的區段,(i)從Z1到Z2-1。可以將此協定擴展到在其單元檔中具有不同數量的子檔案的任意數量類型的可配置單元。
在啟動陣列配置加載過程的一種技術中,可以從主機過程接收識別配置檔在記憶體中的位置的配置加載命令,並且回應於該命令,過程產生一或多個記憶體存取請求。隨著配置檔的請求部分被返回,可以執行分發序列。
可以將複數個單元檔的子檔案以匹配分發序列的交錯方式排列在配置檔中。配置檔的此種排列能夠使配置加載過程透過子檔案在配置檔中的位置表示配置單元以及每個子檔案在複數個有序子檔案中的位置。陣列配置加載過程可以包括基於子檔案在配置檔中的位置將子檔案路由到可配置單元。
在本文描述之範例中的可配置單元陣列中的可配置單元包括以在陣列配置加載邏輯處開始和結束的菊鏈連接的個別加載完成狀態邏輯。在使用菊鏈確認成功加載配置檔的程序中,陣列配置加載邏輯在配置檔被分發之後,在菊鏈上轉發配置加載完成信號,並且在陣列中的每個可配置單元中,當接收到來自該鏈中的前一個成員的配置加載完成信號並且完成其本身的單元檔的加載時,配置加載完成狀態邏輯在菊鏈上轉發配置加載完成信號。當檔案已被完成加載時通知主機,並且回應於此通知,主機可以將開始命令發送給一或多個可配置單元以啟動要由機器執行的功能。開始命令可以使用P2P協定發送,並且可以透過PCIe匯流排發送。
用於承載配置檔區段的匯流排系統可以與本文他處描述的用於承載P2P訊息的通訊網路相同或者實質上重疊。
圖37示出配置檔的一個示例性組織。其他組織也可以使用,也可以被安排為適合加載和卸載配置檔的特定協定。在參考圖37所述的範例中,可配置單元陣列中的可配置單元包括交換器(Switch)、PCU、PMU、AGCU及FPGA。這些可配置單元之各者包含一組暫存器,其代表運行程式的設定或順序。這些暫存器包括定義包含其之可配置單元的操作的資料,諸如巢狀迴圈的數量、每個迴圈迭代器的限制、每個階段要執行的指令、運算元的來源、輸入和輸出介面的網路參數。此外,每個配置檔可以包括資料,以在一組計數器中設定上下文,該組計數器追蹤其在每個巢狀迴圈中的進度。
在另一範例中,FPGA單元可能不包含子檔案,並且其配置加載過程可能與前面不同。
可執行的程式包含表示執行程式的每個可配置單元的初始配置、或起始狀態的位元流。此位元流在本文中被稱為位元檔,或者稱為配置檔。程式加載是基於配置檔的內容,在可配置單元中建立配置儲存,以允許所有可配置單元執行程式的過程。程式卸載是從可配置單元卸載配致儲存,並組合在本文中被稱為卸載配置檔的位元流的過程。在本文描述的範例中,卸載配置檔具有與用於程式加載的配置檔相同的排列塊(chunk)或子檔案。
配置檔包括用於可配置單元陣列中的每個可配置單元的配置資料的複數個塊,這些塊在配置檔中以匹配它們將被分發的順序的方式排列。配置檔的此種組織能夠使陣列配置加載過程基於配置檔中塊的位置來將塊路由到可配置單元。
如圖37中所示,配置檔包括用於複數個可配置單元中的每個可配置單元的單元檔的複數個塊,單元檔具有多達M(在此範例中Z5=7)個子檔案,其在單元檔中具有順序(i)。在圖37中,M是7,並且塊從第一到第七排序(即,第一到第七個塊對應於此索引中的塊(0)到(6))。對於塊進行排列,使得對於加載或卸載配置檔中的所有單元檔之順序(i)((i)從0到M-1)的所有子檔案被儲存在記憶體中位址空間的相對應區塊(i)中,(i)從0到M-1。順序(0)的塊被儲存在區塊(0)中,其包括位址A0到A1-1。本範例中用於交換單元的順序(0)的塊位於區塊(0)內的一組連續位址中。用於PCU的順序(0)的塊位於區塊(0)內的一組連續位址中。用於PMU的順序(0)的塊位於區塊(0)內的一組連續位址中。用於AGCU的順序(0)的塊位於一組連續位址中。用於FPGA的順序(0)的塊位於一組連續位址中。順序(1)的塊儲存在區塊(1)中,其包括位址A1至A2-1。本範例中用於交換單元的順序(1)的塊儲存在區塊(1)內的一組連續位址中。用於PCU的順序(1)的塊位於區塊(1)內的一組連續位址中。用於PMU的順序(1)的塊位於區塊(1)內的一組連續位址中。用於AGCU的順序(1)的塊位於區塊(1)內的一組連續位址中。用於FPGA的順序(1)的塊位於區塊(1)內的一組連續位址中。順序3至6的塊如圖37中所示的排列,其依照區塊(2)至(6)中的型樣。
陣列可以包括多於一種類型的可配置單元,並且不同類型的可配置單元的單元檔可以包括不同數量的配置資料的塊。例如,在圖3中所示,陣列中的可配置單元的種類可以包括交換(Switch)單元、PCU(型樣計算單元)、PMU(型樣記憶體單元)、AGCU(位址產生與合併單元)和FPGA(現場可編程閘陣列)單元。
單元檔可被組織成包括複數個有序的塊(或其他大小的子檔案)。在一些實施例中,不同可配置單元所特有的單元檔可以具有不同數量的有序塊。將可配置單元陣列的配置檔安排成使得單元檔的塊與其他單元檔之具有相同順序的塊分成同一組。並且,將配置檔安排成使得塊在配置檔中的位置表示塊陣列中的可配置單元及其在可配置單元特有的單元檔中的順序。
陣列配置加載過程可以擷取配置檔的區段,其包括用於第一類型(Switch類型)、第二類型(PCU類型)、第三類型(PMU類型)、第四類型(AGCU類型)及第五類型(FPGA類型)之所有可配置單元的單元檔的塊(i),(i)從0到Z1-1(=1)。在第一輪中擷取用於五種類型之所有可配置單元的單元檔的塊(0),並且在第二輪中擷取用於五種類型之所有可配置單元的單元檔的塊(1)。在第一和第二輪之後,用於第一類型(Switch類型)之所有可配置單元的單元檔的所有(2)個塊均已被擷取。用於第一、第二、第三、第四及第五類型之所有可配置單元的單元檔分別剩餘0、1、3、4及5個塊待擷取。
然後,在第三輪中,陣列配置加載過程可以擷取配置檔的區段,其包括用於第二、第三、第四及第五類型之所有可配置單元的單元檔的塊(i)。在第三輪之後,用於第二類型(PCU類型)之所有可配置單元的單元檔的所有(3)個塊均已被擷取。用於第一、第二、第三、第四及第五類型之所有可配置單元的單元檔分別剩餘0、0、2、3及4個塊待擷取。
然後,在第四輪中,陣列配置加載過程可以擷取配置檔的區段,其包括用於第三、第四及第五類型之所有可配置單元的單元檔的塊(i)。在第四輪之後,用於第三類型(PMU類型)之所有可配置單元的單元檔的所有(4)個塊均已被擷取。用於第一、第二、第三、第四及第五類型之所有可配置單元的單元檔分別剩餘0、0、1、2及3個塊待擷取。
然後,在第五、第六及第七輪中,陣列配置加載過程可以擷取配置檔的區段,其包括用於第三、第四及第五類型之所有可配置單元的單元檔的塊(i)。在第六輪之後,用於第四類型(AGCU類型)之所有可配置單元的單元檔的所有(6)個塊均已被擷取。用於第一、第二、第三、第四及第五類型之所有可配置單元的單元檔分別剩餘0、0、0、0及0個塊待擷取。
以上述方式,陣列配置卸載過程可以繼續,直到第一、第二、第三、第四和第五類型的所有可配置單元的單元檔沒有剩餘要被擷取的塊為止。
陣列配置加載過程使用塊在配置檔中的位置所表示的位址,透過陣列級網路將配置資料的塊路由到可配置單元。在一些實施例中,配置檔的塊可能會從記憶體被無序地返回到配置加載控制器。塊在配置檔中的位置可被用來將塊路由到正確的可配置單元。由於分發序列中輪次的組織,能保證可配置單元按順序接收其單元檔的塊。
有關配置加載過程的進一步資訊可參見上述美國專利申請案號16/197,826,於2018年11月21日申請,名稱為“CONFIGURATION LOAD OF A RECONFIGURABLE DATA PROCESSOR”。注意,在FPGA是現成組件而不是為諸如本文所述的那些系統所設計的組件的實施例中,配置加載過程可以利用FPGA製造商的軟體和程序,而不是本文所述之用於配置RP的機制。 FPGA卸載的示例性使用
許多不同種類的應用程式可以利用如本文所述之FPGA的可用性來卸載資料流圖的部分以提高效率或吞吐量。例如,若深度學習應用程式包含大量要學習的參數及/或大量要在訓練中使用的資料樣本,則可能需要將這些資料儲存在儲存叢集或SQL資料庫系統中。存取此類資料可能需要過多的等待時間,若其是由RP處理的話。藉助FPGA,尤其是構建在SmartNIC上的FPGA,可以將此類I/O密集的任務卸載到FPGA,將RP的強大計算資源留給更適合的任務。作為另一範例,若應用程式需要透過不安全鏈路傳輸敏感資料,例如報告有價值但為中間的結果,或者接收此類結果,則可以將加密和解密任務卸載到FPGA。若此類任務與應用程式的主要目的關係不大,則卸載加密/解密任務到FPGA將使RP的資源留給對應用程式更核心的任務。同樣,對於FPGA而言,與SmartNIC位於同一位置是特別有用的,SmartNIC具有與節點內PCIe匯流排和外部LAN二者介接的介面。作為另一範例,若應用程式涉及處理傳入的串流資料,諸如音頻、視頻或即時資料採集資料,則可能需要在資料串流到達時,在FPGA上執行某些預處理任務,而不是使用可能較佳地用於應用程式的其他方面的RP資源。同樣,FPGA與SmartNIC同一位置是有利的,因為其具有同時與PCIe匯流排和外部LAN介接的介面。在所有這些範例中,要由FPGA執行的功能可以作為資料流圖的一部分實現,在編譯時分配給FPGA,並且在配置加載時配置到FPGA中。
並非所有的應用程式都需要運行時存取LAN,以便受益於將圖節點卸載到FPGA。圖38示出一簡單深度學習應用程式,其透過跨單一計算節點中的多個RP的資料平行實現,如先前關於圖32所述。特別是,圖式示出RP的兩個指定為RP0和RPi,其中小寫下標'i'表示標記為RPi的元件代表任何數量的RP。所有RP被配置有相同的處理圖片段,以基於訓練資料3812學習多層類神經網路中的權重。訓練資料3812已被劃分為多個訓練資料集,每個訓練資料集由各自的一個RP平行處理。例如,分區0將由RP0處理,而每個分區'i'將由各自的RPi處理。每個訓練資料分區進一步被細分為小批量的資料樣本,如下面所述。在本討論中,每當元件被給予一下標i時,其將被理解為代表參與應用程式執行的所有此類元件。
如圖32中所示,每個RP進一步透過PCIe匯流排3220上承載的P2P訊息協定與SmartNIC 3222通訊。SmartNIC 3222中的FPGA已由配置位元檔以本文描述的方式配置,以執行下面描述的功能。所有的RP被配置有相同的資料流圖片段,除了其中之一,在圖38中被指定為RP0的那個,可被視為主RP。主RP由配置位元檔進行配置以執行某些高階資料流功能,所有RP之性能針對該些高階資料流功能都無用處。
被配置到圖38之系統中的應用程式是類神經網路隨機梯度下降法(SGD)訓練應用程式,其已沿網路的前向路徑縱向地被進一步劃分為三個圖“區段(Section)”(或類神經網路層區段),編號為0、1及2。如本文所使用的術語,資料流圖的“區段”是指圖中在RP上被分配一時間片段的部分。通常,“區段”可以包括類神經網路的多個連續層,及/或類神經網路的不同分支。分區段是由編譯器執行,知悉RP可用的資源。在圖38的應用程式中,每個區段可包括內部分支,但它們被劃分為使得每個區段都需要其上游區段的結果來進行其自身的前向計算(預測計算)。類似的,在反向傳播期間,每個區段都需要由其自身的下游區段(當依據反向傳播方向觀看時是上游)針對特定RP正在處理的小批量中的每個資料樣本計算的梯度,以便執行其自身的反向計算。反向傳播不需要知道資料流之其他實例的部分結果,直到同步步驟,在該同步步驟模型參數根據由對不同小批量平行操作的所有圖實例所計算的梯度進行更新。此時,針對每個參數計算平均梯度,對所有圖實例處理的所有小批量進行平均。
注意,上面說明的SGD過程是用於計算更新的“參數”。在許多網路中,要學習的參數是類神經網路的“權重”,在上游層中的每個神經元會透過權重影響下游下一層中的每個神經元。但許多網路也包括其他可以學習的參數,諸如偏差(biases)。術語“參數”在本文中旨在是術語“權重”的概括。然而,為了討論的清楚起見,這兩個術語在本文中可以互換使用。
圖39示出資料平行的傳統實現所產生的時間進展,其中圖38的資料平行操作由主機協調的GPU執行。可以看出隨著時間進展,GPU0對區段S0執行前向處理(縮寫為FWD0),然後是FWD1,接著是FWD2。此時,GPU0針對小批量中的每個資料樣本計算損失(步驟未示出),並開始第一反向傳播步驟BWD2。與這些步驟平行,參與資料平行操作的每個其他GPU也對它們自身的小批量訓練資料執行相同的步驟序列。
然而,每個GPU可以以不同的速度執行,因此可以在不同的時間完成步驟BWD2。在時間步驟5,每個GPU通知主機它們已完成它們各自的步驟BWD2,然後主機使它們各者將其針對區段S2中的各個參數計算的梯度傳輸到所有其他的GPU(SYNC2)。例如,主機可以將此命令寫入GPU控制暫存器或GPU正在監控的儲存位置。當交叉傳輸正在進行時,每個GPU執行其各自針對區段S1的反向傳遞(BWD1)並在完成時通知主機。在時間步驟6中,主機使每個GPU將其針對區段S1中的各個參數計算的梯度傳輸到所有其他的GPU(SYNC1)。當交叉傳輸正在進行時,每個GPU執行其各自針對區段S0的反向傳遞(BWD0)並在完成時通知主機。在時間步驟7中,主機使每個GPU將其針對區段0中的各個參數計算的梯度傳出到所有其他的GPU(SYNC0)。
GPU無法繼續全歸約(All-Reduce,AR)步驟,因為通常它們必須等待所有的交叉傳輸先完成。因此,每個GPU在閒置等待主機通知所有的SYNC步驟已完成時,都會丟失一個時間步驟。然後每個GPU可以繼續其全歸約操作以計算關於區段S2中各參數的平均梯度(時間步驟8中的步驟AR2)。類似地,每個GPU接著執行其全歸約操作以計算關於區段1中各參數的平均梯度(時間步驟9中的步驟AR1),然後每個GPU執行其全歸約操作以計算關於區段0中各參數的平均梯度(時間步驟10中的步驟AR0)。若在之後進行三個最佳化步驟(OPT2、OPT1、OPT0),則在傳統實現中總共需要13個時間步驟來完成一次參數更新。同樣重要的是,由於主機協調所有的同步步驟,因此在傳統方法中會產生大量的控制和網路開銷。可以使用技術來加速過程,但其中許多技術甚至需要主機更多的參與,因而使控制和網路開銷更加嚴重。
圖40示出使用SmartNIC 3222上的FPGA 3236來協調SYNC步驟以及執行全歸約步驟二者,從而自RP卸載耗時的處理步驟之改良實施所產生的時間進展。
在圖40中,步驟FWD0、FWD1、FWD2及BWD2如圖39中所示。最佳地,FWD0在FWD1開始之前處理整個小批量,以此類推FWD2。然而,與圖39的GPU實施例不同,在運行時不涉及任何主機來設定和觸發這些步驟中的每一步驟。
此外,不需要主機來協調如圖39中的SYNC步驟。相反,資料流圖已預先被配置到每個RP中,以透過在PCIe匯流排3220上直接連接到SmartNIC的P2P訊息通知FPGA。然後,當RP計算BWD1時,FPGA將各個RP計算的梯度直接從RP的記憶體讀取到本地記憶體池3234。這也已由資料流圖預先配置到FPGA中,並透過資料的到達而非來自主機CPU的任何信號而觸發。因此SYNC2和AR2步驟皆由FPGA執行,與RP中的BWD1步驟平行,並且SYNC1和AR1步驟皆由FPGA執行,與RP中的BWD0步驟平行。因此,在圖39中GPU執行AR步驟所需的三個時間步驟在圖40中被消除了。FPGA甚至可以被配置為關於區段S2中的各參數,在從RP接收到梯度時,即時合計該些梯度,從而即時執行全歸約。此種操作不會產生額外的控制和網路開銷,因為此種操作已經預先被配置到FPGA中。
圖41示出進一步改良實現所產生的時間進展,這在FPGA比RP足夠快的情況下是有利的。圖41與圖40的相似之處在於被配置到各個RP中和各個FPGA中的資料流管線能夠在FPGA中執行SYNC2和AR2,與RP執行BWD1平行。但是,圖41的不同之處在於FPGA在RP執行BWD1時還執行最佳化步驟OPT2。例如,最佳化是後處理步驟,用以調整學習率或者以其他方式幫助演算法克服鞍點。可以使用多種最佳化步驟,諸如透過引用併入本文之Sebastian Ruder的梯度下降最佳化演算法概述(An Overview Of Gradient Descent Optimization Algorithms),arXiv:1609.04747v2 [cs.LG] (2016)中所述的那些。其中一些需要保持從一個訓練時期到下一個訓練時期之依據最佳化器的動量、速度或其他值。這些可以在SmartNIC FPGA或本地記憶體池中維護。
同樣,與圖39的GPU實施例不同,在運行時不涉及主機來設定和觸發圖41中的每個步驟。也不需要任何主機來協調如圖39中的SYNC、AR或OPT步驟。相反,資料流圖已預先被配置到每個RP中,以透過在PCIe匯流排3220上直接連接到SmartNIC的P2P訊息通知FPGA。然後,在RP計算BWD1時,FPGA將各個RP計算的梯度直接從RP的記憶體讀取到本地記憶體池3234。這也已由資料流圖預先配置到FPGA中,並透過資料的到達而非來自主機CPU的任何信號而觸發。因此SYNC2、AR2和OPT2步驟均由FPGA執行,與RP中的BWD1步驟平行,並且SYNC1、AR1和OPT1步驟均由FPGA執行,與RP中的BWD0步驟平行。因此,與圖40的序列相比,消除了三個時間步驟,而與圖39的序列相比,消除了六個時間步驟。
注意,上面說明的某些SYNC和AR步驟是由FPGA執行,與圖40和41中的某些BWD步驟“平行”。如本文中所使用的,若第一步驟、階段或區段在時間上與第二步驟、階段或區段重疊,則認為兩個步驟或管線階段或資料流區段彼此“平行”執行。也就是說,第二步驟、階段或區段在第一步驟、階段或區段完成之間開始。
還注意到,僅管圖32中顯示了主機3210,但圖38中沒有顯示主機。這是因為雖然主機3210可以連接到PCIe匯流排3220,但主機並不控制RP或FPGA的任何操作,一旦這些操作開始了之後。在RP及/或SmartNIC之間傳遞的任何訊息或資料也不會通過主機。圖40和41中顯示的所有步驟都預先被配置到RP和FPGA中,並且透過接收到足夠的資料以開始步驟、或來自發送者的顯式完成符記,而非透過任何主機的命令而觸發。主機3210可以在圖40和41的步驟之前和之後參與,諸如記錄一些參數更新以供稍後分析,並且在一些實施例中,將各個RP引導至下一個小批量進行處理。主機3210也可以是啟動配置加載過程的配置加載控制器。但是,一旦針對特定的小批量開始圖40或41的過程,其會在沒有主機干預的情況下運行至完成。 FPGA卸載的示例性使用–多節點系統
圖42示出合併多個處理節點3201的示例性資料中心4210,每個處理節點如上面關於圖32所描述的。示出了四個處理節點,編號為0-3。如上面關於圖32所述,每個處理節點3201包括各自的主機3210和八個(舉例來說)編號為RP0到RP7的RP 3212,其透過各自的PCIe匯流排3220互連。單一處理節點內的RP和其他單元在本文中有時被稱為對彼此而言是“本地的”,而在不同處理節點中的單元在本文中有時被稱為對彼此而言是“外來的”。
主機在圖42中被給予與它們所屬的節點編號相對應的下標(例如,主機0、主機1、主機2及主機3)。每個處理節點3201還包括各自的SmartNIC 4222,其具有連接到各自處理節點中的本地PCIe匯流排3220的一個埠4224,以及連接到LAN 3228的第二個埠4226。和主機一樣,SmartNIC在圖42中也被給予與它們所屬的節點編號相對應的下標(例如,SmartNIC0、SmartNIC1、SmartNIC2及SmartNIC3)。圖42中的LAN 3218是乙太網路,但在其他實施例中,其可以是其他類型的LAN,諸如WiFi或InfiniBand。並且,在不同實施例中,LAN可以用各種拓樸來構建,包括全部透過單一第二層交換器互連。然而,在圖42的實施例中,LAN由四個單獨的區段構成,以環形拓樸從一個SmartNIC連接到下一個SmartNIC。圖42中的各個乙太網路埠4226被認為具有兩個子埠,以便支持此種拓樸。(其他實現可以具有更多或更少的子埠,根據虛要給定相對於小批量執行時間和吞吐量的參數大小)。具體而言,SmartNIC0具有一個乙太網路子埠連接到SmartNIC3和另一個乙太網路子埠連接到SmartNIC1;SmartNIC1具有一個乙太網路子埠連接到SmartNIC0和另一個乙太網路子埠連接到SmartNIC2;SmartNIC2具有一個乙太網路子埠連接到SmartNIC1和另一個乙太網路子埠連接到SmartNIC3;以及SmartNIC3具有一個乙太網路子埠連接到SmartNIC2和另一個乙太網路子埠連接到SmartNIC0。為了簡化討論,圖42中的所有乙太網路區段在本文中有時被統稱為單一LAN或乙太網路4228。
系統4210中的所有處理節點中的可重配置元件由配置加載過程進行配置,如上面關於圖32所描述的。在一個實施例中,主機3210中的一個充當所有處理節點3201的配置加載控制器,而在另一時實施例中,主機3210中的每一個充當僅用於駐留在其自己的處理節點3201中的那些可重配置元件的配置加載控制器。在又另一實施例中,圖42中未示出的單獨成員充當所有處理節點3201的配置加載控制器。其他變形對讀者來說將是顯而易見的。
在一些實現中,配置位元檔可以指定主機3210之一作為主要主機,及/或可以指定各個處理節點3201中的RP之一作為該節點的主要RP。配置位元檔可以將某些高階職責分配給這樣的主要RP或主要主機。在其他實現中,位元檔可以將一或多個處理節點中的所有RP配置為資料流圖或圖片段的相同實例。在其他實現中,配置位元檔可以為部分或所有的RP配置不同的資料流圖或圖片段。主機也可以與其他主機相似或不同地被編程。
圖43示出一個類似於圖38的SGD深度學習應用程式,其透過跨圖42中的多個處理節點中的多個RP的資料平行來實現。特別是,該圖式示出了處理節點中被指定為處理節點0和處理節點k的兩個處理節點,其中小寫下標'k'指示被標記為處理節點k的元件代表任意處理節點。所有處理節點3201中的所有RP都配置有相同的處理圖片段,以基於訓練資料3812學習多層類神經網路中的權重。訓練資料3812已被劃分為多個訓練資料集,每一個訓練資料集由各自的處理節點平行處理。各個分區在處理節點內還進一步被劃分以供該處理節點中的個別RP處理。
圖43的深度學習應用程式具有與上面關於圖40所解釋的SYNC/AR卸載相同的省時優勢,差異處在於各個SYNC/AR步驟包括來自所有處理節點3201中的所有RP的貢獻。如下文進一步描述的,圖43的應用程式大致由本地SmartNIC操作,每個SmartNIC將來自所有本地RP的所有梯度累積到本地SmartNIC的記憶體,然後所有的SmartNIC參與環形全規約(Ring All-Reduce)過程。接著由FPGA從產生的平均梯度獨立地計算各個更新後的權重(或其他參數),並且廣播至各個SmartNIC的本地RP以供下一個訓練時期使用。圖44-47中更詳細地說明發生的過程,這可以統稱為被配置到圖42中的各種單元中的資料流圖的說明。
圖44示出被配置到各RP的資料流圖片段。(或者,可以視為示出被配置到RP中的虛擬機器中的資料流圖片段)。雖然圖片段可以在本文中以流程圖中的步驟的形式示出,並且可以在下面的討論中被稱為步驟,但應理解的是,它們實際上代表了資料流管線中的階段。因此它們有時在本文中可互換地被稱為步驟或階段。此外,如本文所使用的,如本文所使用的管線可以包括一或多個“子管線”,其本身可被視為依靠它們自身能力的管線。並且,管線階段的子階段亦被視為本身構成管線的一階段。
最初,在步驟4410中,配置加載控制器使用圖中所示的管線配置各個RP。在一些實施例中,加載的配置還可以將一組初始的網路參數加載到各個RP,或者配置可以從中提取它們的位址。在一些實施例中,加載的配置還可以將RP將從其訓練的所以資料樣本加載到各個RP的本地記憶體,或者配置可以從中提取它們的位址。
在步驟4412中,RP擷取第一小批量的資料樣本以供本地訓練使用。
在步驟4414中,RP透過網路的第一經配置的前向區段(區段S0)處理小批量中的所有資料樣本,以從區段S0產生輸出。然後將輸出傳遞到步驟4416,該步驟透過網路的第二經配置的前向區段(區段S1)處理小批量中的所有資料樣本,以從區段S1產生輸出。然後將輸出傳遞到步驟4418,該步驟透過網路的第三經配置的前向區段(區段S2)處理小批量中的所有資料樣本,以從區段S2產生輸出。這些是預測,小批量中的每個資料樣本一個張量。
在步驟4420中,資料流要求RP針對每個資料樣本計算損失(誤差)。作為範例,資料流圖可被配置成將針對特定資料樣本的損失計算為每個經預測的輸出與其在資料樣本中指定的個別目標值之差的平方和。
步驟4420亦將輸出節點差量傳遞給反向傳遞區段S2,步驟4422。步驟4422針對小批量中的每個資料樣本,計算關於網路的區段S2中的各個可學習參數的損失梯度。步驟4422還針對每個資料樣本(區段S1輸出節點差量)計算關於各個區段S1輸出的損失梯度。然後RP遵循經配置的資料流,並且將區段S2參數梯度傳遞給梯度SYNC2/AR2步驟4424。如上面關於圖40所提及的,區段S2梯度的同步協調和歸約實際上是由本地SmartNIC 4224而非當前的RPi執行。就被配置到RP上的資料流部分而言,此步驟主要涉及透過本地PCIe匯流排3220將步驟4422中計算的參數梯度經由P2P訊息發送到本地SmartNIC 4226。或者,其可以單純涉及將P2P訊息經由本地PCIe匯流排發送到SmartNIC,指示參數梯度是可用的,因而SmartNIC可以從RP提取它們。
在一個實施例中,圖44的管線可以停在此處並等待來自SmartNIC 4224的平均區段S2梯度值或更新後的區段S2權重,但這不是必需的,因為後續的反向傳遞階段並不需要這兩者。因此,相反的,步驟4422繼續將計算後的區段S1輸出節點差量傳遞到管線的BWD傳遞區段S1步驟4426,與發生在SmartNIC 4224上的資料收集和歸約平行。
步驟4426使用區段S1輸出節點差量來針對小批量中的各個資料樣本計算關於網路的區段S1中的各個可學習參數的參數梯度。然後RP將區段S1參數梯度傳遞到梯度SYNC1/AR1步驟4428,如上面關於梯度SYNC2/AR2步驟4424所述。BWD傳遞區段S1步驟4426還針對各個資料樣本(區段S0輸出節點差量)計算關於各個區段S0輸出的梯度損失,並繼續將它們傳遞到管線的BWD傳遞區段S0步驟4430,與發生在SmartNIC 4224上的資料收集和歸約平行。BWD傳遞區段S0步驟4430使用區段S0輸出節點差量針對小批量中的各個資料樣本計算關於網路的區段S0中的各個可學習參數的參數梯度。然後RP將區段S0參數梯度傳遞到梯度SYNC0/AR0步驟4432,如上面關於梯度SYNC2/AR2步驟4424所述。
步驟4434然後等待透過本地PCIe匯流排3220經由P2P訊息來自本地SmartNIC 4226的訊息,以指示已將在本地SmartNIC上計算的更新後的權重廣播到RP上的本地高速暫存記憶體或者附接到RP的晶片外記憶體。在步驟4436中,RP確定是否有更多的小批量已被分配給它以進行處理,若是的話,則管線重複步驟4412。
注意,RP對資料流模型進行操作,因此可能沒有任何單獨的步驟4434或4436。相反的,由於管線中的動作是由接收資料觸發,因此實現可能單純地在步驟4432之後結束管線,並且,若RP已被分配了更多小批量要處理,在本地接收到更新後的參數時觸發管線開始處的步驟4412重新開始。類似地,若RP沒有任何更多小批量要處理,則接收更新後的參數會觸發步驟4438向本地主機報告最終參數,或向主機報告完成所有分配的小批量和時期。
注意,系統中只有一個RP需要向主機報告最終參數值。在實施例中,處理節點之一(例如,圖42中的處理節點0)被指定為主節點,而RP之一(例如,圖42中的RP0)被指定為處理節點0中的主RP。然後,只有那個RP配置了步驟4438。在所有其他的RP中,如果沒有其他的小批量給RP處理,則圖44的管線單純地結束。
圖45示出由配置加載控制器配置到圖42之系統中的每個處理節點3201的SmartNIC 4224中的資料流圖片段。總而言之,在圖45的實施例中,SmartNIC累積來自其所有本地RP的梯度,然後SmartNIC與系統中其他處理節點的SmartNIC協作,以執行各種本地和的環形全歸約,其造成每個SmartNIC具有最終和的本地副本。最終和代表網路中正被訓練的每個可學習參數的總梯度或平均梯度。然後每個SmartNIC在本地更新來自平均梯度的所有參數,並且透過其自身的本地PCIe匯流排將更新後的權重廣播到其所有本地RP。
圖片段在配置位元檔中以要被寫入在SmartNIC上的FPGA中的配置位元的形式表示,該些配置位元共同使FPGA的構建區塊形成狀態機和相關聯的結構,以執行圖中所示的步驟。雖然圖片段在圖中以流程圖形式示出,但應理解的是,其在FPGA硬體中而非在由基於軟體的指令處理器執行的指令碼中實現。因此,對於適當的操作,通常可以使其執行得更快。圖片段由配置加載控制器配置到各個SmartNIC中,該配置加載控制器還將所有可學習參數的參數緩衝器配置到FPGA中,以及將其初始化為與在步驟4410中被配置到RP中相同的參數的初始值(圖44)。位元檔還將所有可學習參數的梯度緩衝器配置到各個FPGA中,並且將梯度值初始化為零。
當區段S2參數梯度可用於步驟4424中的SmartNIC時,觸發步驟4512(圖44)。在步驟4512中,區段S2梯度從各個本地RP累積到SmartNIC的本地記憶體池3234中,已在RP的管線的梯度SYNC2/AR2步驟4424期間發送。
在步驟4514中,FPGA與其他SmartNIC之各者中的FPGA協作以執行造成各個SmartNIC的本地記憶體池3234中的所有區段S2梯度的最終和的本地副本的集合體。下面更詳細地描述此步驟。
在步驟4516中,在關於區段S2梯度的全歸約完成之後,區段S1梯度從各個本地RP累積到SmartNIC的本地記憶體池3234中,已在RP的管線的梯度SYNC1/AR1步驟4428期間發送。
在步驟4518中,FPGA與其他SmartNIC之各者中的FPGA協作以執行造成各個SmartNIC的本地記憶體池3234中的所有區段S1梯度的最終和的本地副本的集合體。同樣的,下面更詳細地描述此步驟。
在步驟4520中,在關於區段S1梯度的全歸約完成之後,區段S0梯度從各個本地RP累積到SmartNIC的本地記憶體池3234中,已在RP的管線的梯度SYNC0/AR0步驟4432期間發送。
在步驟4522中,FPGA與其他SmartNIC之各者中的FPGA協作以執行造成各個SmartNIC的本地記憶體池3234中的所有區段S1梯度的最終和的本地副本的集合體。同樣的,下面更詳細地描述此步驟。
一旦跨所有的處理節點3201計算了所有的平均梯度,在步驟4524中,本地SmartNIC的FPGA從梯度緩衝器更新其本地參數緩衝器中的所有參數值。這通常涉及將各個平均梯度簡單地乘以預定的學習速率因子。此時,各個SmartNIC具有一套完整的更新後的參數值供下一個訓練時期使用。在步驟4526中,SmartNIC將其本地梯度緩衝器重新初始化為零,並且在步驟4528中,其將更新後的參數值發送到其所有的本地RP。然後FPGA閒置直到在步驟4424中用於下一個訓練時期的區段S2梯度可用於SmartNIC,並且資料流圖片段從步驟4512開始重複。 單向節點間環全歸約(All-Reduce)
圖45中的步驟4514、4518和4522中的每一個都要求對來自個別網路區段的梯度進行全歸約。在各種實施例中,可以將任何類型的集合體配置到SmartNIC中以達成此點,但在本文描述的實施例中使用具有單向環形集合體的環形全歸約。許多其他集合體方法是已知的,可以替代使用。非限制性範例包括廣播、All-Gather、歸約、全歸約、Reduce-Scatter、Scatter、Gather、All-To-All、基於樹和Neighborhood。見NCCL-Woolley.pdf,檢索自https://images.nvidia.com/events/sc15/pdfs/NCCL-Woolley.pdf,於2021年4月21日訪問,透過引用併入本文。在此,無論選擇哪種集合體,都使用訊息傳遞協定來實現,該訊息傳遞協定由配置到一或多個參與的SmartNIC中的FPGA中的控制演算法編排。
圖46A和46B(統稱圖46)是圖45中的區段Sj的單向環全歸約集合體的細節,j=2、1、0。也就是說,它代表了圖45中步驟4514、4518和4522之各者的細節,取決於j。在圖46中參考索引k(例如,SmartNIC k、梯度緩衝器區段k)來描述資料流,但在圖式中使用索引k只是為了便於描述的緊湊性。在本實施例中,SmartNIC不需要知道它們的ID編號k或者執行任何基於k的計算,因為編譯器在準備配置位元檔時預先執行了此類計算。在每個SmartNIC中配置到FPGA中的位元檔具有指向在管線的各個階段中由該特定SmartNIC讀或寫或累積的各個特定梯度緩衝器區段的硬編碼指標。此外,由於編譯器在編譯時也清楚其他SmartNIC中的哪一個可以透過SmartNIC的兩個LAN子埠中的各個埠到達,因此每個梯度傳輸的來源和目的地SmartNIC皆已透過要使用的LAN子埠的硬編碼標識預先被配置到每個SmartNIC的FPGA中。在一實施例中,由不同SmartNIC ID編號k引出的這些變化是配置到SmartNIC中的環形全歸約資料流之間的唯一差異。然而,在不同實施例中,配置位元檔可以將處理節點3201的數量、每個參與的SmartNIC的ID編號k及/或哪個LAN子埠連接到SmartNIC中的另外哪一個的指示配置到FPGA中。
將使用圖47A、47B、47C、47D、47E、47F、47G和47H(統稱圖47)中的插圖來描述單向環全歸約演算法。
最初,在編譯時,資料流編譯器已將各個SmartNIC中的梯度緩衝器分成N個緩衝器區段,其中N是參與SmartNIC的數量。在圖42的實施例中N=4。各個梯度緩衝器區段僅包括網路當前區段Sj中的1/N個梯度。在另一實施例中,FPGA可以被配置成在來自所有區段j的所有本地和已被累積到所有的本地SmartNIC中之後,執行單一環形全歸約過程以包括網路中所有參數的所有梯度。
在下面的描述中,所有NIC ID編號和梯度緩衝器區段是模數N(即,本範例中模數為4)。例如,在考慮到針對NIC k的此番描述,若k=3,則NIC k+1可意味著NIC 0,以及若k=0,則NIC k-1可意味著NIC 3。四個SmartNIC在本文中被稱為NIC 0、1、2及3,並且梯度緩衝器區段被稱為區段0、1、2及3。將理解到,與本文所述之使用上述編號系統的過程完全相同的過程可以替代地透過將不同編號分配給NIC及/或給梯度緩衝器區段來描述。替代描述的編號可能看起來與本文闡述的不同,但正在執行的實際過程將保持相同或等效,如可透過恢復到本文使用的編號系統來辨別。
圖46的資料流進行第一階段(有時在本文中稱為累積階段),接著是第二步驟(有時在本文稱為分發階段)。一般而言,累積階段的分段示出於圖46A中,而分發階段的分段示出於圖46B中。
參考管線階段4610,在演算法的第一階段中,以及如圖47A中的箭頭所示,NIC k將其第k+3個梯度緩衝器區段中的初始值發送到NIC k-1。(更明確地說,NIC0將來自其梯度緩衝器區段3的值發送到NIC3,NIC1將來自其梯度緩衝器區段0的值發送到NIC0,NIC2將來自其梯度緩衝器區段1的值發送到NIC1,以及NIC3將來自其梯度緩衝器區段2的值發送到NIC2)。這意味著NIC k亦從NIC k+1中的第k個梯度緩衝器區段接收初始值(階段4612)。(更明確地說,NIC0從NIC1的梯度緩衝器區段0接收值,NIC1從NIC2的梯度緩衝器區段1接收值,NIC2從NIC3的梯度緩衝器區段2接收值,以及NIC3從NIC0的梯度緩衝器區段0接收值)。在接收後,NIC k將接收到的值加到其第k個梯度區段的本地梯度緩衝器。因此如圖47B中所示,在階段4612之後,NIC k的區段k的梯度緩衝器現在包括來自NIC k和來自NIC k+1的相應梯度的和。NIC所有其他區段的梯度緩衝器仍然僅包含來自其自身本地RP的梯度。
接下來,在管線階段4614中,以及如圖47B中的箭頭所示,NIC k將現在在其第k個梯度緩衝器區段中的部分和發送到NIC k-1。這意味著NIC k亦從NIC k+1中的第k+1個梯度緩衝器區段接收部分和(階段4616)。在接收後,NIC k將這些值加到其第k+1個梯度區段的本地梯度緩衝器。因此如圖47C中所示,在階段4616之後,NIC k的區段k+1的梯度緩衝器現在包括來自NIC k、NIC k+1和NIC k+2的相應梯度的和。
接下來,在管線階段4618中,以及如圖47C中的箭頭所示,NIC k將現在在其第k+1的梯度緩衝器區段中的部分和發送到NIC k‑1。這意味著NIC k亦從NIC k+1中的第k+2個梯度緩衝器區段接收部分和(階段4620)。在接收後,NIC k將這些值加到其第k+2個梯度區段的本地梯度緩衝器。因此如圖47D中所示,在階段4620之後,NIC k的區段k+2的梯度緩衝器現在包括來自全部四個SmartNIC的相應梯度的和。
然後在演算法的第二階段中,參考階段4630以及如圖47E中的箭頭所示,每個NIC k將其本地梯度區段緩衝器k+2中的值(其為該區段之梯度的完整總和)發送到NIC k-1。這意味著NIC k亦從NIC k+1接收區段k+3之梯度的完整總和(階段4632)。NIC k將此寫入其之該區段的本地梯度緩衝器,覆寫先前在該處的值。結果狀態如圖47F中所示。
接下來,參考階段4634以及如圖47F中的箭頭所示,每個NIC k將其本地梯度區段緩衝器k+3中的值(其為該區段之梯度的完整總和)發送到NIC k-1。這意味著NIC k亦從NIC k+1接收區段k之梯度的完整總和(階段4636)。NIC k將此寫入其之該區段的本地梯度緩衝器,覆寫先前在該處的值。結果狀態如圖47G中所示。
最後,參考階段4638以及如圖47G中的箭頭所示,每個NIC k將其本地梯度區段緩衝器k中的值(其為該區段之梯度的完整總和)發送到NIC k-1。這意味著NIC k亦從NIC k+1接收區段k+1之梯度的完整總和(階段4640)。NIC k將此寫入其之該區段的本地梯度緩衝器,覆寫先前在該處的值。結果狀態如圖47H中所示。現在,每個NIC在其自身的梯度緩衝器中具有所有區段Sj梯度的完整總和。每個NIC現在可以更新其本地參數緩衝器中的所有參數,並將更新後的參數發送到其所有的本地RP(圖45中的階段4524和4528)。
注意在實施例中,NIC k的FPGA可被配置成同時執行步驟4610和4612,因為涉及的梯度緩衝器區段不同,並且透過其發送/接收資料的LAN子埠也不同。圖46A和46B中所有其他相對應之成對的階段也是如此。
可以針對N的廣義值重寫圖46的資料流,如下所示,所有索引算術均取模N: •    在累積階段中,針對迭代器p的每個值,p以從0到N-2的整數進行迭代,每個第k個SmartNIC透過乙太網路將來自其本地第k+p-1個梯度緩衝器區段的初始或聚合值發送到第k-1個SmartNIC。第k個SmartNIC亦透過乙太網路從第k+1個SmartNIC接收,並在其本地梯度緩衝器區段中聚合來自第k+p個梯度緩衝器區段的值。 •    在上面針對p=N-2的階段完成之後,開始分發階段。在分發階段中,針對迭代器q的每個值,q以從0到N-2的整數進行迭代,每個第k個SmartNIC透過乙太網路將其聚合值從其本地第k+q-2個梯度緩衝器區段發送到第k-1個SmartNIC。第k個SmartNIC亦透過乙太網路從第k+1個SmartNIC接收來自第k+q-1個梯度緩衝器區段的值,並將其寫入其之本地梯度緩衝器區段。
同樣的,在上面描述中使用的編號系統是為了此描述之目的而選擇的,並且僅用來以緊湊的方式識別發生什麼操作以及以什麼順序發生;編號系統本身不一定存在於配置的FPGA中。FPGA僅由配置位元檔配置為包括功能元件,當執行時,該些功能元件將按照本文描述的順序執行本文描述的操作。演算法的另一種描述很可能會使用不同的編號系統,但仍能產生被配置為按照本文描述的順序執行本文描述之操作的FPGA。
此外,應將理解的是,可以將不同的硬體功能元件實例化到FPGA中,以按照本文描述的順序執行本文描述的操作。在一個實施例中,例如,所有個別操作可以實現為階段的線性序列,不發生迭代。例如,若N=4,則配置位元檔可能配置一串3個連續的管線階段,用於執行上述用於累積階段的3個操作,接著再3個管線階段用於執行上述用於分發階段的3個操作;以及若N=5,則配置位元檔可能配置一串4個連續的管線階段,用於執行上述用於累積階段的4個操作,接著再4個管線階段用於執行上述用於分發階段的4個操作;等等。在這個實現範例中,具有不同N值的應用程式將在FPGA中實現,取決於N具有更短或更長的管線階段。
在另一實施例中,作為另一範例,配置位元檔可以配置僅單一階段用於在累積階段執行針對任何提供的p值的上述操作,以及一‘p計數器’,其迭代p並將其提供給階段以執行算術,以便迭代執行操作的正確順序。並且配置位元檔還可以配置另一單一階段用於在分發階段執行針對任何提供的q值的上述操作,以及一‘q計數器’,其迭代q並將其提供給階段以執行算術,以便迭代在分發階段執行之操作的正確順序。在這個實現範例中,管線長度可能不會隨著N值的不同而改變;不同N值之實現之間的唯一區別可能是以N值預編碼的FPGA中的單一暫存器,用於初始化兩個p和q計數器。許多其他的實現變化對讀者來說將是顯而易見的。
注意,資料平行反向傳播類神經網路學習演算法中的全歸約階段應產生由所有參與的PR針對每個可學習參數計算的平均梯度。另一方面,本文所述的演算法產生這些梯度的總和,而非平均值。假設所有RP處理的小批量尺寸相等,這不是問題,因為SmartNIC應用於每個梯度值以更新階段4514中的參數的學習率因子可以簡單地在配置位元檔中指定為相應地更小(例如,除以參與RP的總數)。在不同RP計算的梯度值可能來自不同數量的小批量或不同數量的樣本的實施例中,本方法中由SmartNIC執行的平均應該是加權平均,其中每個RP的計算梯度值與RP的梯度值所代表的樣本數成比例加權。這可以例如透過配置每個RP在將其自身的計算梯度值轉發到其個別SmartNIC之前,預先除以小批量的數量或這些值所代表的資料樣本的數量來實現。這些改編可以包括在配置位元檔中,並且不需要任何主機在運行時進行任何協作。 節點內梯度集合體(Gradient Collective)
如上所述,步驟4512(圖45)涉及將區段S2梯度從本地RP累積到本地SmartNIC的梯度記憶體中。步驟4516和4520是相似的,分別用於區段S1和區段S0梯度。與節點間集合體一樣,在各種實施例中,可以將任何類型的集合體配置到RP以及它們的本地SmartNIC中以實現此目的。集合體的選擇可以取決於參數的大小,並且可被選擇以最佳化歸約操作的平行化,使其不會成為吞吐量的瓶頸。
然而,最佳地,集合體由RP在資料可用時觸發,然後由SmartNIC編排。
在一個實施例中,每個RP透過串流P2P交易將其在當前區段中的參數的梯度串流傳輸到本地SmartNIC的本地記憶體池3234。替代地,如果需要儲存和轉發,RP可以透過P2P協定向映射到SmartNIC緩衝器的記憶體發出遠端寫入。在又另一替代方案中,RP可以向SmartNIC發出P2P控制,其觸發SmartNIC向RP裝置記憶體中的緩衝器發出P2P遠端讀取交易。無論區段S2梯度到達本地SmartNIC的機制為何,它們都可能非同步地被接收,但它們之中的每一個(或塊)都與原始RP的識別和包括在塊中的特定參數相關聯地被接收。接收到梯度之後,FPGA將它們加到其本地梯度緩衝器中。FPGA追蹤已接收到哪些梯度,以及來自哪些RP,並且在接收到來自所有本地RP的區段S2梯度之後繼續進行下一步驟。
然而,隨著節點中RP的數量增加,直接串流傳輸集合體到單一本地SmartNIC可能會造成瓶頸,從而抑制本地擴展。因此在另一實施例中,將區段S2梯度累積到本地SmartNIC中(以及區段S1梯度和區段S0梯度)可以使用如上面關於節點間集合體描述的環形全歸約演算法和用於每個RP的單獨專用SmartNIC來完成。也就是說,第一輪環形全歸約在每個處理節點內本地發生,留下一“本地主要的”SmartNIC,具有來自所有本地RP之當前區段的梯度總和。在圖42的8個RP節點中,N=8。然後,第二輪環形全歸約發生,如上所述。每個專用SmartNIC都有自己的FPGA。配置位元檔只將其中一個SmartNIC視為本地主要的SmartNIC,並且那一個就是由配置位元檔配置以在第二輪環形全歸約中與其他節點中相對應的主要SmartNIC進行通訊的SmartNIC。
本地環形全歸約可以在本地PCIe匯流排3220上發生,在這種情況下,沒有一個專用SmartNIC(除了本地主要的SmartNIC)需要包括乙太網路介面3312。替代地,若它們確實包括乙太網路介面3312,則配置位元檔可以在專用SmartNIC中配置FPGA,以使用P2P協定在以環形拓樸排列的本地LAN上執行本地環形全歸約。見圖48,其示出類似於圖42的RP處理節點4801,但為本地環形添加了本地LAN區段4830。
特別是,圖48示出一示例性處理節點4801,其包括一主機4810和八個RP 4812,類似於圖32中所示的RP 3212,全部透過PCIe匯流排4820互連。圖48中的SmartNIC編號為"NIC k.i,其中k為節點編號,範圍從0到N-1,N是參與處理節點的數量,以及其中i為節點k內的SmartNIC編號。索引i的範圍從0到M k-1,其中M k是節點k中SmartNIC的數量。在圖48中僅示出一個處理節點,節點0,並且將理解到,所有其他參與節點k,k=1…N-1,可以相同或不同。
與圖32的系統一樣,其他實現可以包括其他數量的RP 4812。處理節點4801與圖32的相異處在於,每個RP 4812都與它自己的SmartNIC 4822成對。每個RP 4812透過PCIe匯流排4820與其個別SmartNIC通訊,但在另一實施例中,每個RP 4812具有與PCIe匯流排4820分離的單獨、專用的PCIe匯流排(或其他周邊匯流排),用於與其個別SmartNIC 4822通訊。每個SmartNIC 4822都有連接到PCIe匯流排(或其他匯流排)的一個埠,透過該埠其可以與RP 4812通訊,以及連接到本地LAN 482的第二個埠。本實施例中的LAN 4828是乙太網路,但在其他實施例中,其可以是其他類型的LAN,諸如WiFi或InfiniBand。圖48中標有NIC0.0的SmartNIC可以是由配置位元檔配置為本地主要的SmartNIC的SmartNIC。其包括兩個額外的乙太網路子埠4228,用於與其他處理節點中的本地主要的SmartNIC進行通訊,如上面關於圖42所闡述的。替代地,LAN 4828(或者LAN 4828的一個區段)可以包括乙太網路交換器(未示出),其包括一或多個額外的埠,用於將LAN 4828擴展到其他的RP處理節點,如4801。圖48的排列可以被配置成根據需要透過兩個截然不同的通訊鏈路類型(PCIe和乙太網路)在RP 4812之間進行通訊,以便最佳化處理。 訊息協定
如上文主要關於圖14A-26所詳細闡述的,PCIe匯流排3220上的資料通訊包括在資料傳輸的發送端和接收端兩者的緩衝器。圖32和42之系統中的PCIe匯流排3220根據點對點(P2P)訊息協定承載控制和資料封包。如上所述,SmartNIC 3222也包括完全參與此類對話的邏輯。P2P協定包括至少兩種類型的交易:一種傳輸資料,以及另一種處理(例如,透過返回信用)通知發送者接收者已經處理了資料。使用此種協定,在不同實施例中有多種方式讓資料的接收者可以獲悉已經接收到足夠的資料以觸發接收者的資料流中的下一步驟。類似地,有多種方式使資料的發送者可以獲悉消費者已經接收到所有的資料,因此發送者可以觸發需要先前包含有資料的記憶體的後續管線階段。這種自決是使系統能夠最小化主機對資料流的運行時控制,從而最小化在傳統系統中可能發生的大量控制和網路開銷的特徵,在傳統系統中,諸如運行時主機的外部實體必須編排所有的同步步驟。這種外部控制開銷可以抑制架構擴展超出幾個計算節點。
例如在圖42的實施例中,在管線階段4424、4428及4432(圖44)中,各個RP向本地SmartNIC報告梯度可以使用P2P協定中定義的“推送”操作,由生產者RP發起。當針對當前網路區段Sj的資料傳輸完成時,協定序列通知本地SmartNIC。回應於已從所有本地RP接收到此類通知,SmartNIC自動地繼續後續管線階段,以與資料中心中的其他SmartNIC跨LAN執行集合體(圖45中的階段4514、4518或4522)。不需要任何第三方實體的控制。此外,P2P協定序列亦在消費者SmartNIC已接收到RP發送給SmartNIC之針對當前網路區段Sj的所有資料時通知生產者RP。生產者RP的資料流使用此類通知作為其邏輯的一部分來觸發將再使用其本地梯度記憶體的後續管線階段。例如,RP可被配置成再使用本地梯度記憶體於BWD傳遞中用於下一個網路區段Sj。並且,在SmartNIC之間,當來自其本地梯度緩衝器區段的值已由SmartNIC k-1接收時(圖46中的階段4610、4614、4618、4630、4636和4640)以及當來自SmartNIC k+1的所有值已到達時(圖46中的階段4612、4616、4620、4632、4636和4640),P2P協定序列通知每個SmartNIC k,可能需要同時發生這兩種情況中配置到FPGA中的資料流,以便觸發FPGA中資料流管線的後續階段。更進一步,在階段4528(圖45)中,每個SmartNIC可以使用相同P2P協定序列,或類似的廣播類型P2P協定序列,以透過本地PCIe匯流排將更新後的參數傳輸到所有本地RP。RP可以被配置成僅在根據P2P協定通知RP已接收到所有更新後的參數時才觸發下一個訓練時期(圖44中的階段4434)。並且,SmartNIC可以被配置成在其用於觸發其管線階段4512(圖45)的下一個迭代的的邏輯中包括根據P2P協定的通知,通知其已完成將最後一組更新後的參數傳輸到所有本地RP。
在提供此種完成通知的P2P協定的一個實施例中,控制封包在資料封包的生產者(發送者或來源)與資料的消費者(接收者或目的地)之間交換,以通知消費者所有用於特定傳輸的資料已被發送。可用於實現此目的的一組簡化的語義可能包括下列:
生產者可以透過由生產者控制的”推送”操作或者透過由消費者控制的“拉取”操作向消費者傳輸資料。針對推送操作,依據P2P的封包序列可能如下: •    為了回應來自生產者的內部資料流操作的請求,生產者的AGCU向消費者發送寫請求符記,指定消費者處的目的地FIFO位址。目的地位址可以在消費者處的DRAM內,對於SmartNIC而言,可以是在本地記憶體池3234中。 •    當消費者所需的任何先前處理已完成時,消費者的AGCU返回清除以發送(Clear-to-Send,CTS)符記。 •    生產者的AGCU然後將資料封包作為一系列一或多個固定大小的塊發送,其中最後一個包含指示“最後”的符記。 •    消費者的AGCU然後通知消費者的目的地資料流管線,資料已經被接收。 •    生產者的AGCU然後通知做出請求的內部資料流操作,發送過程已完成。
生產者的AGCU一旦被觸發,即獨立於生產者的資料流管線進行操作。因此,資料傳輸大部分可以與生產者處的持續資料流操作平行發生,直到資料流到達需要存取儲存發送資料的記憶體的階段。可配置生產者的資料流管線使得用於觸發該階段繼續進行的要求之一是從生產者的AGCU接收完成通知。類似地,消費者資料流可以繼續與資料的接收平行操作,直到達到需要資料被接收的管線階段。可配置消費者的資料流管線使得用於觸發該階段繼續進行的要求之一是從消費者的AGCU接收資料已到達的通知。
針對拉取操作,依據P2P的封包序列可能如下: •    為了回應來自生產者的內部資料流操作的請求,生產者的AGCU向消費者發送P2P符記,通知可供讀取的資料的可用性、儲存資料的位址以及要讀取的塊數量。 •    當消費者所需的任何先前處理已完成時,消費者的AGCU返回P2P確認符記並開始讀取資料塊,其以P2P資料封包的形式到達。替代地,消費者的AGCU可以從在SmartNIC本地記憶體中或者在遠端RP裝置記憶體中的記憶體映射緩衝器發出遠端讀取命令。 •    當消費者已接收到所有的資料時,消費者的AGCU通知消費者的目的地資料流管線,資料已經被接收。 •    消費者的AGCU亦向生產者的AGCU返回清除以發送(CTS)符記。 •    生產者的AGCU將CTS符記解釋為完成訊息,並通知做出請求的內部資料流操作,讀取過程已完成。
至於發送操作,資料傳輸大部分可以與生產者和消費者處的持續資料流操作平行發生。可配置生產者的資料流管線使得用於觸發後續資料流管線階段的要求之一是從生產者的AGCU接收完成通知。類似地,可配置消費者的資料流管線使得用於觸發後續資料流管線的要求之一是從消費者的AGCU接收資料已到達的通知。
消費者也可以要求從生產者傳輸資料到消費者。在這種情況下,可以使用與上述類似的P2P協定序列,透過推送或拉取來傳輸資料,並且在生產者和消費者之一或二者中的資料流管線可被配置成在觸發後續資料流管線階段的條件下,包括傳輸完成信號。將可理解的是,其他實施例可以提供訊息傳遞協定中的其他機制,生產者和消費者透過這些機制可以獲悉資料傳輸操作已經完成並且有足夠的資料可用於繼續進行後續資料流管線階段。
應當理解的是,也可以使用其他訊息協定,其向消費者或生產者或二者提供資料傳輸完成通知。作為另一範例,在推送發送協定序列中,發起方可以在初始封包中指定即將到來的資料傳輸的長度。長度可例如被指定為固定塊大小(諸如64位元組)的倍數,以及若有需要填充完整塊,可以填充資料封包本身。消費者透過監視對其本地記憶體池的寫入並檢測何時已寫入所有的塊來獲悉其已經接收到所有資料。作為又另一範例,可以使用本身不包括完成通知的P2P協定,但編譯器可以將在資料傳輸或接收已完成之後要發送到傳輸夥伴的等效通知配置到資料流中。
此外,在處理節點內跨PCIe匯流排使用的相同P2P訊息協定亦被用於跨圖42之系統中的乙太網路鏈路。P2P訊息被封裝在乙太網路資料報中而非在PCIe資料封包中。如上所述,透過PCIe匯流排發送但定址到不同處理節點3201中的RP的P2P封包由SmartNIC 3222重新封裝,透過乙太網路被發送到目的地處理節點的SmartNIC,在該處被重新封裝,並透過該SmartNIC自己的本地PCIe匯流排轉送到目的地RP。儘管依據底層傳輸媒體的較低階協定而被不同地封裝,相同的P2P協定被用於通過資料中心4210的所有處理節點傳訊。
所公開的技術可以作為系統、方法或製品來實踐。實現的一或多個特徵可以與基本實現結合。不互斥的實現在此被教導為可組合的。實現的一或多個特徵可以與其他實現結合。本公開會定期地提醒使用者這些選項。省略重複這些選項的一些實現不應被視為限制在前面章節中教導的組合–這些在此透過引用併入以下每個實現中。
所公開的技術或其元素的一或多個實現和態樣可以以電腦產品的形式來實現,包括具有用於執行所指示之方法步驟的電腦可使用程式碼的非暫時性電腦可讀取儲存媒體。此外,所公開的技術或其元素的一或多個實現和態樣可以以包括記憶體和至少一個處理器的裝置的形式來實現,該至少一個處理器耦接到該記憶體並且可操作以執行示例性方法步驟。此外,在另一方面,所公開的技術或其元素的一或多個實現和態樣可以以用於執行本文所述之一或多個方法步驟的手段的形式來實現;該手段可以包括(i)硬體模組、(ii)在一或多個硬處理器上執行的軟體模組或(iii)硬體與軟體模組的組合;(i)-(iii)中的任一個實現本文所述的特定技術,並且軟體模組被儲存在電腦可讀取儲存媒體(或多個這樣的媒體)中。例如,圖36的態樣可以透過這些方式實現,由主機或CPU處理的操作亦可。
如本文中所使用的,若前導信號、事件或值影響給定信號、事件或值,則該給定信號、事件或值係“回應”於該前導信號、事件或值。若存在中介處理元件、步驟或時間週期,則該給定信號、事件或值仍可以“回應”於該前導信號、事件或值。若該中介處理元件或步驟結合多於一個信號、事件或值,則該處理元件或步驟的信號輸出被認為是“回應”於各個信號、事件或值輸入。若該給定信號、事件或值與該前導信號、事件或值相同,則這只是退化情況,其中該給定信號、事件或值仍被認為是“回應”於該前導信號、事件或值。給定信號、事件或值對另一信號、事件或值的“依賴性”以類似方式定義。
如本文中所使用的,資訊項的“識別”不一定需要對該資訊項的直接規範。透過經由一或多個間接層簡單地引用實際資訊、或者透過識別全部一起足以確定實際資訊項的一或多個不同資訊項,可以在欄位中“識別”資訊。此外,本文中使用的術語“指示”與“識別”的含義相同。
申請人在此單獨公開本文所述的每個單獨的特徵以及兩個或多個此種特徵的任意組合,以至於此種特徵或組合能夠在本說明書的整體基礎上依照本領域之技術人士的公知常識來實現,不管此種特徵或特徵的組合是否解決本文所公開的任何問題,並且不限於申請專利範圍的範圍。申請人指出本發明的態樣可以包括任何此種特徵或特徵的組合。有鑑於前面的敘述,對於本領域之技術人士顯而易見的是,可以在本發明的範圍內進行各種修改。
出於說明和描述的目的,提供了本發明的最佳實施例的上面說明。其不旨在窮舉或將本發明限制為所公開的精確形式。顯然地,對於本領域之技術人士而言,許多修改和變形將是顯而易見的。特別是,但不限於,在本發明的先前技術一節中描述、建議或透過引用併入的任何及全部變形都透過引用明確地併入本發明實施例的描述中。此外,關於任何一個實施例所描述、建議或透過引用併入本文的任何及全部變形也應被認為是針對所有其他實施例教導的。為了最佳地解釋本發明的原理及其實際應用而選擇和描述本文描述的實施例,從而使本領域之技術人士能夠理解本發明的各種實施例和適合於預期的特定用途的各種修改。本發明的範圍旨在由以下的申請專利範圍及其等效物來定義。
雖然本發明是透過參考上面詳述的最佳實現和範例來公開的,但應當理解這些範例旨在說明性而非限制性。預期本領域之技術人士將容易想到修改和組合,這些修改和組合將在本發明的精神和以下條項和申請專利範圍的範圍內。 條項 本發明的一些特徵包括在以下條項中列出的那些。 條項1. 一種用於在多個處理器上執行應用程式的方法,包括: 提供一系統,其包括複數個功能單元和互連組構,透過該互連組構可以使用點對點(P2P)訊息傳遞協定層將資料從該些單元的生產單元傳輸到該些單元的消費單元,該複數個功能單元包括第一可重配置單元,可在第一級可配置粒度配置以實現資料流架構,以及第二可重配置單元,可在第二級可配置粒度配置以實現資料流架構,該第一級可配置粒度與該第二級可配置粒度不同; 一主機系統,將應用程式寫入該些功能單元中,其包括在該第一級可配置粒度為該第一可重配置單元配置實現該應用程式之第一資料流區段的一或多個資料流管線,並且進一步在該第二級可配置粒度為該第二可重配置單元配置實現該應用程式之第二資料流區段的一或多個資料流管線; 在該第一可重配置單元上執行該第一資料流區段以產生第一中間結果,該第一可重配置單元在該第一資料流區段的管線階段中透過該P2P訊息傳遞協定將該第一中間結果轉發到該第二可重配置單元而不經過該主機系統; 根據該第一中間結果在該第二可重配置單元上執行該第二資料流區段以產生第二中間結果,該第二可重配置單元在該第二資料流區段的管線階段中透過該P2P訊息傳遞協定將該第二中間結果轉發到該些可重配置單元中繼續的一個可重配置單元而不經過該主機系統;以及 根據該第二中間結果在該繼續的可重配置單元上繼續執行該應用程式。 條項2. 如條項1之方法,其中該互連組構包括PCIe匯流排。 條項3. 如條項1之方法,其中該第一可重配置單元具有CGRA且該第二可重配置處理器包括NIC,其中該NIC包括: 第一介面,該NIC透過該第一介面根據互連組構協定在該互連組構上進行通訊; 第二介面,該NIC透過該第二介面在網路連接上使用與在該互連組構上使用的連網協定不同的連網協定進行通訊; FPGA,為該第二可重配置單元配置該第二資料流區段包括配置該FPGA以執行該第二資料流區段的至少一部分; 第一轉譯邏輯,其接收到達該第一介面並且被定址到可透過該第二介面到達的目的地的資料封包,根據該連網協定重新封裝它們,並透過該第二介面轉發它們; 第二轉譯邏輯,其接收到達該第二介面並且被定址到可透過該第一介面到達的目的地的資料封包,根據該互連組構協定重新封裝它們,並透過該第一介面轉發它們; 第一消費者邏輯,其接收到達該第一介面並且被定址到該FPGA的資料封包,提取第一訊息,並向該FPGA提供該些第一訊息;以及 第一生產者邏輯,其將由該FPGA發起並且被定址到可透過該第一介面到達的可重配置單元的訊息轉發到該第一介面。 條項4. 如條項3之方法,其中該NIC還包括: 第二消費者邏輯,其接收到達該第二介面並且被定址到該FPGA的資料封包,提取第二訊息,並向該FPGA提供該些第二訊息;以及 第二生產者邏輯,其將由該FPGA發起並且被定址到可透過該第二介面到達的可重配置單元的訊息轉發到該第二介面。 條項5. 如條項4之方法,其中該第二資料流區段包括第一特定管線階段,用以將中間資料傳輸到可透過該第二介面到達的第三可重配置單元, 以及其中在該第一特定管線階段中,該第二可重配置單元的該第二生產者邏輯透過該第二介面將該中間資料轉發到該第三可重配置單元。 條項6. 如條項5之方法,其中該第二資料流區段還包括第二特定管線階段,其依賴於來自可透過該第二介面到達的第四可重配置單元的資料, 以及其中該第二可重配置單元僅回應於該第二可重配置單元接收到來自該第四可重配置單元的該資料而進行該第二特定管線階段。 條項7. 如條項4之方法,其中該第二資料流區段包括透過該第二介面將依賴於從該第一RP接收的該第一中間結果的資料寫入儲存叢集的管線階段。 條項8. 如條項4之方法,其中該第二資料流區段包括透過該第二介面從儲存叢集讀取資料的管線階段,該第二中間結果依賴於該讀取資料。 條項9. 如條項4之方法,其中該第二資料流區段包括透過該第二介面從SQL資料庫讀取資料的管線階段,該第二中間結果依賴於該讀取資料。 條項10. 如條項9之方法,其中該應用程式包括使用跨複數個該RP(該些參與RP)劃分的訓練資料樣本來訓練類神經網路的類神經網路參數,該複數個RP包括該第一RP,該些資料樣本之各者包括複數個輸入值和一組至少一個目標輸出值, 以及其中該讀取資料包括該些訓練資料樣本的至少一子集。 條項11. 如條項9之方法,其中該應用程式包括使用跨複數個該RP(該些參與RP)劃分的訓練資料樣本來訓練類神經網路的參數,該複數個RP包括該第一RP,該些資料樣本之各者包括複數個輸入值和一組至少一個目標輸出值, 以及其中該讀取資料包括些類神經網路參數之至少一子集的值。 條項12. 如條項4之方法,其中該第二資料流區段包括在透過該第二介面傳輸之前對資料進行加密或解密,以及透過該第二介面到達進行加密或解密的管線階段。 條項13.  如條項4之方法,其中該第二資料流區段包括對透過該第二介面到達的音頻或視頻串流資料進行預處理,以及透過該第一介面傳輸依賴於該經預處理的音頻或視頻串流資料的資料的管線階段。 條項14. 如條項1之方法,其中該第一可重配置單元具有粗粒度可重配置架構(CGRA)。 條項15. 如條項14之方法,其中該第二可重配置單元包括現場可編程閘陣列(FPGA)。 條項16. 如條項1之方法,其中該第一可重配置單元具有字級可配置粒度。 條項17. 如條項16之方法,其中該第二可重配置單元具有位元級可重配置性。 條項18. 如條項1之方法,其中該第一可重配置單元具有暫存器傳輸級可重配置性。 條項19. 如條項18之方法,其中該第二可重配置單元具有閘級可重配置性。 條項20. 如條項1之方法,其中該第一可重配置單元使用字組寬的暫存器來配置發送插槽(IS)、算術邏輯單元(ALU)、功能單元、處理元件(PE)、暫存器檔(RF)及互連, 以及其中該第二級可配置粒度使用逐位元查找表(LUT)來配置交換器。 條項21. 如條項20之方法,其中該第一可重配置單元使用的IS數量少於該第二可重配置單元使用的LUT的數量。 條項22.  如條項1之方法,其中配置該第一可重配置單元所需的位元數至少比配置該第二可重配置單元所需的位元數小一個數量級。 條項23. 如條項1之方法,其中將該第一中間結果轉發到該第二可重配置單元包括觸發該第一中間結果之該轉發的資料流管線階段, 其中被配置到該第一可重配置單元的該應用程式還包括第三資料流區段, 以及其中該第一可重配置單元至少部分地與執行該第二資料流區段的該第二可重配置單元平行地執行該第三資料流區段。 條項24. 如條項1之方法,其中該第一資料流區段包括一系列管線階段, 其中在該第一可重配置單元上執行該第一資料流區段係回應於來自該主機系統的起始命令而執行; 以及其中該第一可重配置單元轉發該第一中間結果作為該些管線階段中的特定一個管線階段的一部分,而不是回應於在來自該主機系統之該起始命令之後來自該主機系統的任何控制信號。 條項25. 如條項24之方法,其中該主機系統回應於將該應用程式寫入該些功能單元的完成,向該些功能單元的至少一者發送該起始命令。 條項26. 如條項25之方法,其中該起始命令係透過該P2P協定發送。 條項27. 如條項24之方法,其中被配置到該第一可重配置單元的該應用程式還包括第三資料流區段, 以及其中該第一可重配置單元至少部分地與執行該第二資料流區段的該第二可重配置單元平行地執行該第三資料流區段。 條項28. 如條項24之方法,其中該第二資料流區段包括一系列第二管線階段, 以及其中該第二可重配置單元轉發該第二中間結果作為該第二管線階段中的特定一個管線階段的一部分,而不是回應於在來自該主機系統之該起始命令之後來自該主機系統的任何控制信號。 條項29. 如條項1之方法,其中根據該第一中間結果在該第二可重配置單元上執行該第二資料流區段,包括該第二可重配置單元檢測該第一中間結果的到達,並且回應於該到達而執行該第二資料流區段。 條項30. 如條項1之方法,其中將該第一中間結果轉發到該第二可重配置單元包括該第一可重配置單元向該第二可重配置單元發送完成訊息,指示完成將該第一中間結果傳輸到該第二可重配置單元, 以及其中根據該第一中間結果在該第二可重配置單元上執行該第二資料流區段,包括該第二可重配置單元檢測該完成訊息的到達,並且回應於該到達而執行該第二資料流區段。 條項31. 如條項1之方法,其中將該第一中間結果轉發到該第二可重配置單元包括觸發該第一中間結果之該轉發的資料流管線階段, 其中被配置到該第一可重配置單元的該應用程式還包括第三資料流區段, 以及其中該第一可重配置單元回應於觸發該第一中間結果之該轉發的該管線階段的完成而執行該第三資料流區段。 條項32. 如條項1之方法,其中被配置到該第一可重配置單元的該應用程式還包括第三資料流區段, 以及其中該第一可重配置單元在該第一可重配置單元檢測到該第一中間結果中的所有資料已被發送到該第二可重配置單元時,執行該第三資料流區段。 條項33. 如條項1之方法,其中被配置到該第一可重配置單元的該應用程式還包括第三資料流區段, 以及其中該第一可重配置單元在該第一可重配置單元從該第二可重配置單元接收到完成訊息時,執行該第三資料流區段。 條項34. 如條項1之方法,其中在該第二可重配置單元上執行該第二資料流區段還產生第三中間結果,該方法還包括: 該第二可重配置單元在該第二資料流區段的管線階段中,透過P2P協定層將該第三中間結果轉發到該些可重配置單元中的一個額外的可重配置單元而不通過該主機系統;以及 根據該第三中間結果在該額外的可重配置單元上執行該應用程式的額外的資料流區段。 條項35. 如條項1之方法,還包括該主機系統將第二應用程式寫入該些功能單元,包括為該第一和第二可重配置單元重新配置該第二應用程式的個別資料流區段。
100:資料中心 102a,102n:主機處理器 112a,112n:編譯器 122a,122n:運行時邏輯 124a,124n:匯流排交換器 125a,125n:本地匯流排 126a,126n:本地匯流排 127a,127n:本地匯流排 132a,132n:網路介面控制器 134a,134n:主機記憶體 136:網路 142a,142n:可重配置處理器 162a,162n:可重配置處理器記憶體 202a,202n:主機接收器緩衝器 212a,212n:主機發送器緩衝器 302a,302n:介面接收器緩衝器 312a,312n:介面發送器緩衝器 402a,402n:可重配置處理器(RP)接收器緩衝器 412a,412n:可重配置處理器(RP)發送器緩衝器 502a,502n:除錯邏輯 512a,512n:測試邏輯 600:訊息序列圖 602:應用程式 632:發送器緩衝器 700:訊息序列圖 702:應用程式 732:發送器緩衝器 800:訊息序列圖 802:應用程式 832:發送器緩衝器 900:訊息序列圖 902:應用程式 932:發送器緩衝器 1000:訊息序列圖 1002:測試應用程式 1032:發送器緩衝器 1100:訊息序列圖 1102:測試應用程式 1132:發送器緩衝器 1200:訊息序列圖 1202:應用程式 1212:配置檔 1214:第一組函數 1224:第二組函數 1234:結果 1300:訊息序列圖 1302:應用程式 1312:配置檔 1314:第一組函數 1324:第二組函數 1334:結果 1402a,1402n:第二組函數 1412a,1412n:可重配置處理器1(RP 1)發送器緩衝器 1422a,1422n:可重配置處理器(RP n)接收器緩衝器 1432a,1432n:可重配置處理器n(RP n)發送器緩衝器 1500:訊息序列圖 1502:應用程式 1512:配置檔 1514:第一組函數 1524:第二組函數 1534:結果 1600:訊息序列圖 1602:應用程式 1612:配置檔 1614:第一組函數 1624:第二組函數 1634:結果 1700A:訊息序列圖 1702:源記憶體 1704:第一複數個緩衝器 1706:第二複數個緩衝器 1708:目的地記憶體 1712:資料單元系列 1700B:訊息序列圖 1700C:訊息序列圖 1800:訊息序列圖 1802:應用程式 1812:編譯器 1822:配置檔 1824:虛擬資料流資源 1824a:第一虛擬處理節點 1824a1:第一虛擬可重配置處理器 1824b:第二虛擬處理節點 1824b1:第二虛擬可重配置處理器 1824c:虛擬緩衝器 1824c1:第一虛擬SmartNIC緩衝器 1824c2:第二虛擬SmartNIC緩衝器 1832:運行時處理器 1842:運行時邏輯 1844:分配邏輯 1900:記憶體映射 1902:分配的緩衝器/物理緩衝器 1912:SmartNIC 1緩衝器 1913:控制及狀態暫存器(CSR) 1914:SmartNIC 1緩衝器 1922:SmartNIC 2緩衝器 1923:控制及狀態暫存器(CSR) 1924:SmartNIC 2緩衝器 1932:RP 1緩衝器 1933:控制及狀態暫存器(CSR) 1934:RP 1緩衝器 1942:RP 2緩衝器 1943:控制及狀態暫存器(CSR) 1944:RP 2緩衝器 1952:PCIe 1緩衝器 1953:控制及狀態暫存器(CSR) 1954:PCIe 1緩衝器 1962:DMA 1緩衝器 1963:控制及狀態暫存器(CSR) 1964:DMA 1緩衝器 1972:主機1緩衝器 1973:控制及狀態暫存器(CSR) 1974:主機1緩衝器 1980:控制及狀態暫存器(CSR) 2000:架構級示意圖 2100:訊息序列圖 2112a,2112n:PCIe交換器(PEX) 2120a,2120n:交換層封包(TLP) 2128a,2128n:交換層封包(TLP) 2132a,2132n:PCIe匯流排 2134a,2134n:PCIe交換器(PEX) 2136a,2136n:PCIe匯流排 2146a,2146n:PCIe端點埠(EP) 2156a,2156n:負載 2176a,2176n:發送器緩衝器 2178a,2178n:接收器緩衝器 2186a,2186n:快取 2196a,2196n:MAC埠 2198a,2198n:基於融合乙太網的RDMA(RoCE)/ TCP/用戶資料報協定(UDP)和快速UDP網際網路連接(QUIC) 2200:訊息序列圖 2300:執行 2302:應用程式 2304a:處理模組的第一子集 2304b:處理模組的第二子集 2322a,2322b:配置檔 2400:執行 2404a:資料流圖的第一實例 2404b:資料流圖的第二實例 2422a,2422b:配置檔 2500:執行 2502a:第一配置檔子集 2502b:第二配置檔子集 2600:執行 2700:系統 2710:可重配置資料處理器 2715:匯流排系統 2720:主機 2725:線 2730:I/O介面 2740:記憶體 2745:線 2750:I/O介面 2770:外部時鐘產生器 2775:時鐘線 2790:可配置單元陣列 2795:配置加載/卸載控制器 2797:虛擬化邏輯 2798:可配置單元集 2799:可配置單元集 2800:方塊圖 2805:I/O介面 2811~2816:頂級交換器 2900:可配置單元陣列 2901:配置加載/卸載控制器 2911:交換單元 2912:交換單元 2920:鏈路 2921:互連 2931:鏈路 2941:PMU 2942:PCU 2943:PMU 3000:可配置單元 3010:輸入配置資料 3021:線路 3022:線路 3020:配置資料儲存 3030:卸載輸出配置資料 3040:單元配置加載邏輯 3060:向量FIFO 3070:純量FIFO 3080:塊 3081~3086:功能單元 3090:控制塊 3091:菊鏈式完成匯流排 3092:菊鏈式命令匯流排 3093:菊鏈邏輯 3100:可配置單元 3111:本地FIFO 3112:本地FIFO 3115:控制塊 3116:可編程計數器鏈 3120:可重配置純量資料路徑 3130:高速暫存記憶體 3131~3134:SRAM庫 3135:分庫緩衝邏輯 3201:處理節點 3210:主機 3212:RP 3220:PCIe匯流排 3222:SmartNIC 3224:埠 3226:埠 3228:LAN 3230:封裝/解封裝設施 3231:IP協定處理設施 3232:資料流卸載控制器 3234:本地記憶體池 3236:FPGA核心 3310:PCIe介面 3312:乙太網路介面 3500:區段 3502:輸入張量 3508:輸入處理節點 3510:中間張量 3512:中間處理節點 3514:中間張量 3516:輸出處理節點 3520:輸出張量 3522:索引張量 3610:編譯器 3612:資料流圖分析器 3614:有註釋的資料流圖 3616:資料流編譯器 3618:模板編譯器 3620:空間模板 3622:FPGA編譯器 3624:可執行的運行時配置位元檔 3812:訓練資料 4210:資料中心 4222:SmartNIC 4224:埠 4226:埠 4228:乙太網路 4410~4438:步驟 4510~4528:步驟 4610~4640:階段 4801:RP處理節點 4810:主機 4812:RP 4820:PCIe匯流排 4822:SmartNIC 4830:本地LAN區段
在圖式中,在全文不同視圖中,相似的參考標號通常指相似的部分。並且,圖式不一定按比例繪製,而是通常將重點放在說明所公開的技術的原理上。在以下描述中,將參考下面的圖式說明所公開之技術的各種實施方式,其中:
[圖1]示出依據一種實現的資料中心的架構級示意圖。
[圖2A]示出位於圖1之資料中心中的第一處理節點的第一主機處理器之主機記憶體中的主機發送器緩衝器和主機接收器緩衝器。
[圖2B]示出位於圖1之資料中心中的第二處理節點的第二主機處理器之主機記憶體中的主機發送器緩衝器和主機接收器緩衝器。
[圖3A]示出位於可操作地耦接到第一處理節點之第一網路介面控制器的介面發送器緩衝器和介面接收器緩衝器。
[圖3B]示出位於可操作地耦接到第二處理節點之第二網路介面控制器的介面發送器緩衝器和介面接收器緩衝器。
[圖4A]示出位於可操作地耦接到第一處理節點之第一可重配置處理器的處理器記憶體中的可重配置處理器(RP)發送器緩衝器和可重配置處理器接收器緩衝器。
[圖4B]示出位於可操作地耦接到第二處理節點之第二可重配置處理器的處理器記憶體中的可重配置處理器發送器緩衝器和可重配置處理器接收器緩衝器。
[圖5A]是在第一主機處理器運行之運行時邏輯的啟發式圖。
[圖5B]是在第二主機處理器運行之運行時邏輯的啟發式圖。
[圖6]是訊息序列圖,其說明除錯邏輯的一種實現,該除錯邏輯運行在第一主機處理器並檢測在可操作地耦接到第一處理節點的一或多個可重配置處理器上執行配置檔的錯誤。
[圖7]是訊息序列圖,其說明圖6之除錯邏輯的一種實現,該除錯邏輯檢測在可操作地耦接到第二處理節點的一或多個可重配置處理器上執行配置檔的錯誤。
[圖8]是訊息序列圖,其說明可操作地耦接到第一處理節點的一或多個可重配置處理器向第一主機處理器發出遠端程序呼叫的一種實現。
[圖9]是訊息序列圖,其說明可操作地耦接到第二處理節點的一或多個可重配置處理器向第一主機處理器發出遠端程序呼叫的一種實現。
[圖10]是訊息序列圖,其說明測試邏輯的一種實現,該測試邏輯運行在第一主機處理器並確定和報告在可操作地耦接到第一處理節點的一或多個可重配置處理器上執行測試配置檔的測試統計。
[圖11]是訊息序列圖,其說明圖10之測試邏輯的一種實現,該測試邏輯確定和報告在可操作地耦接到第二處理節點的一或多個可重配置處理器上執行測試配置檔的測試統計。
[圖12]是訊息序列圖,其說明在可操作地耦接到第一處理節點的一或多個可重配置處理器上執行配置檔中的第一組函數以及在第一主機處理器上執行配置檔中的第二組函數的一種實現。
[圖13]是訊息序列圖,其說明在可操作地耦接到第一處理節點的一或多個可重配置處理器上執行配置檔中的第一組函數以及在第二主機處理器上執行配置檔中的第二組函數的一種實現。
[圖14A]示出可操作地耦接到第一處理節點的可重配置處理器中的個別可重配置處理器用於資料串流的發送器和接收器緩衝器。
[圖14B]示出可操作地耦接到第二處理節點的可重配置處理器中的個別可重配置處理器用於資料串流的發送器和接收器緩衝器。
[圖15]是訊息序列圖,其說明在可操作地耦接到第一處理節點的第一可重配置處理器上執行配置檔中的第一組函數以及在可操作地耦接到第一處理節點的第二可重配置處理器上執行配置檔中的第二組函數的一種實現。
[圖16]是訊息序列圖,其說明在可操作地耦接到第一處理節點的第一可重配置處理器上執行配置檔中的第一組函數以及在可操作地耦接到第二處理節點的第一可重配置處理器上執行配置檔中的第二組函數的一種實現。
[圖17A]是訊息序列圖,其說明非同步張量串流的一種實現,其中當可重配置處理器正處理當前張量時緩衝下一個張量。
[圖17B]是訊息序列圖,其說明非同步張量串流的一種實現,其中在可重配置處理器處理當前張量之前緩衝下一個張量。
[圖17C]是訊息序列圖,其說明非同步張量串流的一種實現,其中在可重配置處理器已處理當前張量之後緩衝下一個張量。
[圖18]是訊息序列圖,其說明在資料中心的不同處理節點上的可重配置處理器上執行配置檔的一種實現。
[圖19]示出將虛擬緩衝器記憶體映射和分配到位於資料中心中的不同網路元件的記憶體中的物理緩衝器的一種實現。
[圖20]示出資料中心之一種實現的架構級示意圖,其中該資料中心的處理節點不包括主機處理器。
[圖21]是訊息序列圖,其說明透過網路組構之基於緩衝器的節點間串流傳輸配置資料的一種實現。
[圖22]是訊息序列圖,其說明透過網路組構之基於緩衝器的節點間串流傳輸配置資料的另一種實現。
[圖23]示出使用所公開的透過網路組構136之基於緩衝器的節點間串流傳輸配置資料來平行執行模型/應用程式的一種實現。這在本文中稱為“模型平行”。
[圖24]示出使用所公開的透過網路組構136之基於緩衝器的節點間串流傳輸配置資料來平行執行模型/應用程式的多個實例的一種實現。這在本文中稱為“資料平行”。
[圖25]示出在異質可重配置處理器上執行配置檔的一種實現。
[圖26]示出使用嵌入在可重配置處理器上的NIC或SmartNIC裝置來執行配置檔的一種實現。
[圖27]是系統圖,說明系統包括主機、記憶體及示例性可重配置資料處理器,在該系統上可以應用所公開的技術。
[圖28]是CGRA(粗粒度可重配置架構)的頂級網路和元件的簡化方塊圖。
[圖29]是可用於圖27的配置中的磚片和陣列級網路的簡化圖,其中可配置單元是陣列級網路上的節點,並且可配置成實現具有輸入偏移的查找表。
[圖29B]示出連接陣列級網路中的元素的示例性交換單元。
[圖30]是示出示例性可配置單元,諸如型樣計算單元(Pattern Compute Unit,PCU)的方塊圖。
[圖31]是示出示例性可配置單元,諸如型樣記憶體單元(Pattern Memory Unit,PMU)的方塊圖。
[圖32]示出一示例性處理節點,其包括一主機、八個可重配置處理器和一SmartNIC。
[圖33]是可用於圖32或圖48的處理節點中的SmartNIC的方塊圖。
[圖34]描繪Map、FlatMap、Fold和 HashReduce之特定常見的平行型樣的概念範例。
[圖35]示出來自示例性處理圖的一區段。
[圖36]示出可用於從應用程式的高階程式產生資料流圖的示例性編譯器的整體架構。
[圖37]示出配置檔的一個示例性組織。
[圖38]示出一簡單深度學習應用程式,其透過跨計算節點中的多個可重配置處理器的資料平行實現。
[圖39]示出資料平行的傳統實現所產生的時間進展。
[圖40和41]示出使用SmartNIC上的FPGA的改良實施所產生的時間進展。
[圖42]示出合併多個處理節點的示例性資料中心。
[圖43]示出隨機梯度下降深度學習應用程式,其透過跨多個處理節點的資料平行實現。
[圖44]示出被配置到圖42中的每個可重配置處理器中的資料流圖片段。
[圖45]示出被配置到圖42之系統中的每個處理節點的SmartNIC中的資料流圖片段。
[圖46A和46B](統稱圖46)是圖45中各個步驟4514、4518和4522的單向環全歸約集合的細節。
[圖47A、47B、47C、47D、47E、47F、47G和47H](統稱圖47)示出圖46的單向環全歸約演算法。
[圖48]示出另一示例性處理節點,其包括一主機、八個可重配置處理器和用於每個可重配置處理器的SmartNIC。
102a,102n:主機處理器 132a,132n:網路介面控制器 134a,134n:主機記憶體 136:網路 142a,142n:可重配置處理器 162a,162n:可重配置處理器記憶體 2112a,2112n:PCIe交換器(PEX) 2120a,2120n:交換層封包(TLP) 2128a,2128n:交換層封包(TLP) 2132a,2132n:PCIe匯流排 2134a,2134n:PCIe交換器(PEX) 2136a,2136n:PCIe匯流排 2146a,2146n:PCIe端點埠(EP) 2156a,2156n:負載 2176a,2176n:發送器緩衝器 2178a,2178n:接收器緩衝器 2186a,2186n:快取 2196a,2196n:MAC埠 2198a,2198n:基於融合乙太網的RDMA(RoCE)/TCP/用戶資料報協定(UDP)和快速UDP網際網路連接(QUIC) 2200:訊息序列圖

Claims (29)

  1. 一種用於在複數個處理器上執行應用程式的系統,包括: 複數個功能單元,包括可在第一級可配置粒度配置以實現資料流架構的第一可重配置單元,以及可在第二級可配置粒度配置以實現資料流架構的第二可重配置單元,該第一級可配置粒度與該第二級可配置粒度不同; 互連組構,透過該互連組構,資料可以使用點對點(P2P)訊息傳遞協定層從該些功能單元之一生產單元傳輸到該些功能單元之一消費單元;以及 一主機系統,被編程以將應用程式寫入該些功能單元中,其包括在該第一級可配置粒度為該第一可重配置單元配置實現該應用程式之第一資料流區段的一或多個資料流管線,並且進一步在該第二級可配置粒度為該第二可重配置單元配置實現該應用程式之第二資料流區段的一或多個資料流管線, 其中在該第一可重配置單元上執行該第一資料流區段產生第一中間結果,該第一可重配置單元在該第一資料流區段的管線階段中透過該P2P訊息傳遞協定將該第一中間結果轉發到該第二可重配置單元而不經過該主機系統, 其中根據該第一中間結果在該第二可重配置單元上執行該第二資料流區段產生第二中間結果,該第二可重配置單元在該第二資料流區段的管線階段中透過該P2P訊息傳遞協定將該第二中間結果轉發到一繼續的可重配置單元而不經過該主機系統, 該繼續的可重配置單元被配置成根據該第二中間結果繼續執行該應用程式, 其中該第一可重配置單元使用字組寬的暫存器來配置發送插槽(IS)、算術邏輯單元(ALU)、功能單元、處理元件(PE)、暫存器檔(RF)及互連,以及 其中該第二級可配置粒度使用逐位元(bit-wise)查找表(LUT)來配置交換器。
  2. 如請求項1的系統,其中該互連組構包括PCIe匯流排。
  3. 如請求項1的系統,其中該第一可重配置單元具有粗粒度可重配置架構(CGRA)以及該第二可重配置單元包括網路介面卡(NIC),其中該NIC包括: 第一介面,該NIC透過該第一介面根據互連組構協定在該互連組構上進行通訊; 第二介面,該NIC透過該第二介面在網路連接上使用與在該互連組構上使用的連網協定不同的連網協定進行通訊; 現場可編程閘陣列(FPGA),為該第二可重配置單元配置該第二資料流區段包括配置該FPGA以執行該第二資料流區段的至少一部分; 第一轉譯邏輯,其接收到達該第一介面並且被定址到可透過該第二介面到達的目的地的資料封包,根據該連網協定重新封裝它們,並透過該第二介面轉發它們; 第二轉譯邏輯,其接收到達該第二介面並且被定址到可透過該第一介面到達的目的地的資料封包,根據該互連組構協定重新封裝它們,並透過該第一介面轉發它們; 第一消費者邏輯,其接收到達該第一介面並且被定址到該FPGA的資料封包,提取第一訊息,並向該FPGA提供該些第一訊息;以及 第一生產者邏輯,其將由該FPGA發起並且被定址到可透過該第一介面到達的可重配置單元的訊息轉發到該第一介面。
  4. 如請求項3的系統,其中該NIC還包括: 第二消費者邏輯,其接收到達該第二介面並且被定址到該FPGA的資料封包,提取第二訊息,並向該FPGA提供該些第二訊息;以及 第二生產者邏輯,其將由該FPGA發起並且被定址到可透過該第二介面到達的可重配置單元的訊息轉發到該第二介面。
  5. 如請求項4的系統,其中該第二資料流區段包括第一特定管線階段,用以將中間資料傳輸到可透過該第二介面到達的第三可重配置單元, 以及其中在該第一特定管線階段中,該第二可重配置單元的該第二生產者邏輯透過該第二介面將該中間資料轉發到該第三可重配置單元。
  6. 如請求項5的系統,其中該第二資料流區段還包括第二特定管線階段,其依賴於來自可透過該第二介面到達的第四可重配置單元的資料, 以及其中該第二可重配置單元僅回應於該第二可重配置單元接收到來自該第四可重配置單元的該資料而進行該第二特定管線階段。
  7. 如請求項4的系統,其中該第二資料流區段包括透過該第二介面將依賴於從該第一可重配置單元接收的該第一中間結果的資料寫入儲存叢集的管線階段。
  8. 如請求項4的系統,其中該第二資料流區段包括透過該第二介面從儲存叢集讀取資料的管線階段,該第二中間結果依賴於該讀取資料。
  9. 如請求項4的系統,其中該第二資料流區段包括透過該第二介面從SQL資料庫讀取資料的管線階段,該第二中間結果依賴於該讀取資料。
  10. 如請求項9的系統,其中該應用程式包括使用跨該複數個功能單元(包括該第一可重配置單元)劃分的訓練資料樣本來訓練類神經網路的類神經網路類神經網路參數,該些訓練資料樣本之各者包括複數個輸入值和一組至少一個目標輸出值, 以及其中該讀取資料包括該些訓練資料樣本的至少一子集。
  11. 如請求項10的系統,其中該應用程式包括使用跨該複數個功能單元(包括該第一可重配置單元)劃分的訓練資料樣本來訓練類神經網路的參數,該些訓練資料樣本之各者包括複數個輸入值和一組至少一個目標輸出值, 以及其中該讀取資料包括些類神經網路參數之至少一子集的值。
  12. 如請求項4的系統,其中該第二資料流區段包括在透過該第二介面傳輸之前對資料進行加密或解密,以及透過該第二介面到達進行加密或解密的管線階段。
  13. 如請求項4的系統,其中該第二資料流區段包括對透過該第二介面到達的音頻或視頻串流資料進行預處理,以及透過該第一介面傳輸依賴於該經預處理的音頻或視頻串流資料的資料的管線階段。
  14. 如請求項1的系統,其中該第二可重配置單元包括現場可編程閘陣列(FPGA)。
  15. 如請求項1的系統,其中該第一可重配置單元具有字級可配置粒度。
  16. 如請求項15的系統,其中該第二可重配置單元具有位元級可重配置性。
  17. 如請求項1的系統,其中該第一可重配置單元具有暫存器傳輸級可重配置性。
  18. 如請求項17的系統,其中該第二可重配置單元具有閘級可重配置性。
  19. 如請求項1的系統,其中該第一可重配置單元使用的IS數量少於該第二可重配置單元使用的該些LUT的數量。
  20. 如請求項1的系統,其中配置該第一可重配置單元所需的位元數至少比配置該第二可重配置單元所需的位元數小一個數量級。
  21. 如請求項1的系統,其中該第一資料流區段包括一系列第一管線階段,其中在該第一可重配置單元上執行該第一資料流區段係回應於來自該主機系統的起始命令而執行;以及 其中該第一可重配置單元轉發該第一中間結果作為該第一管線階段中的特定一個管線階段的一部分,而不是回應於在來自該主機系統之該起始命令之後來自該主機系統的任何控制信號。
  22. 如請求項21的系統,其中該主機系統回應於將該應用程式寫入該些功能單元的完成,向該些功能單元的至少一者發送該起始命令。
  23. 如請求項22的系統,其中該起始命令係透過該P2P協定發送。
  24. 如請求項21的系統,其中被配置到該第一可重配置單元的該應用程式還包括第三資料流區段, 以及其中該第一可重配置單元至少部分地與執行該第二資料流區段的該第二可重配置單元平行地執行該第三資料流區段。
  25. 如請求項21的系統,其中該第二資料流區段包括一系列第二管線階段, 以及其中該第二可重配置單元轉發該第二中間結果作為該第二管線階段中的特定一個管線階段的一部分,而不是回應於在來自該主機系統之該起始命令之後來自該主機系統的任何控制信號。
  26. 如請求項1的系統,其中根據該第一中間結果在該第二可重配置單元上執行該第二資料流區段,包括該第二可重配置單元檢測該第一中間結果的到達,並且回應於該到達而執行該第二資料流區段。
  27. 如請求項1的系統,其中將該第一中間結果轉發到該第二可重配置單元包括該第一可重配置單元向該第二可重配置單元發送完成訊息,指示完成將該第一中間結果傳輸到該第二可重配置單元, 以及其中根據該第一中間結果在該第二可重配置單元上執行該第二資料流區段,包括該第二可重配置單元檢測該完成訊息的到達,並且回應於該到達而執行該第二資料流區段。
  28. 如請求項1的系統,其中將該第一中間結果轉發到該第二可重配置單元包括觸發該第一中間結果之該轉發的資料流管線階段, 其中被配置到該第一可重配置單元的該應用程式還包括第三資料流區段, 以及其中該第一可重配置單元回應於觸發該第一中間結果之該轉發的該管線階段的完成而執行該第三資料流區段。
  29. 一種用於在複數個處理器上執行應用程式的電腦實現的方法,包括: 提供一系統,其包括複數個功能單元和互連組構,透過該互連組構,資料可以使用點對點(P2P)訊息傳遞協定層從該些功能單元之一生產單元傳輸到該些功能單元之一消費單元,該複數個功能單元包括可在第一級可配置粒度配置以實現資料流架構的第一可重配置單元,以及可在第二級可配置粒度配置以實現資料流架構的第二可重配置單元,該第一級可配置粒度與該第二級可配置粒度不同; 一主機系統,將應用程式寫入該些功能單元中,其包括在該第一級可配置粒度為該第一可重配置單元配置實現該應用程式之第一資料流區段的一或多個資料流管線,並且進一步在該第二級可配置粒度為該第二可重配置單元配置實現該應用程式之第二資料流區段的一或多個資料流管線; 其中該第一可重配置單元使用字組寬的暫存器來配置發送插槽(IS)、算術邏輯單元(ALU)、功能單元、處理元件(PE)、暫存器檔(RF)及互連,以及其中該第二級可配置粒度使用逐位元查找表(LUT)來配置交換器; 在該第一可重配置單元上執行該第一資料流區段以產生第一中間結果,該第一可重配置單元在該第一資料流區段的管線階段中透過該P2P訊息傳遞協定將該第一中間結果轉發到該第二可重配置單元而不經過該主機系統; 根據該第一中間結果在該第二可重配置單元上執行該第二資料流區段以產生第二中間結果,該第二可重配置單元在該第二資料流區段的管線階段中透過該P2P訊息傳遞協定將該第二中間結果轉發到一繼續的可重配置單元而不經過該主機系統;以及 根據該第二中間結果在該繼續的可重配置單元上繼續執行該應用程式。
TW110147198A 2020-12-18 2021-12-16 對可重配置處理器之資料流功能卸載 TWI784845B (zh)

Applications Claiming Priority (8)

Application Number Priority Date Filing Date Title
US17/127,818 2020-12-18
US17/127,818 US11182264B1 (en) 2020-12-18 2020-12-18 Intra-node buffer-based streaming for reconfigurable processor-as-a-service (RPaaS)
US17/127,929 US11182221B1 (en) 2020-12-18 2020-12-18 Inter-node buffer-based streaming for reconfigurable processor-as-a-service (RPaaS)
US17/127,929 2020-12-18
US17/379,921 US11392740B2 (en) 2020-12-18 2021-07-19 Dataflow function offload to reconfigurable processors
US17/379,924 US11237880B1 (en) 2020-12-18 2021-07-19 Dataflow all-reduce for reconfigurable processor systems
US17/379,924 2021-07-19
US17/379,921 2021-07-19

Publications (2)

Publication Number Publication Date
TW202240394A TW202240394A (zh) 2022-10-16
TWI784845B true TWI784845B (zh) 2022-11-21

Family

ID=85460438

Family Applications (1)

Application Number Title Priority Date Filing Date
TW110147198A TWI784845B (zh) 2020-12-18 2021-12-16 對可重配置處理器之資料流功能卸載

Country Status (1)

Country Link
TW (1) TWI784845B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11782760B2 (en) 2021-02-25 2023-10-10 SambaNova Systems, Inc. Time-multiplexed use of reconfigurable hardware

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170220499A1 (en) * 2016-01-04 2017-08-03 Gray Research LLC Massively parallel computer, accelerated computing clusters, and two-dimensional router and interconnection network for field programmable gate arrays, and applications
US20170315815A1 (en) * 2016-04-28 2017-11-02 Microsoft Technology Licensing, Llc Hybrid block-based processor and custom function blocks
US20200301898A1 (en) * 2018-06-25 2020-09-24 BigStream Solutions, Inc. Systems and methods for accelerating data operations by utilizing dataflow subgraph templates

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170220499A1 (en) * 2016-01-04 2017-08-03 Gray Research LLC Massively parallel computer, accelerated computing clusters, and two-dimensional router and interconnection network for field programmable gate arrays, and applications
US20170315815A1 (en) * 2016-04-28 2017-11-02 Microsoft Technology Licensing, Llc Hybrid block-based processor and custom function blocks
US20200301898A1 (en) * 2018-06-25 2020-09-24 BigStream Solutions, Inc. Systems and methods for accelerating data operations by utilizing dataflow subgraph templates

Also Published As

Publication number Publication date
TW202240394A (zh) 2022-10-16

Similar Documents

Publication Publication Date Title
US11237880B1 (en) Dataflow all-reduce for reconfigurable processor systems
US11847395B2 (en) Executing a neural network graph using a non-homogenous set of reconfigurable processors
US11625283B2 (en) Inter-processor execution of configuration files on reconfigurable processors using smart network interface controller (SmartNIC) buffers
US11182264B1 (en) Intra-node buffer-based streaming for reconfigurable processor-as-a-service (RPaaS)
WO2022133047A1 (en) Dataflow function offload to reconfigurable processors
TWI802332B (zh) 可重組態處理器的資源分配
CN118043795A (zh) 用于粗粒度可重新配置架构的掩蔽
CN114691354A (zh) 动态分解及线程分配
CN118043796A (zh) 存储器计算系统中的基于片块的结果缓冲
CN118076944A (zh) 可重新配置计算组构中的循环执行期间的数据存储
TW202227979A (zh) 用於檢測串流相容及廣播相容的資料存取型樣的編譯時邏輯
TWI784845B (zh) 對可重配置處理器之資料流功能卸載
US11983141B2 (en) System for executing an application on heterogeneous reconfigurable processors
CN115705213A (zh) 封装条件分支操作
CN117795496A (zh) 可重新配置计算组构中的并行矩阵运算
TWI792773B (zh) 用於可重配置處理器即服務(RPaaS)的節點內基於緩衝器的串流
US12008417B2 (en) Interconnect-based resource allocation for reconfigurable processors
US11443014B1 (en) Sparse matrix multiplier in hardware and a reconfigurable data processor including same
US11860800B2 (en) Kernel mapping to nodes in compute fabric
WO2022133043A1 (en) Runtime execution of configuration files on reconfigurable processors with varying configuration granularity
US20230297527A1 (en) Direct Access to Reconfigurable Processor Memory
Hafdi Mixed-precision architecture for flexible neural network accelerators
CN118043794A (zh) 粗粒度可重新配置的架构中的连接性
CN118119933A (zh) 用于触发协作进程的提前终止的机制
CN117435548A (zh) 用于硬件组件之间的通信的方法和系统