IP Library Granted Patent US 12,602,185
Granted Patent B2
US 12,602,185 · App. 18/376,094 · Granted Apr 14, 2026

Maintaining synchronisation between memory writing and reading blocks using an internal buffer and a control channel

Inventors: Alan Vines (Hertfordshire, GB); Stephen Spain (Hertfordshire, GB); Fernando Escobar (Hertfordshire, GB)
Assignee: Imagination Technologies Limited
G06F3/0656G06F3/061G06F3/0679
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 12,602,185
App. No.
18/376,094
Granted
Apr 14, 2026
Kind
B2
Abstract

A hardware unit for manipulating data stored in a memory comprises an internal buffer, a memory reading block, configured to read the data from the memory and write the data to the internal buffer. a memory writing block, configured to read the data from the internal buffer and write the data to the memory. The hardware unit optionally also comprises a control channel between the memory reading block and the memory writing block, wherein the memory reading block and the memory writing block are configured to communicate via the control channel to maintain synchronisation between them when writing the data to the internal buffer and reading the data from the internal buffer, respectively. The hardware unit may be configured to apply one or more transformations to multidimensional data in the memory. The hardware unit may be configured to traverse the multidimensional array using a plurality of nested loops.

Claims (55)

1 . A hardware unit for manipulating data stored in a memory, the hardware unit comprising:

an internal buffer;

a memory reading block, configured to read the data from the memory and write the data to the internal buffer;

a memory writing block, configured to read the data from the internal buffer and write the data to the memory; and

a control channel between the memory reading block and the memory writing block, wherein the memory reading block and the memory writing block are configured to communicate via the control channel to maintain synchronisation between them when writing the data to the internal buffer and reading the data from the internal buffer, respectively;

wherein the data comprises a multidimensional array comprising a plurality of data elements, wherein at least one of the memory reading block and the memory writing block is configured to traverse the multidimensional array using a plurality of nested loops, each loop having associated with it a corresponding stride between data elements of the multidimensional array.

2 . The hardware unit of claim 1 , wherein at least one loop of the plurality of nested loops is configured to iterate a different number of times depending on at least one of:

(a) a loop index of at least one other loop of the plurality of nested loops; and

(b) a software configurable flag.

3 . The hardware unit of claim 1 , wherein each loop of the plurality of loops is configured to perform a variable number of iterations, the variable number being selected at runtime from a group comprising:

a first number of iterations to be performed when one or more outer loops of the plurality of nested loops are not in their end iteration; and

a second number of iterations to be performed when the one or more outer loops of the plurality of nested loops are in their end iteration.

4 . The hardware unit of claim 1 ,

wherein the multidimensional array is stored in the memory in a storage format having storage units of a predetermined third size, wherein one or more dimensions of the multidimensional array are not an integer multiple of the third size.

5 . The hardware unit of claim 4 , wherein at least one of the memory reading block and the memory writing block is configured to traverse the multidimensional array using a plurality of nested loops, each loop having associated with it a corresponding stride between data elements of the multidimensional array,

wherein said at least one block is configured to select, for at least one loop of the plurality of nested loops, a different number of iterations when one or more outer loops are in their end iteration, as compared with the number of iterations of said at least one loop when the one or more outer loops are not in their end iteration.

6 . The hardware unit of claim 1 , wherein the synchronisation between the memory reading block and memory writing block ensures that no data is overwritten in the internal buffer by the memory reading block while it is still needed by the memory writing block, and that data is not read from the internal buffer by the memory writing block until it has been validly written to the internal buffer by the memory reading block.

7 . A hardware unit for manipulating data stored in a memory, the hardware unit comprising:

an internal buffer;

a memory reading block, configured to read the data from the memory and write the data to the internal buffer;

a memory writing block, configured to read the data from the internal buffer and write the data to the memory; and

a control channel between the memory reading block and the memory writing block, wherein the memory reading block and the memory writing block are configured to communicate via the control channel to maintain synchronisation between them when writing the data to the internal buffer and reading the data from the internal buffer, respectively,

wherein each of the memory reading block and the memory writing block has a respective synchronisation counter,

the blocks being configured to communicate their synchronisation counters with each other via the control channel,

wherein the hardware unit is configured to maintain synchronisation between the blocks by comparing the synchronisation counters.

8 . The hardware unit of claim 7 , wherein the data comprises a multidimensional array comprising a plurality of data elements, wherein each of the memory reading block and the memory writing block is configured to traverse the multidimensional array using a respective plurality of nested loops, each loop having associated with it a corresponding stride between data elements of the multidimensional array,

wherein the synchronisation counter of the memory reading block is associated with a first loop of its plurality of loops and the synchronisation counter of the memory writing block is associated with a second loop of its plurality of loops.

9 . The hardware unit of claim 7 , wherein the operation of one of the blocks is paused if the difference between the respective synchronisation counters exceeds a predetermined threshold.

10 . A hardware-implemented method of manipulating data stored in a memory, the data comprising a multidimensional array comprising a plurality of data elements, the method comprising:

(i) reading the data from the memory and writing the data to the internal buffer using a memory reading block; and

(ii) reading the data from the internal buffer and writing the data to the memory using a memory writing block,

wherein at least one of the steps (i) and (ii) is performed using a plurality of nested loops, each loop having associated with it a corresponding stride between data elements of the multidimensional array,

wherein at least one loop of the plurality of nested loops is configured to iterate a different number of times depending on a loop index of at least one other loop of the plurality of nested loops, and

wherein the memory reading block and the memory writing block are configured to communicate via a control channel to maintain synchronisation between step (i) and step (ii);

wherein each loop of the plurality of loops is configured to perform a variable number of iterations, the variable number being selected at runtime from a group comprising:

a first number of iterations to be performed when one or more outer loops of the plurality of nested loops are in their first iteration; and

a second number of iterations to be performed when the one or more outer loops of the plurality of nested loops are in their end iteration.

11 . The method of claim 10 , wherein at least one loop of the plurality of nested loops is further configured to iterate a different number of times depending on a software configurable flag.

12 . The method of claim 10 , further comprising:

maintaining a first synchronisation counter associated with a first loop among the plurality of loops performing step (i), wherein the first synchronisation counter is incremented with each iteration of the first loop;

maintaining a second synchronisation counter associated with a second loop among the plurality of loops performing step (ii), wherein the second synchronisation counter is incremented with each iteration of the second loop;

comparing a current value of the first synchronisation counter with a current value of the second synchronisation counter; and

controlling the progress of step (i) and or step (ii) based on a result of the comparison.

13 . The method of claim 12 , wherein controlling the progress of step (i) and/or step (ii) based on a result of the comparison comprises one or more of:

pausing step (i) if the first synchronisation counter exceeds the second synchronisation counter by more than a predetermined first threshold; and

pausing step (ii) if the second synchronisation counter exceeds the first synchronisation counter by more than a predetermined second threshold.

14 . A method of manufacturing, using an integrated circuit manufacturing system, the hardware unit as set forth in claim 1 , the method comprising:

processing, using a layout processing system, a computer readable dataset description of the hardware unit so as to generate a circuit layout description of an integrated circuit embodying the hardware unit or neural network accelerator system; and

manufacturing, using an integrated circuit generation system, the hardware unit according to the circuit layout description.

15 . A non-transitory computer readable storage medium having stored thereon computer readable code configured to cause the method as set forth in claim 10 to be performed when the code is run on at least one processor.

16 . A non-transitory computer readable storage medium having stored thereon a computer readable data description of a hardware unit as set forth in claim 1 that, when processed in an integrated circuit manufacturing system, causes the integrated circuit manufacturing system to manufacture an integrated circuit embodying the hardware unit or neural network accelerator system.

17 . An integrated circuit manufacturing system comprising:

a non-transitory computer readable storage medium having stored thereon a computer readable dataset description of a hardware unit as set forth in claim 1 ;

a layout processing system configured to process the computer readable description so as to generate a circuit layout description of an integrated circuit embodying the hardware unit; and

an integrated circuit generation system configured to manufacture the hardware unit according to the circuit layout description.

Assignments (1)
SECURITY INTEREST Recorded Jul 31, 2024
From: IMAGINATION TECHNOLOGIES LIMITED
To: FORTRESS INVESTMENT GROUP (UK) LTD
Reel/Frame 068221/0001 →
Priority Claims (2)
GB 2008299 · Jun 2, 2020 · national
GB 2012814 · Aug 17, 2020 · national
Continuity (2)
Continuation 17336701 · Jun 2, 2021
Related Publication 20240028256A1 · Jan 25, 2024
References Cited (39)
US 2891883A · Howe · 1959 [cited by applicant]
US 3918297A · Rocha · 1975 [cited by applicant]
US 4237551A · Narasimha · 1980 [cited by applicant]
US 5148547A · Kahle et al. · 1992 [cited by applicant]
US 5557734A · Wilson · 1996 [cited by applicant]
US 5659781A · Larson · 1997 [cited by applicant]
US 5938763A · Fimoff et al. · 1999 [cited by applicant]
US 5960468A · Paluch · 1999 [cited by applicant]
US 5963531A · Takahashi · 1999 [cited by applicant]
US 6105114A · Okuno · 2000 [cited by applicant]
US 7428628B2 · Fenney · 2008 [cited by applicant]
US 8095745B1 · Schmidt · 2012 [cited by examiner]
US 8825730B1 · Perry et al. · 2014 [cited by applicant]
US 9330740B1 · Baeckler · 2016 [cited by examiner]
US 11431392B2 · Wang et al. · 2022 [cited by applicant]
US 20050223178A1 · Garcia · 2005 [cited by examiner]
US 20060031652A1 · Richter et al. · 2006 [cited by applicant]
US 20060082585A1 · Yeo · 2006 [cited by applicant]
US 20060248489A1 · Ruf · 2006 [cited by applicant]
US 20080098208A1 · Reid · 2008 [cited by examiner]
US 20080244332A1 · Edwards · 2008 [cited by examiner]
US 20090133033A1 · Lindo · 2009 [cited by examiner]
US 20140068168A1 · Murrin et al. · 2014 [cited by applicant]
US 20160124889A1 · Singh et al. · 2016 [cited by applicant]
US 20170169034A1 · Shrivastava et al. · 2017 [cited by applicant]
US 20180255307A1 · Douady-Pleven et al. · 2018 [cited by applicant]
US 20180300602A1 · Petre et al. · 2018 [cited by applicant]
US 20190042221A1 · Krishnaiyer et al. · 2019 [cited by applicant]
US 20190104322A1 · Tsukuba · 2019 [cited by applicant]
US 20190196995A1 · Shen et al. · 2019 [cited by applicant]
US 20190340014A1 · Fishel et al. · 2019 [cited by applicant]
US 20190377580A1 · Vorbach et al. · 2019 [cited by applicant]
US 20200019380A1 · Ross et al. · 2020 [cited by applicant]
US 20200133854A1 · Yang · 2020 [cited by examiner]
US 20200202198A1 · Lee · 2020 [cited by examiner]
US 20210048992A1 · Dally · 2021 [cited by applicant]
US 20220253683A1 · Asad et al. · 2022 [cited by applicant]
William Gropp, Lecture 7: Matrix Transpose, Nov. 23, 2018 (Year: 2018). [cited by examiner]
Gropp, Lecture 7: Matrix Transpose, Nov. 23, 2018 (Year: 2018) (note: copy in parent application). [cited by applicant]