TW202227979A - 用於檢測串流相容及廣播相容的資料存取型樣的編譯時邏輯 - Google Patents

用於檢測串流相容及廣播相容的資料存取型樣的編譯時邏輯 Download PDF

Info

Publication number
TW202227979A
TW202227979A TW110134440A TW110134440A TW202227979A TW 202227979 A TW202227979 A TW 202227979A TW 110134440 A TW110134440 A TW 110134440A TW 110134440 A TW110134440 A TW 110134440A TW 202227979 A TW202227979 A TW 202227979A
Authority
TW
Taiwan
Prior art keywords
consumers
access patterns
producers
data
producer
Prior art date
Application number
TW110134440A
Other languages
English (en)
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
Application filed by 美商聖巴諾瓦系統公司 filed Critical 美商聖巴諾瓦系統公司
Publication of TW202227979A publication Critical patent/TW202227979A/zh

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0842Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
    • G06F15/7885Runtime interface, e.g. data exchange, runtime control
    • G06F15/7892Reconfigurable logic embedded in CPU, e.g. reconfigurable unit
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/457Communication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4494Execution paradigms, e.g. implementations of programming paradigms data driven
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3065Monitoring arrangements determined by the means or processing involved in reporting the monitored data
    • G06F11/3072Monitoring arrangements determined by the means or processing involved in reporting the monitored data where the reporting involves data filtering, e.g. pattern matching, time or event triggered, adaptive or policy-based reporting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2205/00Indexing scheme relating to group G06F5/00; Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F2205/12Indexing scheme relating to groups G06F5/12 - G06F5/14
    • G06F2205/123Contention resolution, i.e. resolving conflicts between simultaneous read and write operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/06Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
    • G06F5/10Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor having a sequence of storage locations each being individually accessible for both enqueue and dequeue operations, e.g. using random access memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Devices For Executing Special Programs (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)

Abstract

用於應用程式的資料流圖具有操作單元,該些操作單元被配置為張量的生產者及消費者。特定生產者的寫存取型樣指定該特定生產者產生張量元素的順序,以及相應消費者的讀存取型樣指定該相應消費者處理該些張量元素的順序。公開的技術檢測寫存取型樣和讀存取型樣之間不匹配的生產者和相應消費之間的衝突。衝突發生在特定生產者產生張量的元素的順序與相應消費者處理張量的元素的順序不同時。公開的技術透過在生產者和相應消費者之間插入緩衝器來解決衝突。

Description

用於檢測串流相容及廣播相容的資料存取型樣的編譯時邏輯
本技術係關於串流相容及廣播相容的資料存取型樣的編譯時檢測,其可以特別應用於粗粒度可重配置架構(CGRA)。 優先權申請案
本申請案享有2020年9月16日申請的、名稱為“用於檢測串流相容及廣播相容的資料存取型樣的編譯時邏輯(Compile Time Logic for Detecting Streaming Compatible and Broadcast Compatible Data Access Patterns)”的美國非臨時專利申請案號17/023,015的優先權及權益(代理人案號為SBNV 1022-1)。 合併案
出於所有目的,透過引用將下面內容併入,如在本文中完整闡述一般:
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程式語言設計與實施(PLDI)研討會論文集,第43屆計算機結構國際研討會論文集,2018;
美國非臨時專利申請案號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)。
本節中所討論的主題不應僅由於在本節中被提及而被認為是現有技術。相似的,本節中所提及的或與作為背景技術而提供的主題相關聯的問題不應被認為是現有技術中先前已公認的。本節中的主題僅表示不同的方法,其中以及其本身亦可對應於申請專利範圍技術的實現。
可重配置處理器,包括現場可編程閘陣列(FPGA),可被配置成比使用執行電腦程式的通用處理器可達成的更有效率或更快地實現各種功能。所謂的粗粒度可重配置架構(CGRA)正在開發中,其中陣列中的可配置單元比典型、更細粒度的FPGA中所使用的更複雜,並且能夠更快或更有效率地執行各類功能。例如,已經提出了可以為機器學習和人工智慧負載實施節能加速器的CGRA。參見Prabhakar等人,“Plasticine: A Reconfigurable Architecture for Parallel Patterns”,ISCA ’17,2017年6月24-28日,加拿大安大略省多倫多。
在FPGA和CGRA等空間架構中,可以在空間中同時實例化多個高階運算子或核心,以平行或管線平行方式運行。在這種基於核心的方案中,個別操作在個別張量級別具有輸入和輸出。雖然針對這些核心的一個簡單設計是讓每個核心提供一個單獨的記憶體緩衝器來完整地保存每個輸入和輸出張量,但此解決方案通常不會提供實體記憶體資源的最佳利用。例如,若兩個連續的張量操作,如逐元素(element-wise)加法和逐元素雙曲正切(hyperbolic tangent)(Tanh),被實現為具有相同通量(throughput)的核心,則它們可以在沒有任何中間緩衝器的情況下被實例化,因為其中一個可以直接饋送另一個。這種最佳化類似於硬體中的迴圈融合。不過,最佳的是使用核心實現,其盡可能多地“串流”它們的輸入和輸出,並且僅在必要時才依賴緩衝器設置。
為了最大化操作效能及可重配置處理器上的處理元件之間的資料傳輸,需要在處理元件之間串流及廣播資料的緩衝器插入機制。
描述了一種能夠在可劃分為子陣列的陣列中包含可編程元素的粗粒度可重配置陣列處理器和其他類型的可重配置處理器(例如,FPGA)中對串流相容及廣播相容的資料存取型樣進行編譯時檢測的技術。
描述了一種資料處理系統。該資料處理系統包括記憶體和編譯時邏輯。記憶體儲存應用程式的資料流圖。資料流圖具有操作單元,該些操作單元被配置成生產者用以產生用於執行應用程式的張量,以及被配置成消費者用以消耗用於執行應用程式的張量。記憶體還儲存生產者的寫存取型樣,以及消費者的讀存取型樣。特定生產者的寫存取型樣指定特定生產者產生張量的元素的順序。相應消費者的讀存取型樣指定相應消費者處理張量的元素的順序。編譯時邏輯可以存取記憶體,並配置成處理資料流圖以檢測寫存取型樣和讀存取型樣之間不匹配的某些生產者與相應消費者之間的衝突。衝突發生在特定生產者產生張量的元素的順序與相應消費者處理張量的元素的順序不同時。編譯時邏輯被配置成透過在某些生產者與相應消費者之間插入緩衝器來解決衝突。
在一種實現中,某些生產者被配置成根據寫存取型樣將張量的元素寫入緩衝器中。在一些實現中,相應消費者被配置成根據讀存取型樣從緩衝器讀取張量的元素。
在一種實現中,編譯時邏輯還被配置成檢測一組相應消費者,其具有相同用於處理張量的元素的讀存取型樣。在一些實現中,編譯時邏輯還被配置成在該組相應消費者與該特定生產者之間插入單一緩衝器。在一種實現中,該特定生產者被配置成根據寫存取型樣將張量的元素寫入該單一緩衝器中。在一些實現中,在該組相應消費者中的消費者被配置成根據讀存取型樣從該單一緩衝器讀取張量的元素。
在一種實現中,寫存取型樣和讀存取型樣是基於由操作單元實現的操作類型定義的。
在一種實現中,編譯時邏輯還被配置成產生資料流圖的修改版本,其中在某些生產者與相應消費者之間插入緩衝器。在一些實現中,運行時(runtime)邏輯被配置成將可重配置處理器的實體計算單元和實體記憶體單元分配給資料流圖的修改版本。在其他實現中,運行時邏輯被配置成基於該分配在可重配置處理器上執行資料流圖的修改版本。
在一種實現中,描述一種電腦實現的方法。該方法包括儲存應用程式的資料流圖,該資料流圖具有操作單元,該些操作單元被配置成生產者用以產生用於執行應用程式的張量,以及被配置成消費者用以消耗用於執行應用程式的張量。該方法還包括儲存生產者的寫存取型樣,以及消費者的讀存取型樣。特定生產者的寫存取型樣指定特定生產者產生張量的元素的順序,以及相應消費者的讀存取型樣指定相應消費者處理張量的元素的順序。該方法還包括檢測寫存取型樣和讀存取型樣之間不匹配的某些生產者與相應消費者之間的衝突。衝突發生在特定生產者產生張量的元素的順序與相應消費者處理張量的元素的順序不同時。該方法還包括透過在某些生產者與相應消費者之間插入緩衝器來解決衝突。
所公開之技術或其要素的一或多個實現可以以電腦產品的形式實現,該電腦產品包括具有用於執行所指示的方法步驟的電腦可使用程式碼的非暫時性電腦可讀取儲存媒體。此外,所公開之技術或其要素的一或多個實現可以以裝置的形式實現,該裝置包括記憶體和耦合到該記憶體並且可操作以執行示例性方法步驟的至少一個處理器。再進一步,再另一方面,所公開之技術或其要素的一或多個實現可以以用於執行本文描述的一或多個方法步驟的手段的形式來實現;該手段可以包括(i)硬體模組、(ii)在一或多個硬體處理器上執行的軟體模組、或(iii)硬體和軟體模組的組合;(i)-(iii)中的任一項實現本文中闡述的特定技術,以及軟體模組儲存在電腦可讀取儲存媒體(或多個此類媒體)中。
所公開之技術的這些和其他特徵、方面及優點將從其說明性實施方式的以下詳細描述中變得顯而易見,其將結合附圖閱讀。
以下討論旨在使本領域的任何技術人士能夠製造和使用所公開的技術,並在特定應用及其要求的上下文中提供。對所公開之實施方式的各種修改對於本領域的技術人士而言將是顯而易見的,並且在不脫離所公開之技術的精神和範圍的情況下,本文中定義的一般原理可以應用於其他實施方式和應用。因此,所公開的技術並不旨在限於所示的實施方式,而是旨在符合與本文所公開的原理和特徵一致的最寬範圍。
圖1示出依據所公開之技術的串流相容及廣播相容的資料存取型樣的編譯時檢測的一種實現。可重配置資料流資源池122中的可重配置資料流資源包括可重配置處理器。可重配置處理器包括可編程互連結構中的可配置單元陣列(例如,計算單元和記憶體單元)。可重配置處理器中的可配置單元陣列可被劃分成複數個可配置單元的子陣列(或磚片)。關於可重配置處理器的架構的額外細節稍後在圖8、9、10、10B、11及12中討論。
可重配置資料流資源池122還包括匯流排資源(或傳輸資源)。匯流排資源的範例包括PCIe通道、DMA通道和DDR通道。可重配置資料流資源池122還包括記憶體資源(或儲存資源)。記憶體資源的範例包括主記憶體(例如,晶片外/外部DRAM)、本地輔助儲存器(例如,本地磁碟(例如,HDD、SSD))和遠端輔助儲存器(例如,分散式檔案系統、網站伺服器)。記憶體資源的其他範例包括鎖存器、暫存器和快取(例如,SRAM)。可重配置資料流資源池122是動態可擴展的,以滿足應用程式102(或使用者應用程式102)所需的性能目標。應用程式102透過一或多個網路(例如,網際網路)存取可重配置資料流資源池122。
在一些實現中,根據所公開技術的不同實現,不同的計算規模和階層形成可重配置資料流資源池122。在一個範例中,可重配置資料流資源池122是運行複數個可重配置處理器的節點(或單一機器),由所需的匯流排和記憶體資源支持。該節點還包括主機處理器(例如,CPU),其例如透過PCIe介面與複數個可重配置處理器交換資料。主機處理器包括運行時處理器,其為請求從主機處理器執行的應用程式管理資源分配、記憶體映射和配置檔案的執行。在另一範例中,可重配置資料流資源池122是節點的框架(rack)(或叢集),使得框架中的每個節點運行個別複數個可重配置處理器,並且包括配置有個別運行時處理器的個別主機處理器。運行時處理器分散在節點上並且彼此通訊,因此它們不僅可以統一存取附接到它們本身運行的節點的可重配置處理器,還可以統一存取附接到資料中心的其他每個節點的可重配置處理器。
框架中的節點例如透過乙太網路或InfiniBand(IB)連接。在又另一範例中,可重配置資料流資源池122是包含複數個框架的群(pod)。在又另一範例中,可重配置資料流資源池122是包含複數群的超級群(superpod)。在又另一範例中,可重配置資料流資源池122是包含複數個超級群的區(zone)。在又另一範例中,可重配置資料流資源池122是包含複數個區的資料中心。
應用程式102透過對個別計算和記憶體元件進行編程以非同步接收、處理和發送資料並控制資訊,在分散式形式的可重配置處理器上執行。在可重配置處理器中,計算可以作為深度、巢狀資料流管線執行,其非常有效地利用巢狀平行性和資料局部性。這些資料流管線包含數個計算階段,其中每個階段以不規則記憶體存取型樣從一或多個輸入緩衝器讀取資料、對資料執行計算同時使用一或多個內部緩衝器來儲存和提取中間結果、並產生要寫到一或多個輸出緩衝器的輸出。這些管線的結構取決於表示應用程式的控制和資料流圖。管線可以任意地嵌套,並在彼此之中循環。
應用程式102包含高階程式。高階程式是使用C、C++、Java、JavaScript、Python和Spatial等的程式語言編寫的原始碼,例如使用PyTorch、TensorFlow、ONNX、Caffe和Keras等的深度學習框架。高階程式可以實現AlexNet、VGG Net、GoogleNet、ResNet、ResNeXt、RCNN、YOLO、SqueezeNet、SegNet、GAN、BERT、ELMo、USE、Transformer和Transformer-XL等機器學習模型的計算機結構和演算法。在一範例中,高階程式可以實現具有多個處理層的卷積神經網路,使得每個處理層可以包括一或多個巢狀迴圈。高階程式可以執行不規則的記憶體操作,其包括存取輸入和權重,並且在輸入和權重之間執行矩陣乘法。高階程式可以包括具有高迭代計數的巢狀環圈和迴圈體,其加載來自前一處理層的輸入值,並將其與後一處理層的權重相乘,以產生輸出給後一處理層。高階程式可以具有最外層迴圈體的迴圈級平行性,其可以使用粗粒度管線操作進行利用。高階程式可以具有最內層迴圈體的指令級平行性,其可以使用迴圈展開、SIMD向量化和管線操作來進行利用。
關於應用程式102之高階程式中的迴圈,直接嵌套在迴圈體中的迴圈被稱為外父迴圈的子迴圈。若一迴圈沒有任何子迴圈,即,其體內沒有任何巢狀迴圈,則稱為最內層迴圈。若一迴圈沒有任何父迴圈,即,其並未嵌套在另一迴圈的體內,則其為最外層迴圈。不完美巢狀迴圈的主體包含非迴圈的語句(例如,基元算術、邏輯和關係運算)及一或多個子迴圈的混合體。不完美巢狀迴圈中的平行性可以在任何或所有迴圈級別中、以及在包含迴圈體的運算中使用。平行性可以以多種形式出現,諸如細粒度和粗粒度管線平行、資料平行和任務平行。
在一些實現中,軟體開發套件(SDK)(或資料流圖產生器104)產生應用程式102之高階程式的資料流圖106。SDK將高階程式的輸入行為描述轉換為中間表示,諸如資料流圖106。這可以包括程式碼最佳化步驟,如錯誤資料相依刪除、死碼刪除和常數折疊。資料流圖106對高階程式的資料和控制相依性進行編碼。
資料流圖106包含節點和邊。節點可以表示計算操作和記憶體分配。邊可以表示資料流和控制流。在一些實現中,高階程式中的每個迴圈都可以表示為資料流圖106中的控制器。資料流圖106支持分支、迴圈、函數呼叫和控制相依性的其他變體。在一些實現中,在產生了資料流圖106之後,可以執行專注於迴圈轉換的額外分析或最佳化,諸如迴圈展開、迴圈管線化、迴圈分裂/融合及迴圈分塊(loop tiling)。
SDK還支持在多級別,例如,從高階深度學習框架到C++和組合語言,對可重配置資料流資源池122中的可重配置處理器進行編程。在一些實現中,SDK允許程式設計師開發直接在可重配置處理器上運行的程式碼。在其他實現中,SDK提供包含預定義函數的程式庫,如在可重配置處理器上創建、執行和分析資料流圖106所需的線性代數運算、逐元素張量運算、非線性及縮減。SDK通過應用程式介面(API)與深度學習框架進行通訊。
資料流圖中的節點表示運算單元,其可被配置為用以產生用於執行應用程式之張量的生產者,以及用以消耗用於執行應用程式之張量的消費者。生產者和消費者沿著資料連接非同步地傳輸資料。張量包括一或多個向量。存取型樣確定器108確定資料流圖中的每個運算單元的資料存取型樣。運算單元的資料存取型樣由運算單元所實現的運算類型定義。特定生產者的寫存取型樣指定特定生產者產生張量的元素的順序。相應消費者的讀存取型樣指定相應消費者處理張量的元素的順序。生產者的寫存取型樣110和消費者的讀存取型樣112儲存在記憶體中,並且遍及如非線性的所有已知運算,諸如整流線性單元(ReLU)及其變體(例如,洩漏ReLU)、雙曲正切(tanh)、sigmoid、softmax等,逐元素加法、矩陣乘法(例如,通用矩陣乘法(GeMM)、層正規化(例如,批次正規化)、如交叉熵的損耗函數、如轉置的張量形狀修改器,等等。
編譯器114將資料流圖106轉換為特定於硬體的配置,該配置在由編譯器114產生的執行檔中指定。在一種實現中,編譯器114將資料流圖106劃分為記憶體分配和執行片段,並且這些劃分在執行檔案中指定。執行片段表示對資料進行運算。執行片段可以包括表示工作量的程式的部分。執行片段可以包括由一組迴圈、一組圖形節點或需要同步的一些其他工作單元所包含的計算。根據程式的需要,執行片段可以包括固定的或可變的工作量。執行片段中的不同片段可以包括不同的計算量。執行片段可以表示平行模式或部分的平行模式,並且可以非同步地執行。
在一些實現中,將資料流圖106劃分為執行片段包括將資料流圖106之巢狀迴圈的至少一個最內迴圈內的計算視為單獨的執行片段。在其他實現中,將資料流圖106劃分為執行片段包括將圍繞資料流圖106之最內迴圈的外迴圈的計算視為單獨的執行片段。在不完美巢狀迴圈的情況下,迴圈體內直到該迴圈體內巢狀迴圈之起始為止的運算都被組合在一起作為單獨的執行片段。
記憶體分配表示在晶片上(on-chip)及/或晶片外(off-chip)記憶體中為實現資料流圖106所需的資料創建邏輯記憶體空間,並且在執行檔案中指定這些記憶體分配。記憶體分配定義了硬體資源(功能單元、儲存器或連接元件)的類型和數量。主記憶體(例如,DRAM)是可以進行記憶體分配的晶片外記憶體。高速暫存記憶體(scratchpad memory)(例如,SRAM)是可以進行記憶體分配的晶片上記憶體。可以針對各種存取型樣和佈局進行記憶體分配的其他記憶體類型包括唯讀查找表(LUT)、固定大小的佇列(例如,FIFO)及暫存器檔案。
編譯器114將記憶體分配綁定到虛擬記憶體單元以及將執行片段綁定到虛擬計算單元,並且在執行檔案中指定這些綁定。在一些實現中,編譯器114將執行片段劃分成記憶體片段和計算片段,並且在執行檔案中指定這些劃分。記憶體片段包括終將引導至記憶體存取的位址計算。計算片段包括父執行片段中的所有其他運算。在一種實現中,每個執行片段被分解成複數個記憶體片段和恰好一個計算片段。在一種實現中,編譯器114使用反向資料流分析來執行劃分,以便遞迴標記記憶體存取中使用的位址的輸入,直到編譯器114達到常數值或(界限)迴圈/型樣迭代器之任一者。單一執行片段可以產生一或多個記憶體片段,這取決於有多少記憶體存取存在於原始迴圈體中。在多個記憶體存取共享相同的記憶體尋址邏輯的情況下,位址計算可能會重複,以從同一執行片段創建多個記憶體片段。
執行片段的記憶體片段被配置成編索引到資料結構。至少一個記憶體片段編索引到記憶體分配之一的邏輯記憶體空間中的資料結構。每個計算和記憶體片段都保留有關其迴圈體直接包含相應執行片段中的運算的所有迴圈的資訊。在一種實現中,這對應於將每個迴圈的迴圈迭代器的計算複製到每個計算和記憶體片段。這種複製允許每個片段保留與原始程式相同的迭代行為,同時還允許迴圈迭代器的分散式計算。
編譯器114將記憶體片段分配給虛擬記憶體單元以及將計算片段分配給虛擬計算單元,並且在執行檔案中指定這些分配。將每個記憶體片段逐運算地映射到對應於被存取的記憶體的虛擬記憶體。將每個運算降級為該虛擬記憶體單元的相應配置中間表示。將每個計算片段逐運算地映射到新分配的虛擬計算單元。將每個運算降級為該虛擬計算單元的相應配置中間表示。
編譯器114將虛擬記憶體單元配置給可重配置處理器的實體記憶體單元(例如,可重配置處理器的型樣記憶體單元(PMU))以及將虛擬計算單元配置給可重配置處理器的實體計算單元(例如,可重配置處理器的型樣計算單元(PCU)),並且在執行檔案中指定這些配置。編譯器114將實體記憶體單元和實體計算單元放置在可重配置處理器的可配置單元陣列中的位置上,以及在放置的位置之間路由資料和控制網路,並且在執行檔案中指定這些放置和路由。在一種實現中,這包括在每個實體記憶體和計算單元內配置諸如計數器和暫存器的實體資源,並且在執行檔案中指定這些配置。
編譯器114將使用諸如Keras和PyTorch等常用開源套裝軟體開發的應用程式102轉譯為可重配置處理器規格。編譯器114產生配置檔案118,其帶有用於放置的位置和路由的資料及控制網路的配置資料。在一種實現中,這包括透過將單元放置及路由到處理器陣列上來分配實體記憶體和計算單元的坐標和通訊資源,同時最大化頻寬和最小化延遲。
編譯器114包含編譯時邏輯116。編譯時邏輯116還包含衝突檢測邏輯202和衝突解決邏輯212。衝突檢測邏輯202檢測寫存取型樣和讀存取型樣之間存在不匹配的某些生產者與相應的消費者之間的衝突。衝突發生在特定生產者產生張量的元素的順序與相應消費者處理張量的元素的順序不同時。衝突解決邏輯212透過在某些生產者和相應的消費者之間插入緩衝器來解決衝突。這些插入的緩衝器是邏輯緩衝器。邏輯緩衝器被分配在可重配置資料流資源池122中的實體資源(例如,實體記憶體單元(PMU)和實體計算單元(PCU))。在一些實現中,為單一邏輯緩衝器分配多個PMU。
在圖3中,示例性資料流圖300具有五個運算單元:整流線性單元(ReLU)302、逐元素加法單元(Add)318、第一矩陣乘法單元(GeMM)328、第二矩陣乘法單元(GeMM)338及層正規化(layer normalization)單元(LN)348。由資料流圖300處理的張量具有八個向量“0 1 2 3 4 5 6 7”,並且每個向量由其相應的數字索引標識。
衝突檢測邏輯202還將生產者和消費者之間的資料存取型樣分類為“串流相容”(無衝突)或“廣播相容”(衝突)。在圖3中,ReLU 302是生產者,而Add 318、GeMM 328、GeMM 338及LN 348是消費者,因為它們從ReLU 302接收資料。生產者ReLU 302具有寫存取型樣A(wpA),即,生產者ReLU 302按“0 2 4 6 1 3 5 7”的順序產生八個向量。消費者Add 318具有讀存取型樣A(rpA),其與寫存取型樣A相同,即,消費者Add 318以與生產者ReLU 302產生這些向量的相同順序處理這八個向量。因此,生產者ReLU 302與消費者Add 318之間沒有衝突,因此將它們之間的資料存取型樣歸類為“串流相容”。
消費者LN 348具有讀存取型樣C(rpC),即,消費者LN 348按“1 4 7 5 2 6 0 3”的順序處理八個向量。因此,生產者ReLU 302與消費者LN 348之間存在衝突,因此將它們之間的資料存取型樣歸類為“廣播相容”。
消費者GeMM 328和GeMM 338皆具有相同的讀存取型樣B(rpB),即,消費者GeMM 328和GeMM 338分別按“7 1 6 0 5 2 3 4”的順序處理八個向量。因此,生產者ReLU 302與消費者GeMM 328和GeMM 338之間存在各自的衝突,因此將它們之間的資料存取型樣歸類為“廣播相容”。
在圖4中,衝突解決邏輯212透過在那些被歸類為廣播相容的資料存取型樣中插入緩衝器來解決衝突。因此,緩衝器446被插入在生產者ReLU 302和消費者LN 348之間。一旦插入,生產者ReLU 302根據寫存取型樣A(wpA)將八個向量寫入緩衝器446,而消費者LN 348根據讀存取型樣C(rpC)從緩衝器446讀取八個向量。
由於消費者GeMM 328和GeMM 338具有相同的讀存取型樣B(rpB),因此可將它們視為是一群組426。然後,衝突解決邏輯212僅在生產者ReLU 302和群組426中的消費者GeMM 328和GeMM 338之間插入單一緩衝器436。一旦插入,生產者ReLU 302根據寫存取型樣A(wpA)將八個向量寫入緩衝器436,而消費者GeMM 328和GeMM 338分別根據讀存取型樣B(rpB)從緩衝器436讀取八個向量。
此外,由於生產者ReLU 302與消費者Add 318之間的資料存取型樣被歸類為串流相容,因此不存在衝突,因此不需要透過緩衝器插入來解決衝突。
在圖5中,另一示例性資料流圖500具有九個運算單元:整流線性單元(ReLU)522、逐元素加法單元(Add)504、softmax單元(SM)512、雙曲正切單元(Tanh)524、sigmoid單元(SG)506、第一矩陣乘法單元(GeMM)514、第二矩陣乘法單元(GeMM)526、層正規化單元(LN)516、第三矩陣乘法單元(GeMM)508及第四矩陣乘法單元(GeMM)518。由資料流圖500處理的張量具有六個向量“0 1 2 3 4 5”,並且每個向量由其相應的數字索引標識。
衝突檢測邏輯202還將生產者和消費者之間的資料存取型樣分類為“串流相容”(無衝突)或“廣播相容”(衝突)。在子圖560中,ReLU 522是生產者,而Add 504、SM 512和Tanh 524是消費者,因為它們從ReLU 522接收資料。生產者ReLU 302具有寫存取型樣A(wpA),即,生產者ReLU 302按“1 3 5 4 0 2”的順序產生六個向量。消費者Add 504和Tanh 524具有讀存取型樣A(rpA),其與寫存取型樣A相同,即,消費者Add 504和Tanh 524以與生產者ReLU 522產生這些向量的相同順序處理這六個向量。因此,生產者ReLU 522與消費者Add 504和Tanh 524之間沒有衝突,因此將它們之間的資料存取型樣歸類為“串流相容”。
在子圖560中,消費者SM 512具有讀存取型樣B(rpB),即,消費者SM 512按“1 4 5 3 2 0”的順序處理六個向量。因此,生產者ReLU 302與消費者SM 512之間存在衝突,因此將它們之間的資料存取型樣歸類為“廣播相容”。
在子圖562中,Add 504是生產者,而SG 506是消費者,因為SG 506從Add 504接收資料。生產者Add 504具有寫存取型樣A(wpA),即,生產者Add 504按“1 3 5 4 0 2”的順序產生六個向量。消費者SG 506具有讀存取型樣A(rpA),其與寫存取型樣A相同,即,消費者SG 506以與生產者Add 504所產生的相同順序處理這六個向量。因此,生產者Add 504和消費者SG 506之間沒有衝突,因此將它們之間的資料存取型樣歸類為“串流相容”。
在子圖564中,SM 512是生產者,而GeMM 514是消費者,因為GeMM 514從SM 512接收資料。生產者SM 512具有寫存取型樣B(wpB),即,生產者SM 512按“1 4 5 3 2 0”的順序產生六個向量。然而,消費者GeMM 514具有讀存取型樣C(rpC),即,消費者GeMM 514按“4 2 0 5 3 1”的順序處理這六個向量。因此,生產者SM 512和消費者GeMM 514之間存在衝突,因此將它們之間的資料存取型樣歸類為“廣播相容”。
在子圖566中,Tanh 524是生產者,而GeMM 526是消費者,因為GeMM 526從Tanh 524接收資料。生產者Tanh 524具有寫存取型樣A(wpA),即,生產者Add 504按“1 3 5 4 0 2”的順序產生六個向量。然而,消費者GeMM 526具有讀存取型樣D(rpD),即,消費者GeMM 526按“0 2 1 3 4 5”的順序處理這六個向量。因此,生產者Tanh 524與消費者GeMM 526之間存在衝突,因此將它們之間的資料存取型樣歸類為“廣播相容”。
在子圖568中,有三個生產者SG 506、GeMM 514和GeMM 526,以及有一個消費者LN 516。生產者SG 506具有寫存取型樣A(wpA),即,生產者SG 506按“1 3 5 4 0 2”的順序產生六個向量。生產者GeMM 514具有寫存取型樣C(wpC),即,生產者GeMM 514按“0 2 1 3 4 5”的順序產生六個向量。生產者GeMM 526具有寫存取型樣D(wpD),即,生產者GeMM 526按“0 2 1 3 4 5”的順序產生六個向量。然而,消費者LN 516具有讀存取型樣E(rpE),即,消費者LN 516按“5 2 0 1 4 3”的順序處理這六個向量。因此,消費者LN 516與各個生產者SG 506、GeMM 514及GeMM 526之間存在各自的衝突,因此它們之間各自的資料存取型樣被歸類為“廣播相容”。
在子圖570中,LN 516是生產者,而GeMM 508和518是消費者。消費者GeMM 508和GeMM 518皆具有相同的讀存取型樣F(rpF),即,消費者GeMM 508和GeMM 518分別按“3 4 0 1 5 2”的順序處理六個向量。因此,生產者LN 516與消費者GeMM 508和GeMM 518之間存在各自的衝突,因此它們之間各自的資料存取型樣被歸類為“廣播相容”。
在圖6中,衝突解決邏輯212透過在那些被歸類為廣播相容的資料存取型樣中插入緩衝器來解決衝突。因此,緩衝器503被插入在生產者ReLU 522和消費者SM 512之間。一旦插入,生產者ReLU 522根據寫存取型樣A(wpA)將六個向量寫入緩衝器503,而消費者SM 512根據讀存取型樣B(rpB)從緩衝器503讀取六個向量。
類似的,緩衝器513被插入在生產者SM 512和消費者GeMM 514之間。一旦插入,生產者SM 512根據寫存取型樣B(wpB)將六個向量寫入緩衝器513,而消費者GeMM 514根據讀存取型樣C(rpC)從緩衝器513讀取六個向量。
類似的,緩衝器525被插入在生產者Tanh 524和消費者GeMM 526之間。一旦插入,生產者Tanh 524根據寫存取型樣A(wpA)將六個向量寫入緩衝器525,而消費者GeMM 526根據讀存取型樣D(rpD)從緩衝器525讀取六個向量。
類似的,緩衝器507被插入在生產者SG 506和消費者LN 516之間。一旦插入,生產者SG 506根據寫存取型樣A(wpA)將六個向量寫入緩衝器507,而消費者LN 516根據讀存取型樣E(rpE)從緩衝器507讀取六個向量。
類似的,緩衝器515被插入在生產者GeMM 514和消費者LN 516之間。一旦插入,生產者GeMM 514根據寫存取型樣C(wpC)將六個向量寫入緩衝器515,而消費者LN 516根據讀存取型樣E(rpE)從緩衝器515讀取六個向量。
類似的,緩衝器527被插入在生產者GeMM 526和消費者LN 516之間。一旦插入,生產者GeMM 526根據寫存取型樣D(wpD)將六個向量寫入緩衝器527,而消費者LN 516根據讀存取型樣E(rpE)從緩衝器527讀取六個向量。
由於消費者GeMM 508和GeMM 518具有相同的讀存取型樣F(rpF),因此可將它們視為群組630的一部分。然後,衝突解決邏輯212僅在生產者LN 516和群組630中的消費者GeMM 508和GeMM 518之間插入單一緩衝器517。一旦插入,生產者LN 516根據寫存取型樣E(wpE)將六個向量寫入緩衝器517,而消費者GeMM 508和GeMM 518分別根據讀存取型樣E(rpE)從緩衝器517讀取六個向量。
此外,由於生產者ReLU 522與消費者Add 504和Tanh 524之間、及生產者Add 504與消費者SG 506之間各自的資料存取型樣被歸類為串流相容,因此不存在衝突,因此不需要透過緩衝器插入來解決衝突。
圖7示出一示例性資料結構700,其維護生產者到消費者的映射,並將消費者分類為串流相容或廣播相容的。資料結構700具有行702,標識不同子圖560、562、564、566、568和570中的個別生產者。資料結構700具有行712,標識不同子圖560、562、564、566、568和570中個別生產者的寫存取型樣。資料結構700具有行722,標識不同子圖560、562、564、566、568和570中的個別消費者。資料結構700具有行732,標識不同子圖560、562、564、566、568和570中個別消費者的讀存取型樣。資料結構700具有行742,標識將不同子圖560、562、564、566、568和570中的個別消費者分類為串流相容或廣播相容。
在一些實現中,運行時邏輯120被配置成將可重配置資料流資源池122中的可重配置處理器的實體計算單元和實體記憶體單元分配給資料流圖的修改版本。在其他實現中,運行時邏輯120被配置成基於該分配在可重配置處理器上執行資料流圖的修改版本。
圖8是說明包括主機820、記憶體840及可重配置資料處理器810之系統800的圖,其中如本文描述的計算單元透過硬體或者透過可重配置元件的配置來部署並且配置有虛擬化邏輯897。如在圖8的範例中所示,可重配置資料處理器810包括可配置單元陣列890和配置加載/卸載控制器895。
虛擬化邏輯897可以包括支持或致能在一個晶粒或一個多晶片模組上的可配置單元陣列中同時執行多個不相關的應用程式圖(或相關的應用程式圖)的資源。在圖示中,第一應用程式圖在特定的可配置單元集898中的虛擬機VM1中實現,而第二應用程式圖在另一可配置單元集899中的虛擬機VM2中實現。
可配置單元陣列890中的可配置單元參考圖11及12進一步說明,並且配置有虛擬化邏輯897。如本文所述,可配置單元可包括,或者可具有被配置成實現一或多個計算單元的單元。
處理器810包括透過線825連接到主機820的外部I/O介面830、以及透過線845連接到記憶體840的外部I/O介面850。I/O介面830、850經由匯流排系統815連接到可配置單元陣列890以及連接到配置加載/卸載控制器895。匯流排系統815可具有乘載一個資料塊的匯流排寬度,針對此範例可以是128位元(貫穿全文對128位元的引用可更一般地被視為示例性塊的大小)。
為了用配置檔案來配置可配置單元陣列890中的可配置單元,主機820可以經由可重配置資料處理器810中的介面830、匯流排系統815及介面850將配置檔案發送到記憶體840。可按照適合特定架構的多種方式,包括在可配置處理器810外部的資料路徑中,加載配置檔案。可以經由記憶體介面850從記憶體840提取配置檔案。然後可以依照分發順序將配置檔案的塊發送到可重配置資料處理器810中之可配置單元陣列890中的可配置單元。
外部時鐘產生器870或其他時鐘線源可以將時鐘線875或多條時鐘線提供給可重配置資料處理器810中的元件,包括可配置單元陣列890、及匯流排系統815、及外部資料I/O介面。匯流排系統815可以經由時鐘線875或多條時鐘線以處理器時鐘速率傳輸資料。
圖9是CGRA(粗粒度可重配置架構)處理器的元件的簡化方塊圖900。在此範例中,CGRA處理器有2個磚片(Tile1、Tile2)。磚片包含連接到匯流排系統的可配置單元陣列,其在此範例中包括陣列級網路。磚片中的可配置單元陣列(例如,890,圖8)包括硬體或透過配置可重配置元件的計算單元,其配置有虛擬化邏輯897。該匯流排系統包括頂級網路,其將磚片連接到外部I/O介面905(或任意數量的介面)。在其他實施例中,可以使用不同的匯流排系統配置。在此實施例中,每個磚片中的可配置單元是陣列級網路上的節點。
每個磚片有4個AGCU(位址產生與合併單元)(例如,MAGCU1、AGCU9、AGCU13、AGCU14)。AGCU是頂級網路上的節點和陣列級網路上的節點,並且包括用於在每個磚片中的頂級網路上的節點與陣列級網路上的節點之間路由資料的資源。
在此範例中,頂級網路上的節點包括一或多個外部I/O,其包括介面905。至外部裝置的介面包括資源,用於在頂級網路上的節點與連接到介面的外部裝置(諸如高容量記憶體、主處理器、其他CGRA處理器、FPGA裝置等)之間路由資料。
在此範例中,磚片中的一個AGCU被配置成主AGCU,其包括用於該磚片的陣列配置加載/卸載控制器。在其他實施例中,可以實現一個以上的陣列配置加載/卸載控制器,並且可以透過分佈在一個以上的AGCU之間的邏輯來實現一個陣列配置加載/卸載控制器。
MAGCU1包括用於Tile1的配置加載/卸載控制器,並且MAGCU2包括用於Tile2的配置加載/卸載控制器。在其他實施例中,配置加載/卸載控制器可被設計用於一個以上的磚片的加載和卸載配置。在其他實施例中,一個以上的配置控制器可被設計用於單一磚片的配置。並且,配置加載/卸載控制器可以在系統的其他部分中實現,包括作為頂級網路上和一或多個陣列級網路上的獨立節點。
頂級網路係使用頂級交換器(911、913、914和916)來構成,該些頂級交換器彼此連接並且連接到頂級網路上的其他節點,包括AGCU及I/O介面905。頂級網路包括連接頂級交換器的鏈路(例如,L11、L9、L21、L22)。資料以封包形式在鏈路上的頂級交換器之間傳輸,並且從交換器傳輸到與交換器連接的網路上的節點。例如,頂級交換器911和912透過鏈路L11連接,頂級交換器914和915透過鏈路L9連接,頂級交換器911和914透過鏈路L13連接,以及頂級交換器912和913透過鏈路L21連接。這些鏈路可以包括一或多個匯流排,並且支援控制線,例如包括塊寬(chunk-wide)匯流排(向量匯流排)。例如,頂級網路可以包括資料、請求和回應通道,可協同操作用於以類似AXI相容協定的方式傳輸資料。參見AMBA®AXI及ACE協定規格書,ARM,209。
頂級交換器可被連接到AGCU。例如,頂級交換器911、912、914及915被分別連接到磚片Tile1中的MAGCU1、AGCU9、AGCU13及AGCU14。頂級交換器912、913、915及916被分別連接到磚片Tile2中的MAGCU2、AGCU22、AGCU23及AGCU24。
頂級交換器可被連接到一或多個外部I/O介面(例如,介面905)。
圖10A是可在圖9的配置中使用的磚片和陣列級網路的簡化圖,其中陣列中的可配置單元是陣列級網路上的節點,並且可被配置成實現虛擬化邏輯897。
在此範例中,可配置單元陣列1000包括多種類型的可配置單元,其配置有虛擬化邏輯897。此範例中的可配置單元的類型包括型樣計算單元(PCU)、型樣記憶體單元(PMU)、交換單元(S)及位址產生單元與合併單元(每個單元包括兩個位址產生器AG和一共享的CU)。這些類型的可配置單元的功能的範例,參見Prabhakar等人,“Plasticine: A Reconfigurable Architecture For Parallel Patterns”,ISCA ’17,2017年6月24-28日,加拿大安大略省多倫多,其透過引用併入,如在本文中完整闡述一般。在此範例中,可配置單元陣列1000中的PCU(例如,1042)和PMU(例如,1043)可以包括針對計算單元之實施例可配置的資源,本文描述了其示例性配置。這些可配置單元之各者都包含一配置儲存,其包括一組暫存器或正反器,其代表運行程式的設定或序列,並且可以包括巢狀環圈的數量、每個迴圈迭代器的限制、每個階段要執行的路由及/或指令,包括輸入和輸出介面的階段、運算元的來源及網路參數。配置檔案可以包括如本文所述的查找表的條目。
此外,這些可配置單元之各者都包含一配置儲存,其包括一組暫存器或正反器,其儲存可用於追蹤巢狀迴圈或其他情況中的進度的狀態。配置儲存中的配置檔案包含表示每個執行程式的元件的初始配置或起始狀態的位元流。此位元流稱為位元檔案。程式加載是基於位元檔案的內容設定可配置單元陣列中的配置儲存,以允許元件執行程式(即,機器),包括利用虛擬化邏輯897的程式的過程。程式加載可能還需要加載所有的PMU記憶體。
陣列級網路包括互連陣列中可配置單元的鏈接。陣列級網路中的鏈接包括一或多種,在此情況下為三種的實體匯流排:塊級向量匯流排(例如,128位元的資料)、字級純量匯流排(例如,32位元的資料)、及多位元級控制匯流排。例如,交換單元1011和1012之間的互連1021包括具有向量匯流排寬度為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先出。
圖10B示出連接陣列級網路中之元件的示例性交換單元。如圖10B之範例中所示,交換單元可以有8個介面。交換單元的北、南、東、西介面係用於交換單元之間的連接。交換單元的東北、東南、西北、西南介面係分別用於建立與PCU或PMU實例的連接。每個磚片象限中的一組2個交換單元連接到位址產生單元與合併單元(AGCU),其包括多個位址產生(AG)單元及連接到多個位址產生單元的合併單元(CU)。合併單元(CU)在AG之間進行仲裁,並處理記憶體請求。交換單元之八個介面中的每個介面可以包括向量介面、純量介面、及控制介面,以與向量網路、純量網路、及控制網路進行通訊。
在配置之後執行機器的期間,可以經由一或多個單元交換器及該些單元交換器之間的一或多條鏈路將資料發送給可配置單元,其使用陣列級網路上的向量匯流排及該一或多個交換單元的向量介面。
在本文所述的實施例中,在配置磚片之前,可以使用相同的向量匯流排從配置加載控制器,經由一或多個單元交換器和該些單元交換器之間的一或多條鏈路,將配置檔案或位元檔案發送至可配置單元,其使用陣列級網路上的向量匯流排及該一或多個交換單元的向量介面。例如,可將單元檔案中特定於可配置單元PMU 1041的配置資料塊從配置加載/卸載控制器1001發送到PMU 1041,其係經由配置加載/卸載控制器1001與交換單元1011的西(W)向量介面之間的鏈路1020、交換單元1011及交換單元1011的東南(SE)向量介面與PMU 1041之間的鏈路1031。
在此範例中,將AGCU之其中一者配置成主AGCU,其包括配置加載/卸載控制器(例如,1001)。主AGCU實現了一暫存器,透過該暫存器,主機(820,圖8)可以經由匯流排系統將命令發送到主AGCU。主AGCU控制對磚片中的可配置單元陣列的操作,並且實施一程式控制狀態機,以基於其從主機接收的命令透過寫入到暫存器來追蹤磚片的狀態。針對每一狀態轉換,主AGCU透過菊鏈命令匯流排(圖11)向磚片上的所有元件發出命令。該些命令包括程式重置命令及程式加載命令,該程式重置命令用以重置磚片中可配置單元陣列中的可配置單元,以及該程式加載命令用以將配置檔案加載到可配置單元。
主AGCU中的配置加載控制器負責從記憶體讀取配置檔案,並且將配置資料發送到磚片的每一可配置單元。主AGCU可以較佳地以頂級網路的最大通量從記憶體讀取配置檔案。主AGCU透過陣列級網路上的向量介面將讀取自記憶體的資料依據本文所述的分發順序發送到相對應的可配置單元。
在一個實施例中,以一種可以減少可配置單元內的佈線要求的方式,將元件中保存要在配置加載過程中加載、或要在配置卸載過程中卸載的單元檔案的配置及狀態暫存器以串聯鏈連接,並且可以經由透過串聯鏈移位位元的過程進行加載。在一些實施例中,可能會有一條以上的並聯或串聯配置的串聯鏈。當一可配置單元在一個匯流排週期中從主AGCU接收到例如128位元的配置資料時,該可配置單元以每週期1位元的速率通過其之串聯鏈移位此資料,其中移位器週期可以與匯流排週期相同的速率運行。可配置單元將耗費128個移位器週期,以透過向量介面接收的128位元資料來加載128個配置位元。128位元的配置資料被稱為塊。可配置單元可能需要多個資料塊來加載其所有的配置位元。
可配置單元透過多個記憶體介面(850,圖8)與記憶體介接。可以使用多個AGCU來存取每個記憶體介面。每個AGCU都包含一可重配置純量資料路徑以產生對外接記憶體的請求。每個AGCU都包含FIFO(用於組織資料的先進先出緩衝器),以緩衝來自外接記憶體的輸出命令、資料以及輸入響應。
圖11是示出示例性可配置單元1100,諸如型樣計算單元(PCU)的方塊圖,其配置有虛擬化邏輯897。可配置單元可以與純量、向量及控制匯流排介接,在此範例中使用三組相應的輸入及輸出(IO):純量輸入/輸出、向量輸入/輸出及控制輸入/輸出。純量IO可被用來傳輸單一字組的資料(例如,32位元)。在諸如單元配置加載過程中接收配置資料、及在多個PCU之間的長管線進行配置之後的操作過程中傳送和接收資料的情況下,向量IO可被用來傳輸資料塊(例如,128位元)。控制IO可被用來在控制線上傳輸信號,諸如執行可配置單元的開始或結束。控制輸入可以由控制塊1190接收,而控制輸出由控制塊1190提供。
在此範例中,每個向量輸入使用向量FIFO塊1160中的向量FIFO來進行緩衝,該向量FIFO塊1160可以包括一或多個向量FIFO。同樣的,在此範例中,每個純量輸入使用純量FIFO 1170來進行緩衝。使用輸入FIFO可解耦資料生產者和消費者之間的時序,並且透過使其對輸入延遲失配更強健來簡化可配置單元間的控制邏輯。
可配置單元包括塊1180中的多個可重配置資料路徑。可配置單元中的資料路徑可被組織為多階段(階段1…階段N)、可重配置SIMD(單指令、多資料)管線。被推送到可配置單元中的配置串聯鏈的資料塊包括用於可配置單元中每個資料路徑的每個階段的配置資料。配置資料儲存1120中的配置串聯鏈經由線路1121連接到塊1180中的多個資料路徑。
組織為多階段管線的可配置資料路徑可以在個別階段包括多個功能單元(例如,1181、1182、1183、1184、1185、1186)。計算單元或部分計算單元可以在一多階段管線或多個多階段管線中的個別階段的多個功能單元中實現。如在圖9中所示的範例中,包括虛擬化邏輯897的電路可以在多個功能單元和多個記憶體單元中實現。功能單元中的輸入暫存器可以暫存來自純量FIFO 1170或向量FIFO 1160或來自多階段管線中的先前階段的輸入。在多階段管線中之一階段的功能單元可以執行例如邏輯移位、算術函數、比較、邏輯運算等的功能,並且產生輸出。
可配置單元陣列中的可配置單元包括配置資料儲存1120(例如,串聯鏈),用以儲存單元檔案,其包括特定於相應可配置單元的配置資料的複數塊(或其他大小的子檔案)。可配置單元陣列中的可配置單元各包括單元配置加載邏輯1140,其經由線路1122連接到配置資料儲存1120,用以執行單元配置加載過程。單元配置加載過程包括經由匯流排系統(例如,向量輸入)接收特定於可配置單元的單元檔案的塊,以及將接收到的塊加載到可配置單元的配置資料儲存1120。被加載到配置資料儲存1120的單元檔案可以包括配置資料,其包括運算碼及路由配置,用於電路(例如,模組)在多個功能單元和多個記憶體單元中實現虛擬化邏輯897,如本文所述。
在此範例中,在複數個可配置單元中之可配置單元中的配置資料儲存包括鎖存器的串聯鏈,其中鎖存器儲存控制可配置單元中的資源配置的位元。配置資料中的串聯鏈可以包括串聯連接的用於配置資料的移位暫存器鏈和用於狀態資訊及計數器值的第二移位暫存器鏈。
輸入配置資料1110可被提供給向量FIFO作為向量輸入,然後被傳送到配置資料儲存1120。可以使用向量輸出從配置資料儲存1120卸載輸出配置資料1130。
CGRA使用菊鏈式完成匯流排以指示加載/卸載命令何時被完成。主AGCU透過菊鏈式命令匯流排將程式加載和卸載命令傳送到可配置單元陣列中的可配置單元。如在圖11的範例中所示,控制塊1190、菊鏈式完成匯流排1191和菊鏈式命令匯流排1192被連接到菊鏈邏輯1193,其與單元配置加載邏輯1140通訊。菊鏈邏輯1193可以包括加載完成狀態邏輯,如下所述。下面進一步說明菊鏈式完成匯流排。顯然命令和完成匯流排的其他拓樸也是可能的,但未於此處說明。
圖12是示出示例性可配置單元1200,諸如型樣記憶體單元(PMU)的方塊圖,其配置有虛擬化邏輯897(即,讀取就緒(ready-to-read)信用計數器、寫信用計數器和用於操作它們的流控制邏輯)。PMU可以包含高速暫存記憶體1230,其與旨在用於高速暫存記憶體1230的位址計算(RA,WA)和控制(WE,RE)的可重配置純量資料路徑1220耦合,以及PCU中所使用的匯流排介面(圖11)。
匯流排介面可以包括純量輸入、向量輸入、純量輸出及向量輸出,可用於提供寫入資料WD。可將資料路徑組織為多階段可重配置管線,包括功能單元FU的階段以及暫存功能單元之輸入和輸出的相關聯管線暫存器PR。PMU可被用來儲存分散在整個可重配置單元陣列的晶載記憶體。
高速暫存記憶體內置有多個SRAM庫(例如,1231、1232、1233、1234)。用於高速暫存記憶體內之SRAM庫的分庫(banking)及緩衝邏輯1235可被配置成以數種分庫模式操作,以支援各種存取型樣。如本文描述的計算單元可以包括儲存在高速暫存記憶體1230中、來自配置檔案或來自其他來源的查找表。在如本文描述的計算單元中,純量資料路徑1220可以將用於尋址實現函數f(I)的查找表的原始輸入值I的一部分轉換成SRAM高速暫存記憶體1230所使用的尋址格式,添加適當的偏移等,以使用該輸入值I的該部分來讀取儲存在高速暫存記憶體1230中的查找表的條目。每個PMU可以包括寫入位址計算邏輯和讀取位址計算邏輯,其將寫入位址WA、寫入致能WE、讀取位址RA及讀取致能RE提供給分庫緩衝邏輯1235。基於本地FIFO 1211和1212的狀態以及外部控制輸入,控制塊1215可被配置成透過致能適當的計數器1216來觸發寫入位址計算、讀取位址計算或二者。可編程計數器鏈1216(控制輸入、控制輸出)及控制塊1215可以觸發PMU執行。
這是用於實現如本文所述之計算單元的可配置處理器的配置的一個簡化範例。可以以其他方式配置可配置處理器以實現計算單元。其他類型的可配置處理器可以以其他方式實現計算單元。此外,在一些範例中可以使用專用邏輯、或專用邏輯和指令控制處理器的組合來實現計算單元。
圖13描述了一種電腦實現的運行時修補配置檔案的方法的實現。
在動作1302,該方法包括儲存用於應用程式的資料流圖,該資料流圖具有操作單元,該些操作單元被配置為生產者用以產生用於執行應用程式的張量,以及被配置為消費者用以消耗用於執行應用程式的張量。
在動作1312,該方法包括儲存生產者的寫存取型樣,以及消費者的讀存取型樣。特定生產者的寫存取型樣指定特定生產者產生張量的元素的順序,以及相應消費者的讀存取型樣指定相應消費者處理張量的元素的順序。
在動作1322,該方法包括檢測寫存取型樣和讀存取型樣之間存在不匹配的某些生產者與相應消費者之間的衝突。衝突發生在特定生產者產生張量的元素的順序與相應消費者處理張量的元素的順序不同時。
在動作1332,該方法包括透過在某些生產者與相應消費者之間插入緩衝器來解決衝突。
儘管透過參考上面詳述的較佳實施例及範例來揭露本發明,但應理解的是,這些範例僅是示例性的而不是限制性的。可以想到的是,本領域技術人員將容易想到修改和組合,這些修改和組合將落在本發明的精神及所附的申請專利範圍的範圍內。
102:應用程式 104:資料流圖產生器 106:資料流圖 108:存取型樣確定器 110:寫存取型樣 112:讀存取型樣 114:編譯器 116:編譯時邏輯 118:配置檔案 120:運行時邏輯 122:可重配置資料流資源池 202:衝突檢測邏輯 212:衝突解決邏輯 300:資料流圖 302:整流線性單元(ReLU) 318:逐元素加法單元(Add) 328:矩陣乘法單元(GeMM) 338:矩陣乘法單元(GeMM) 348:層正規化單元(LN) 436:緩衝器 446:緩衝器 500:資料流圖 503:緩衝器 504:逐元素加法單元(Add) 506:sigmoid單元(SG) 507:緩衝器 508:矩陣乘法單元(GeMM) 512:softmax單元(SM) 513:緩衝器 514:矩陣乘法單元(GeMM) 515:緩衝器 516:層正規化單元(LN) 517:緩衝器 518:矩陣乘法單元(GeMM) 522:整流線性單元(ReLU) 524:雙曲正切單元(Tanh) 525:緩衝器 526:矩陣乘法單元(GeMM) 527:緩衝器 560:子圖 562:子圖 564:子圖 566:子圖 568:子圖 570:子圖 630:群組 700:資料結構 702:行 712:行 722:行 732:行 742:行 800:系統 810:可重配置資料處理器 815:匯流排系統 820:主機 825:線 830:I/O介面 840:記憶體 845:線 850:I/O介面 870:外部時鐘產生器 875:時鐘線 890:可配置單元陣列 895:配置加載/卸載控制器 897:虛擬化邏輯 898:可配置單元集 899:可配置單元集 900:方塊圖 905:I/O介面 911~916:頂級交換器 1000:可配置單元陣列 1001:配置加載/卸載控制器 1011:交換單元 1012:交換單元 1020:鏈路 1021:互連 1031:鏈路 1041:PMU 1042:PCU 1043:PMU 1100:可配置單元 1110:輸入配置資料 1121:線路 1122:線路 1120:配置資料儲存 1130:卸載輸出配置資料 1140:單元配置加載邏輯 1160:向量FIFO 1170:純量FIFO 1180:塊 1181~1186:功能單元 1190:控制塊 1191:菊鏈式完成匯流排 1192:菊鏈式命令匯流排 1193:菊鏈邏輯 1200:可配置單元 1211:本地FIFO 1212:本地FIFO 1215:控制塊 1216:可編程計數器鏈 1220:可重配置純量資料路徑 1230:高速暫存記憶體 1231~1234:SRAM庫 1235:分庫緩衝邏輯 1300:方法 1302~1332:方法步驟
在附圖中,相同的參考標記在不同的視圖中通常指稱相同的部件。此外,附圖不一定按比例繪製,而是重點通常放在說明所公開的技術的原理上。在以下描述中,參考下面附圖描述所公開的技術的各種實施方式,其中。
[圖1]示出依據所公開之技術的串流相容及廣播相容的資料存取型樣的編譯時檢測的一種實現。
[圖2]示出編譯時邏輯的試探(heuristics)圖,該編譯時邏輯檢測由於廣播相容的資料存取型樣引起的衝突,並透過插入緩衝器來解決衝突。
[圖3]描繪編譯時邏輯的一個範例,其剖析(parsing)資料流圖並將消費者分類為串流相容或廣播相容的。
[圖4]示出編譯時邏輯的一個範例,其將緩衝器插入資料流圖中以解決由於廣播相容的消費者引起的衝突。
[圖5]描繪編譯時邏輯的另一範例,其剖析資料流圖並將消費者分類為串流相容或廣播相容的。
[圖6]示出編譯時邏輯的另一範例,其將緩衝器插入資料流圖中以解決由於廣播相容的消費者引起的衝突。
[圖7]示出一示例性資料結構,其維護生產者到消費者的映射,並將消費者分類為串流相容或廣播相容的。
[圖8]是系統圖,示出包括主機、記憶體及可重配置資料處理器的系統。
[圖9]是CGRA(粗粒度可重配置架構)的頂級網路和元件的簡化方塊圖。
[圖10]是可用於圖8的配置中的磚片和陣列級網路的簡化圖,其中可配置單元是陣列級網路上的節點,並且可配置成實現具有輸入偏移的查找表。
[圖10B]示出連接陣列級網路中的元素的示例性開關單元。
[圖11]是示出示例性可配置單元,諸如型樣計算單元(Pattern Compute Unit,PCU)的方塊圖。
[圖12]是示出示例性可配置單元,諸如型樣記憶體單元(Pattern Memory Unit,PMU)的方塊圖。
[圖13]描述了一種電腦實現的串流相容及廣播相容的資料存取型樣的編譯時檢測的方法的實現。
500:資料流圖
504:逐元素加法單元(Add)
506:sigmoid單元(SG)
508:矩陣乘法單元(GeMM)
512:softmax單元(SM)
514:矩陣乘法單元(GeMM)
516:層正規化單元(LN)
518:矩陣乘法單元(GeMM)
522:整流線性單元(ReLU)
524:雙曲正切單元(Tanh)
526:矩陣乘法單元(GeMM)
560:子圖
562:子圖
564:子圖
566:子圖
568:子圖
570:子圖

Claims (20)

  1. 一種資料處理系統,包括: 記憶體,儲存用於應用程式的資料流圖,該資料流圖具有操作單元,該些操作單元被配置為生產者用以產生用於執行該應用程式的張量,以及被配置為消費者用以消耗用於執行該應用程式的該些張量; 該記憶體儲存該些生產者的寫存取型樣和該些消費者的讀存取型樣,其中特定生產者的寫存取型樣指定該特定生產者產生張量元素的順序,以及相應消費者的讀存取型樣指定該相應消費者處理該些張量元素的順序;以及 編譯時邏輯,可以存取該記憶體並被配置成處理該資料流圖以 檢測該些寫存取型樣和該些讀存取型樣之間不匹配的該些生產者中的某些生產者和該些消費者中的相應消費者之間的衝突,其中當該特定生產者產生該些張量元素的該順序與該相應消費者處理該些張量元素的該順序不同時發生衝突;以及 透過在該某些生產者和該些相應消費者之間插入緩衝器來解決該些衝突。
  2. 如請求項1之資料處理系統,其中該某些生產者被配置成根據該些寫存取型樣將該些張量元素寫入該些緩衝器中。
  3. 如請求項2之資料處理系統,其中該些相應消費者被配置成根據該些讀存取型樣從該些緩衝器讀取該些張量元素。
  4. 如請求項1之資料處理系統,其中該編譯時邏輯還被配置成檢測一組相應消費者,其具有相同的讀存取型樣用於處理該些張量元素。
  5. 如請求項4之資料處理系統,其中該編譯時邏輯還被配置成在該組相應消費者與該特定生產者之間插入單一緩衝器。
  6. 如請求項5之資料處理系統,其中該特定生產者被配置成根據該寫存取型樣將該些張量元素寫入該單一緩衝器中。
  7. 如請求項6之資料處理系統,其中在該組相應消費者中的消費者被配置成根據該讀存取型樣從該單一緩衝器讀取該些張量元素。
  8. 如請求項1之資料處理系統,其中該些寫存取型樣和該些讀存取型樣是依據該些操作單元所實現的操作類型來定義的。
  9. 如請求項1之資料處理系統,其中該編譯時邏輯還被配置成產生該資料流圖的修改版本,其中在該某些生產者和該些相應消費者之間插入有緩衝器。
  10. 如請求項9之資料處理系統,其中運行時邏輯被配置成將可重配置處理器的實體計算單元和實體記憶體單元分配給該資料流圖的該修改版本。
  11. 如請求項10之資料處理系統,其中該運行時邏輯被配置成依據該分配在該可重配置處理器上執行該資料流圖的該修改版本。
  12. 一種電腦實現的方法,包括: 儲存用於應用程式的資料流圖,該資料流圖具有操作單元,該些操作單元被配置為生產者用以產生用於執行該應用程式的張量,以及被配置為消費者用以消耗用於執行該應用程式的該些張量; 儲存該些生產者的寫存取型樣和該些消費者的讀存取型樣,其中特定生產者的寫存取型樣指定該特定生產者產生張量元素的順序,以及相應消費者的讀存取型樣指定該相應消費者處理該些張量元素的順序;以及 檢測該些寫存取型樣和該些讀存取型樣之間不匹配的該些生產者中的某些生產者和該些消費者中的相應消費者之間的衝突,其中當該特定生產者產生該些張量元素的該順序與該相應消費者處理該些張量元素的該順序不同時發生衝突;以及 透過在該某些生產者和該些相應消費者之間插入緩衝器來解決該些衝突。
  13. 如請求項12之電腦實現的方法,其中該某些生產者被配置成根據該些寫存取型樣將該些張量元素寫入該些緩衝器中。
  14. 如請求項13之電腦實現的方法,其中該些相應消費者被配置成根據該些讀存取型樣從該些緩衝器讀取該些張量元素。
  15. 如請求項12之電腦實現的方法,其中該編譯時邏輯還被配置成檢測一組相應消費者,其具有相同的讀存取型樣用於處理該些張量元素。
  16. 如請求項15之電腦實現的方法,其中該編譯時邏輯還被配置成在該組相應消費者與該特定生產者之間插入單一緩衝器。
  17. 如請求項16之電腦實現的方法,其中該特定生產者被配置成根據該寫存取型樣將該些張量元素寫入該單一緩衝器中。
  18. 一種具有電腦程式指令以處理資料的非暫時性電腦可讀取儲存媒體,當在處理器上執行時,該些指令實現一種方法,包括: 儲存用於應用程式的資料流圖,該資料流圖具有操作單元,該些操作單元被配置為生產者用以產生用於執行該應用程式的張量,以及被配置為消費者用以消耗用於執行該應用程式的該些張量; 儲存該些生產者的寫存取型樣和該些消費者的讀存取型樣,其中特定生產者的寫存取型樣指定該特定生產者產生張量元素的順序,以及相應消費者的讀存取型樣指定該相應消費者處理該些張量元素的順序;以及 檢測該些寫存取型樣和該些讀存取型樣之間不匹配的該些生產者中的某些生產者和該些消費者中的相應消費者之間的衝突,其中當該特定生產者產生該些張量元素的該順序與該相應消費者處理該些張量元素的該順序不同時發生衝突;以及 透過在該某些生產者和該些相應消費者之間插入緩衝器來解決該些衝突。
  19. 如請求項18之非暫時性電腦可讀取儲存媒體,其中該某些生產者被配置成根據該些寫存取型樣將該些張量元素寫入該些緩衝器中。
  20. 如請求項19之非暫時性電腦可讀取儲存媒體,其中該些相應消費者被配置成根據該些讀存取型樣從該些緩衝器讀取該些張量元素。
TW110134440A 2020-09-16 2021-09-15 用於檢測串流相容及廣播相容的資料存取型樣的編譯時邏輯 TW202227979A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/023,015 2020-09-16
US17/023,015 US11237971B1 (en) 2020-09-16 2020-09-16 Compile time logic for detecting streaming compatible and broadcast compatible data access patterns

Publications (1)

Publication Number Publication Date
TW202227979A true TW202227979A (zh) 2022-07-16

Family

ID=78302903

Family Applications (1)

Application Number Title Priority Date Filing Date
TW110134440A TW202227979A (zh) 2020-09-16 2021-09-15 用於檢測串流相容及廣播相容的資料存取型樣的編譯時邏輯

Country Status (3)

Country Link
US (2) US11237971B1 (zh)
TW (1) TW202227979A (zh)
WO (1) WO2022060929A1 (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11256987B1 (en) * 2021-06-02 2022-02-22 SambaNova Systems, Inc. Memory efficient dropout, with reordering of dropout mask elements
WO2024079528A1 (en) * 2022-10-13 2024-04-18 Mobileye Vision Technologies Ltd. Array processing entity array placement and routing

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101647817B1 (ko) * 2010-03-31 2016-08-24 삼성전자주식회사 재구성 가능한 프로세서의 시뮬레이션 장치 및 방법
US8874522B2 (en) * 2011-10-31 2014-10-28 Symantec Corporation Managing backups of data objects in containers
US10956500B2 (en) * 2017-01-19 2021-03-23 Google Llc Dynamic-length stateful tensor array
US11853244B2 (en) * 2017-01-26 2023-12-26 Wisconsin Alumni Research Foundation Reconfigurable computer accelerator providing stream processor and dataflow processor
US20190130269A1 (en) * 2017-10-27 2019-05-02 Wave Computing, Inc. Pipelined tensor manipulation within a reconfigurable fabric
US11205125B2 (en) * 2018-06-29 2021-12-21 International Business Machines Corporation Scheduler and simulator for an area-efficient, reconfigurable, energy-efficient, speed-efficient neural network
US10956315B2 (en) * 2018-07-24 2021-03-23 Micron Technology, Inc. Memory devices and methods which may facilitate tensor memory access
US10965536B2 (en) * 2019-03-30 2021-03-30 Intel Corporation Methods and apparatus to insert buffers in a dataflow graph

Also Published As

Publication number Publication date
US20220147328A1 (en) 2022-05-12
WO2022060929A1 (en) 2022-03-24
US11237971B1 (en) 2022-02-01

Similar Documents

Publication Publication Date Title
US11182221B1 (en) Inter-node buffer-based streaming for reconfigurable processor-as-a-service (RPaaS)
US11714780B2 (en) Compiler flow logic for reconfigurable architectures
US20220198114A1 (en) Dataflow Function Offload to Reconfigurable Processors
US11709664B2 (en) Anti-congestion flow control for reconfigurable processors
US11782729B2 (en) Runtime patching of configuration files
US11182264B1 (en) Intra-node buffer-based streaming for reconfigurable processor-as-a-service (RPaaS)
US20220147328A1 (en) Compile time logic for inserting a buffer between a producer operation unit and a consumer operation unit in a dataflow graph
US20230376292A1 (en) Compile time logic for detecting and resolving memory layout conflicts
TWI784845B (zh) 對可重配置處理器之資料流功能卸載
TW202217564A (zh) 可重組態資料流資源的運行時間虛擬化
TWI792773B (zh) 用於可重配置處理器即服務(RPaaS)的節點內基於緩衝器的串流
US20230259477A1 (en) Dynamically-Sized Data Structures on Data Flow Architectures
US20230244748A1 (en) Matrix Multiplication on Coarse-grained Computing Grids
WO2022133043A1 (en) Runtime execution of configuration files on reconfigurable processors with varying configuration granularity