Applied Machine Learning (ML) is a booming field that utilizes a cascade of layers of nonlinear processing units and algorithms for feature extraction and transformation with a wide variety of usages and applications. ML typically involves two phases, training, which uses a rich set of training data to train a plurality of machine learning models, and inference, which applies the trained machine learning models to actual applications. Each of the two phases poses a distinct set of requirements for its underlying infrastructures. Various infrastructures may be used, e.g., graphics processing unit (GPU), a central processing unit (CPU), a Field Programmable Gate Array (FPGA), an Application Specific Integrated Circuit (ASIC), etc. Specifically, the training phase focuses on, as a non-limiting example, GPU or ASIC infrastructures that scale with the trained models and retraining frequency, wherein the key objective of the training phase is to achieve high performance and reduce training time. The inference phase, on the other hand, focuses on infrastructures that scale with the applications, user, and data, and the key objective of the inference phase is to achieve energy (e.g., performance per watt) and capital (e.g., return on investment) efficiency.
Inference phase of ML is usually very computationally and data intensive. Unfortunately, as the input data and model sizes grow, data movement becomes a bottleneck and data processing increases because in order to perform simple processing, three operations or instructions are performed for each data, e.g., load, processing, and store. As the amount of data grows, performing these three operations or instructions becomes burdensome. Moreover, the current computing architecture is not scalable and are not well suited for ML and its applications, since a lot of time goes in loading and storing the data in comparison to processing the data.
The foregoing examples of the related art and limitations related therewith are intended to be illustrative and not exclusive. Other limitations of the related art will become apparent upon a reading of the specification and a study of the drawings.
Aspects of the present disclosure are best understood from the following detailed description when read with the accompanying figures. It is noted that, in accordance with the standard practice in the industry, various features are not drawn to scale. In fact, the dimensions of the various features may be arbitrarily increased or reduced for clarity of discussion.
The following disclosure provides many different embodiments, or examples, for implementing different features of the subject matter. Specific examples of components and arrangements are described below to simplify the present disclosure. These are, of course, merely examples and are not intended to be limiting. In addition, the present disclosure may repeat reference numerals and/or letters in the various examples. This repetition is for the purpose of simplicity and clarity and does not in itself dictate a relationship between the various embodiments and/or configurations discussed.
Before various embodiments are described in greater detail, it should be understood that the embodiments are not limiting, as elements in such embodiments may vary. It should likewise be understood that a particular embodiment described and/or illustrated herein has elements which may be readily separated from the particular embodiment and optionally combined with any of several other embodiments or substituted for elements in any of several other embodiments described herein. It should also be understood that the terminology used herein is for the purpose of describing the certain concepts, and the terminology is not intended to be limiting. Unless defined otherwise, all technical and scientific terms used herein have the same meaning as commonly understood in the art to which the embodiments pertain.
Each of the engines in the architecture 100 is a dedicated hardware block/component including one or more microprocessors and on-chip memory units storing software instructions programmed by a user for various machine learning operations. When the software instructions are executed by the microprocessors, each of the hardware components becomes a special purposed hardware component for practicing certain machine learning functions as discussed in detail below. In some embodiments, the architecture 100 is on a single chip, e.g., a system-on-chip (SOC).
In the example of
In some embodiments, the inference engine 160 includes a two-dimensional computing array of processing tiles, e.g., tiles 0, . . . , 63, arranged in, e.g., 8 rows by 8 columns. Each processing tile (e.g., tile 0) includes at least one on-chip memory (OCM) e.g., 210, one POD engine (or POD), e.g., 220, and one processing engine/element (PE), e.g., 230. Here, the OCMs in the processing tiles are configured to receive data from the data streaming engine 140 in a streaming fashion. The OCMs enable efficient local access to data per processing tile. The PODs are configured to perform dense or regular computations on the received data in the OCMs, e.g., matrix operations such as multiplication, matrix manipulation, tan h, sigmoid, etc., and the PEs are configured to perform sparse/irregular computations and/or complex data shape transformations of the received data in the OCMs, e.g., memory transpose, addition operation, operations on irregular data structures (such as trees, graphs, and priority queues), respectively. Both the PODs and the PEs can be programmed according to the programming instructions received from the instruction-streaming engine 150. Accordingly, the data is received and processed by each processing tile as an input data stream from the DDR memory 120 and the result is output by each processing tile as a stream of data to the DDR memory 120.
In some embodiments, a plurality of (e.g., four) processing tiles in the inference engine 160 together form a processing block or quad 250, e.g., processing tiles 0-3 form processing block 250, wherein the processing tiles within each processing block 250 are coupled to one another via a routing element 240. In some embodiments, all the routing elements are connected together as a mesh 260 of interconnect to connect the processing blocks in the same row or column as a two-dimensional array. It is appreciated that the number and/or types of components within each processing tile, the formation of the processing blocks, the number of processing tiles in each processing block, and the number of processing blocks in each row and column of the inference engine 160 as shown in
In some embodiments, the instruction streaming engine 150 is configured to utilize a set of synchronization instructions to synchronize a set of task instructions to be executed by the POD 220 or PE 230 of each processing tile, respectively, to wait certain tasks/operations to finish at each processing tile before starting a new one to avoid race conditions. For a non-limiting example, any instruction following a synchronization instruction PE_sync or POD_sync will wait in the instruction control queue in the POD 220 or PE 230, respectively, until all the prior instructions in the queue have been completed. For another non-limiting example, instruction INS_Sync will hold the task in the instruction streaming engine 150 until the prior tasks are done.
In some embodiments, the instruction streaming engine 150 is configured to add two or more bits to each task instruction to indicate whether the task performed by the task instruction is executed needs to be synchronized or not. Such synchronization indications/types include but are not limited to no-sync, local-sync, global-sync, and instruction-sync or inst-sync. Specifically, no-synchronization or no-sync indicates that the task does not have any dependency on the prior tasks; local-synchronization or local-sync indicates that the task depends “locally” on the prior task, e.g., the task depends on local POD 220 or PE 230 in the processing block to complete the prior task; global-synchronization or global-sync indicates that the task depends on prior task to complete globally among different processing tiles; and inst-sync indicates that the task instruction needs to be held back in the instruction streaming engine 150 until all prior tasks in the mesh 260 of the inference engine 160 are done.
In some embodiments, the instruction streaming engine 150 is configured to assign every task with a color, e.g., red or blue, to represent its current state/status based on the synchronization indication. Note that although color is used to illustrate the proposed approach in the following discussions, any flag or indication of binary or multiple values can be used in place of color in a similar fashion. If a task is marked either as global-sync or inst-sync, then the color assigned to the task will be opposite of the color assigned to the prior task, e.g., red as opposed to blue or blue as opposed to red. If a task is marked either as local-sync or no-sync, then color of the task does not change from the prior task. In some embodiments, the instruction streaming engine 150 maintains a queue to track color transitions of the tasks, where the color transition queue stores the synchronization indications for the color transitions and the color of each task and/or processing tile after each color transition. The color of the processing tiles that are not participating in the synchronization remain unchanged. When a task with global or inst-sync is received, the instruction streaming engine 150 is configured to assigns the next available entry in color transition queue for the synchronization. The task is stalled in the instruction streaming engine 150 if the color transition queue is full.
In some embodiments, the instruction streaming engine 150 is configured to pick one of the processing tiles among the set of processing tiles that are involved in the synchronization to be the designated tile, which is to inform to the instruction streaming engine 150 when the synchronization is done via a dedicated set of wires of a color bus on the mesh 260 as discussed below. Each entry/signal on each of the wires signifies the color of each processing tile after each color transition. On the receiving end, the instruction streaming engine 150 receives a message from the designated processing tile when the synchronization between the processing tiles is complete including an index to the color transition queue. The instruction streaming engine 150 then uses the index to access the color transition queue and mark the corresponding entry in the color transition queue free, which completes the synchronization. At this point, the color transition is said to have completed and any action waiting for this color transition can be taken.
When the instruction streaming engine 150 receives an inst-sync instruction or a task with sync-bits set to inst-sync, the instruction streaming engine 150 is configured to take steps to make sure that all tasks in the mesh 260 of the inference engine 160 are done before next task is issued from the instruction streaming engine 150. Specifically, the instruction streaming engine 150 stops issuing new tasks, changes color for all processing tiles, and inserts a new set of colors in the color transition queue. The instruction streaming engine 150 then sends an inst-sync message to all processing tiles with the new color. If the new color is different for the color of a subset of the processing tiles, two inst-sync messages are sent—one for the processing tiles of one/first color and another for the processing tiles of another/second color. The inst-sync message sent to each processing tile is inserted in the task queue of the processing tile. When the inst-sync message is at the head of the task queue, the processing tile drives the color of the inst-sync message onto the color bus discussed below, indicating to all other processing tiles that this processing tile is ready to switch color. The processing tile waits until all the bits on the color bus matching the tile mask have moved to the same color before switching the color of the processing tile internally to a new color and deallocate the inst-sync message from the task queue. The designated tile then sends the synchronization done message to the instruction streaming engine 150 and the inst-sync is done once the instruction streaming engine 150 receives this message. In the case where the new color is different for a subset of the processing tiles, the instruction streaming engine 150 is configured to issue an instruction to all processing tiles to reset their color to the new color after the inst-sync is done to align all processing tiles back to the same color. The instruction streaming engine 150 can then issue instructions for subsequent tasks.
In the example of
In some embodiments, each data streaming engine 140 is configured to issue both read and write requests to any processing tile to read data from or write data to the processing tile. Each processing tile, on the other hand, can issue read or write request to other processing tiles. In some embodiments, write requests can be multicast requests; e.g., they write the same data to the same location in multiple OCMs 210 in different processing tiles. All requests and responses between any source-destination pair of processing tiles and/or routers need to be in order. Since each processing tile is configured to perform operations on a portion of data maintained in its OCM 210, it is often necessary to pass data among the OCMs in different processing tiles via the routers 240 during a ML operation, e.g., an operation on a matrix by the array of processing tiles in the inference engine 160 wherein data of the matrix is divided and distributed among the OCMs 210 of the processing tiles. In some cases, the operation performed by processing tile may need data from another processing tile and have to wait for the operation by the other processing tile to complete.
In some embodiments, the inference engine 160 is configured to synchronize data communication among the OCMs 210 when data needs to be transmitted from one processing tile to another during a ML operation based on a color scheme, wherein every processing tile in the inference engine 160 is marked/colored either blue or red. Here, the color of a processing tile indicates the color of the task the processing tile is ready to execute or is currently executing. Each processing tile is configured to communicate its color to other processing tiles connected to it either directly or indirectly. In some embodiments, the processing tiles marked as blue have to wait until the processing tiles marked as red to finish their tasks/operations before the processing tiles marked as blue can proceed with their tasks/operations.
In some embodiments, the inference engine 160 is configured to utilize a color bus that carries color information from each tile to every other processing tile in the inference engine 160, In some embodiments, the color bus is a 64-bit logical bus, 1 bit per processing tile, with no contention or arbitration for the logical signals on the bus. Each processing tile is configured to drive one wire on the color bus carrying its color and there is a fixed latency between any two points (processing tile to processing tile and/or to a router).
During its operation, each processing tile may switch its color from red to blue or from blue to red depending on the color of the task/operation it performs. Specifically, when a processing tile completes a task (via its POD 220 or PE 230), processing tile switches to the color of the next task/instruction in its instruction queue to be executed. In some embodiments, each processing tile needs to maintain a tile-level task queue, which keeps an order of incoming tasks for both POD 220 and PE 230 in the same processing tile to ensure correct color switching. In some embodiments, the tile-level task queue also stores for each task being processed by the processing tile one or more of sync bits (e.g., no-sync, local-sync, global-sync), the color, and the tile mask that specifies which other tiles are working on this task. Once the POD 220 or PE 230 complete its current task, they provide a done/complete signal to tile-level task queue, wherein the done signal triggers deallocating of the current task from the task queue and switching to the next task in the task queue. For a new task at the head of the tile-level task queue, it can be executed as soon as its required resources are available on the processing tile if no synchronization is needed for task (e.g., the task is marked as no_sync). Note that the color of the new task should be same as the color of the prior task since the instruction streaming engine 150 does not switch the color for tasks that do not require synchronization. If the task is marked for local synchronization (e.g., local_sync), then the task waits until the previous task running on the POD 220 or PE 230 in the processing tile to complete. When the previous task is done, the new task starts to be executed on the processing tile. Like in the case where no synchronization is required, the color of the new task should be same as the color of the prior task since the instruction streaming engine 150 did not switch the color for tasks that only require local synchronization. If the task requires global synchronization (e.g., global_sync) among different processing tiles, the task first waits until the previous task running on the POD 220 or PE 230 in the processing tile to complete. When the prior task is done, the processing tile drives the color of the new task, which has a different color than the prior task, on the color bus, indicating to all other processing tiles that this processing tile is ready to switch to the new task. The new task then waits until all bits on the color bus matching the tile mask have switched to the same color. When that happens, the color of the processing tile is internally switched to the new color and the new task starts to be executed on the processing tile. If the processing tile is one that is designated by the instruction streaming engine 150, the designated processing tile is configured to send a message to the instruction streaming engine 150 through dedicated wires on the mesh 260 to indicate that the synchronization is done.
In some embodiments, the instruction streaming engine 150 is configured to synchronize data communication between the core 130 and the inference engine 160, ensuring that data being transmitted between the core 130 and the inference engine 160 correctly reaches the corresponding processing tiles that perform tasks/operations on the data. Such synchronization eliminates the need for cache-coherence which may arise when data is shared and distributed among the core 130 and the OCMs 210, processing units such as PODs 220 and PEs 230 in the processing tiles of the inference engine 160.
In some embodiments, the instruction streaming engine 150 is configured to assign a core synchronization bit, e.g., a core_sync bit, in the inst-sync instruction discussed above to allow for synchronization between the core 130 with the processing tiles of the inference engine 160, e.g., to let the core 130 to wait for the processing tiles of the inference engine 160 to finish their current tasks. In some embodiments, the instruction streaming engine 150 has a register bit, sync_done, indicating that the synchronization is complete. This register bit is cleared when the instruction streaming engine 150 receives an inst-sync instruction with the core_sync bit set to 1, indicating that synchronization between the core and the inference engine 160 is needed. The sync_done bit is set to 1 when the core_sync bit of the inst-sync instruction is set to 1, indicating that the synchronization between the core and the inference engine 160 is completed. In some embodiments, the core 130 is configured to poll the core_sync bit in the inst-sync instruction and wait for the core_sync bit to transition from 0 to 1 to synchronize the core 130 with the processing tiles of the inference engine 160 before proceeding further with new instructions. The core 130 is expected to have only one outstanding inst-sync instruction with core_sync bit set to 1.
In the example of
The foregoing description of various embodiments of the claimed subject matter has been provided for the purposes of illustration and description. It is not intended to be exhaustive or to limit the claimed subject matter to the precise forms disclosed. Many modifications and variations will be apparent to the practitioner skilled in the art. Embodiments were chosen and described in order to best describe the principles of the invention and its practical application, thereby enabling others skilled in the relevant art to understand the claimed subject matter, the various embodiments and the various modifications that are suited to the particular use contemplated.
This application claims the benefit of U.S. Provisional Patent Application No. 62/675,076, filed May 22, 2018, which is incorporated herein in its entirety by reference. This application is a continuation application of U.S. patent application Ser. No. 16/420,055, filed on May 22, 2019, which is a continuation-in-part of U.S. patent application Ser. No. 16/226,539, filed Dec. 19, 2018, and entitled “Array-based inference engine for machine learning,” which is incorporated herein in its entirety by reference.
Number | Name | Date | Kind |
---|---|---|---|
4982291 | Kurahashi et al. | Jan 1991 | A |
5329611 | Pechanek et al. | Jul 1994 | A |
5481487 | Jang et al. | Jan 1996 | A |
5948098 | Leung et al. | Sep 1999 | A |
6128638 | Thomas | Oct 2000 | A |
6282583 | Pincus et al. | Aug 2001 | B1 |
6415377 | Wolf et al. | Jul 2002 | B1 |
6577312 | Deering et al. | Jun 2003 | B2 |
6640262 | Uppunda et al. | Oct 2003 | B1 |
7089380 | Schober | Aug 2006 | B1 |
7191163 | Herrera et al. | Mar 2007 | B2 |
7509363 | Clifton | Mar 2009 | B2 |
7809663 | Birch et al. | Oct 2010 | B1 |
7840914 | Agarwal et al. | Nov 2010 | B1 |
7853752 | Agarwal | Dec 2010 | B1 |
7912883 | Hussain | Mar 2011 | B2 |
8200728 | Michaels et al. | Jun 2012 | B2 |
8200940 | Lindholm | Jun 2012 | B1 |
8209703 | Yee et al. | Jun 2012 | B2 |
8504954 | Arnold | Aug 2013 | B1 |
8583896 | Cadambi et al. | Nov 2013 | B2 |
8738860 | Griffin et al. | May 2014 | B1 |
8838663 | Tang et al. | Sep 2014 | B2 |
9015217 | Arnold et al. | Apr 2015 | B2 |
9954771 | Levy et al. | Apr 2018 | B1 |
10161786 | Chang et al. | Dec 2018 | B2 |
10296556 | Zhou | May 2019 | B2 |
10305766 | Zhang et al. | May 2019 | B1 |
10884736 | Farooqui | Jan 2021 | B1 |
11016801 | Sodani | May 2021 | B1 |
11106432 | Mangnall et al. | Aug 2021 | B2 |
11604799 | Bigdelu et al. | Mar 2023 | B1 |
20030163671 | Gschwind et al. | Aug 2003 | A1 |
20040153501 | Yamashita et al. | Aug 2004 | A1 |
20070122347 | Statnikov et al. | May 2007 | A1 |
20080040577 | Nemirovsky et al. | Feb 2008 | A1 |
20090097480 | Curtis et al. | Apr 2009 | A1 |
20090158005 | Carmichael | Jun 2009 | A1 |
20100017420 | Archer et al. | Jan 2010 | A1 |
20110219208 | Asaad et al. | Sep 2011 | A1 |
20110307890 | Achilles et al. | Dec 2011 | A1 |
20130101035 | Wang et al. | Apr 2013 | A1 |
20130117521 | Li et al. | May 2013 | A1 |
20140007098 | Stillwell, Jr. et al. | Jan 2014 | A1 |
20150019836 | Anderson et al. | Jan 2015 | A1 |
20150046753 | Cecka et al. | Feb 2015 | A1 |
20150106568 | Feldman et al. | Apr 2015 | A1 |
20150309808 | Nandy et al. | Oct 2015 | A1 |
20150347012 | Dewitt et al. | Dec 2015 | A1 |
20160132272 | Iwashita | May 2016 | A1 |
20160162402 | Woolley, Jr. et al. | Jun 2016 | A1 |
20160170916 | Deshpande et al. | Jun 2016 | A1 |
20160224465 | Morad et al. | Aug 2016 | A1 |
20170068571 | Lu et al. | Mar 2017 | A1 |
20170083313 | Sankaralingam et al. | Mar 2017 | A1 |
20170228345 | Gupta et al. | Aug 2017 | A1 |
20170351642 | Omtzigt | Dec 2017 | A1 |
20170353397 | Che | Dec 2017 | A1 |
20170357483 | Nicol | Dec 2017 | A1 |
20170364694 | Jacob et al. | Dec 2017 | A1 |
20180046458 | Kuramoto | Feb 2018 | A1 |
20180047126 | Falkenstern et al. | Feb 2018 | A1 |
20180068019 | Novikoff et al. | Mar 2018 | A1 |
20180114114 | Molchanov et al. | Apr 2018 | A1 |
20180260220 | Lacy et al. | Sep 2018 | A1 |
20180286016 | Bar-On et al. | Oct 2018 | A1 |
20180293782 | Benthin et al. | Oct 2018 | A1 |
20180300617 | McBride et al. | Oct 2018 | A1 |
20180307980 | Barik et al. | Oct 2018 | A1 |
20180315158 | Nurvitadhi et al. | Nov 2018 | A1 |
20180341484 | Fowers et al. | Nov 2018 | A1 |
20180349388 | Skiles et al. | Dec 2018 | A1 |
20190121641 | Knowles et al. | Apr 2019 | A1 |
20190121679 | Wilkinson et al. | Apr 2019 | A1 |
20190138210 | Lindholm | May 2019 | A1 |
20190146455 | Beylkin | May 2019 | A1 |
20190147471 | McKelvey, Jr. et al. | May 2019 | A1 |
20190171604 | Brewer | Jun 2019 | A1 |
20200082198 | Yao et al. | Mar 2020 | A1 |
20200242734 | Wang et al. | Jul 2020 | A1 |
20210133911 | Yao et al. | May 2021 | A1 |
20210158155 | Zhang et al. | May 2021 | A1 |
20210216874 | Jegou et al. | Jul 2021 | A1 |
20210319317 | Power et al. | Oct 2021 | A1 |
20210390076 | Fang et al. | Dec 2021 | A1 |
20220067513 | Stevens et al. | Mar 2022 | A1 |
20220076110 | Shao et al. | Mar 2022 | A1 |
20220207783 | Kwong et al. | Jun 2022 | A1 |
20220261650 | Zhao et al. | Aug 2022 | A1 |
20220405566 | Winterbottom et al. | Dec 2022 | A1 |
20230024035 | Thuerck et al. | Jan 2023 | A1 |
20230071931 | Huang et al. | Mar 2023 | A1 |
20230106651 | Xi et al. | Apr 2023 | A1 |
20230252275 | Nez et al. | Aug 2023 | A1 |
Number | Date | Country |
---|---|---|
2604142 | Aug 2022 | GB |
20210052188 | May 2021 | KR |
0245385 | Jun 2002 | WO |
2018222904 | Dec 2018 | WO |
Entry |
---|
Ceze, L., et al. Colorama: Architectural Support for Data-Centric Synchronization, 2007, IEEE, pp. 134-144 (Year: 2007). |
NanoMesh: An Asynchronous Kilo-Core System-on-Chip, Tse, et al. 2013 19th IEEE International Symposium on Asynchronous Circuits and Systems. |
Brewer, “Instructions Set Innovations for the Convey HC-1 Computer”, 2010, pp. 70-79, Year: 2010. |
Seng, et al. “Reducing Power with Dynamic Critical Path Information”, Jan. 1999, pp. 114-123; Year: 1999. |
Gelado, et al., “An Asymmetric Distributed Shared Memory Model for Heterogeneous Parellel Systems”, 2010 (Year: 2010) 12 pages. |
Number | Date | Country | |
---|---|---|---|
20210240521 A1 | Aug 2021 | US |
Number | Date | Country | |
---|---|---|---|
62675076 | May 2018 | US |
Number | Date | Country | |
---|---|---|---|
Parent | 16420055 | May 2019 | US |
Child | 17237752 | US |
Number | Date | Country | |
---|---|---|---|
Parent | 16226539 | Dec 2018 | US |
Child | 16420055 | US |