IP Library Granted Patent US 11,748,010
Granted Patent B2
US 11,748,010 · App. 17/134,803 · Granted Sep 5, 2023

Methods and systems for storing variable length data blocks in memory

Inventor: Robert Brigg (Watford, GB)
Assignee: Imagination Technologies Limited
G06F3/064G06F3/0604G06F3/0659G06F3/0673H03M7/40
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 11,748,010
App. No.
17/134,803
Granted
Sep 5, 2023
Kind
B2
Abstract

Methods and systems for storing a set of two or more variable length data blocks in a memory. Each variable length data block having a maximum size of N*B, wherein N is an integer greater than or equal to two, and B is a maximum data size that can be written to the memory using a single memory access request. The methods include: storing, for each variable length data block of the set, the first P non-overlapping portions of size B of the variable length data block in a chunk of the memory allocated to that the variable length data block, wherein P is a minimum of (i) a number of non-overlapping portions of size B of the variable length data block and (ii) X which is an integer less than N; storing any remaining portions of the variable length data blocks in a remainder section of the memory that is shared between the variable length data blocks of the set; and storing, in a header section of the memory, information indicating the size of each of the variable length data blocks in the set.

Claims (45)

1. A method of storing a set of at least two variable length data blocks in a memory, each variable length data block having a maximum size of N*B, wherein N is an integer greater than or equal to two, and B is a maximum data size that is written to the memory using a single memory access request, the method comprising:

storing, for each variable length data block in the set, first P non-overlapping portions of size B of the variable length data block within a chunk of the memory allocated to the variable length data block, wherein the chunk of the memory allocated to each variable length data block has a same size of X*B, X is a constant integer less than N, and P is a minimum of: (i) a number of non-overlapping portions of size B of the variable length data block, and (ii) X;

storing any remaining portions of the variable length data blocks in the set in a remainder section of the memory that is shared between the variable length data blocks of the set; and

storing, in a header section of the memory, information indicating a size of each of the variable length data blocks in the set.

2. The method of claim 1 , wherein storing the remaining portions of the variable length data blocks in the remainder section comprises storing the remaining portions of the variable length data blocks adjacent each other in the remainder section.

3. The method of claim 2 , wherein the remaining portions of the variable length data blocks are stored adjacent each other in the remainder section starting from a starting address of the remainder section.

4. The method of claim 2 , wherein the remaining portions of the variable length data blocks are stored adjacent each other in the remainder section starting from a last address of the remainder section.

5. The method of claim 1 , wherein the remainder section is divided into a plurality of B-sized parts and storing the remaining portions of the variable length data blocks in the remainder section comprises:

storing the remaining portion of a first variable length data block of the set at a start or at an end of the remainder section;

making a determination, for each other variable length data block of the set, whether storing the remaining portion of the variable length data block adjacent to a previous remaining portion in the remainder section will cause the remaining portion of the variable length data block to be stored in at least two B-sized parts of the plurality of the B-sized parts;

in response to determining that storing the remaining portion of a variable length data block adjacent the previous remaining portion in the remainder section will cause the remaining portion to be stored in at least two B-sized parts of the plurality of the B-sized parts, storing the remaining portion at a start of a next B-sized part of the remainder section; and

in response to determining that storing the remaining portion of a variable length data block adjacent to the previous remaining portion in the remainder section will not cause the remaining portion to be stored in at least two B-sized parts of the plurality of the B-sized parts, storing the remaining porting adjacent the previous remaining portion in the remainder section.

6. The method of claim 1 , wherein storing the remaining portions of the variable length data blocks in the remainder section comprises forming one or more remainder blocks from the remaining portions and storing the one or more remainder blocks in the remainder section.

7. The method of claim 1 , wherein the remaining portions of the variable length data blocks are stored in the remainder section in a same order that the first P non-overlapping portions of size B of the variable length data blocks are stored in the memory.

8. The method of claim 1 , wherein the remaining portions of the variable length data blocks are stored in the remainder section in a different order than the first P non-overlapping portions of size B of the variable length data blocks are stored in the memory.

9. The method of claim 1 , wherein X is equal to N−1.

10. The method of claim 9 , wherein the remainder section has a size of M*B wherein M is a number of variable length data blocks in the set.

11. The method of claim 1 , wherein storing, in the header section of the memory, information indicating the size of each of the variable length data blocks in the set comprises storing in a header for each of the variable length data blocks in the set information identifying the size of the variable length data block.

12. The method of claim 1 , further comprising:

receiving a modified version of a variable length data block in the set;

storing first P non-overlapping portions of size B of the modified version of the variable length data block in the chunk of the memory allocated to the variable length data block;

reading the remaining portion of at least one other variable length data block of the set from the remainder section;

forming a remainder block from any remaining portion of the modified version of the variable length data block and the remaining portion of the at least one other variable length data block; and

storing the remainder block in the remainder section.

13. The method of claim 1 , wherein at least one of the variable length data blocks in the set comprises a compressed block of data that was compressed in accordance with a lossless compression algorithm.

14. The method of claim 1 , wherein each of the variable length data blocks represents a portion of frame buffer data.

15. A non-transitory computer readable storage medium having stored thereon computer readable instructions that, when executed at a computer system, cause the computer system to perform the method as set forth in claim 1 .

16. A graphics processing system configured to perform the method as set forth in claim 1 .

17. A method of reading a variable length data block of a set of at least two variable length data blocks from a memory, each of the variable length data blocks having a maximum size of N*B, wherein N is an integer greater than or equal to two and B is a maximum data size that is written to the memory using a single memory access request, the method comprising:

obtaining one or more headers for the set of at least two variable length data blocks, the one or more headers comprising information identifying a size of each of the variable length data blocks in the set;

determining from the one or more headers whether the variable length data block comprises at least one unit of size B;

in response to determining that the variable length data block comprises at least one unit of size B, reading first P units of size B from a chunk of the memory allocated to the variable length data block, wherein each chunk of the memory allocated to a variable length data block in the set has a same size of X*B, X is a constant integer less than N, and P is a minimum of: (i) a number of units of size B of the variable length data block, and (ii) X;

determining from the one or more headers whether the variable length data block comprises a remainder portion that is not stored in the chunk of memory allocated to the variable length data block; and

in response to determining that the variable length data block comprises a remainder portion, identifying a location of the remainder portion in a remainder section of the memory shared between the variable length data blocks of the set and reading the remainder portion for the variable length data block from the identified location in the remainder section.

18. A memory system for storing a set of at least two variable length data blocks in a memory, each variable length data block having a maximum size of N*B, wherein N is an integer greater than or equal to two and B is a maximum data size that is written to the memory using a single memory access request, the system comprising:

the memory, comprising:

a chunk allocated to each variable length data block of the set, each chunk having a same size of X*B, wherein X is a constant integer less than N,

a remainder section that is shared between the variable length data blocks of the set, and

a header section; and

logic configured to:

store, for each variable length data block of the set, first P non-overlapping portions of size B of the variable length data block within the chunk of the memory allocated to the variable length data block, wherein P is a minimum of: (i) a number of non-overlapping portions of size B of the variable length data block, and (ii) X,

store, in the remainder section, any remaining portions of the variable length data blocks of the set, and

store, in the header section, information indicating a size of each variable length data block of the set.

19. A non-transitory computer readable storage medium having stored thereon a computer readable dataset description of the memory system as set forth in claim 18 that, when processed in an integrated circuit manufacturing system, causes the integrated circuit manufacturing system to manufacture an integrated circuit embodying the memory system.

20. A graphics processing system comprising the memory system as set forth in claim 18 .

Assignments (2)
SECURITY INTEREST Recorded Jul 31, 2024
From: IMAGINATION TECHNOLOGIES LIMITED
To: FORTRESS INVESTMENT GROUP (UK) LTD
Reel/Frame 068221/0001 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Dec 28, 2020
From: BRIGG, ROBERT
To: IMAGINATION TECHNOLOGIES LIMITED
Reel/Frame 054753/0283 →
Priority Claims (1)
GB 1919378 · Dec 27, 2019 · national
Continuity (1)
Related Publication 20210200441A1 · Jul 1, 2021