# US 2023/0409221 A1 · Methods and systems for storing variable length data blocks in memory

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 2023/0409221 A1
- Document ID: US20230409221A1
- Status: Published application
- Kind: A1
- Application number: 18/241,942
- Filed: 2023-09-04
- Published: 2023-12-21
- Earliest claimed: 2019-12-27
- Assignees: Imagination Technologies Limited
- Applicants: Imagination Technologies Limited
- Inventors: Robert Brigg
- Web page: https://patentgrep.com/patent/US20230409221A1

## CPC

- G06F 3/064: {Management of blocks}
- G09G 5/393: Arrangements for updating the contents of the bit-mapped memory
- G06F 3/0604: {Improving or facilitating administration, e.g. storage management}
- G06F 3/0659: {Command handling arrangements, e.g. command buffers, queues, command scheduling}
- G06F 3/0673: {Single storage device}
- G06T 1/60: Memory management
- G09G 5/395: Arrangements specially adapted for transferring the contents of the bit-mapped memory to the screen (G09G5/399 takes precedence)
- H03M 7/40: Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)
- G09G: ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION (arrangements for transferring data between digital computers and displays G06F3/14; static indicating arrangements comprising an association of a number of separate sources or light control cells G09F9/00; static indicating arrangements comprising integral associations of a number of light sources H01J, H01K, H10H, H05B33/12; scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission, details thereof H04N1/00)
- G06T: IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- H03M: CODING; DECODING; CODE CONVERSION IN GENERAL (using fluidic means F15C4/00; optical analogue/digital converters G02F7/00; coding, decoding or code conversion, specially adapted for particular applications, see the relevant subclasses, e.g. G01D, G01R, G06F, G06T, G09G, G10L, G11B, G11C, H04B, H04L, H04M, H04N; ciphering or deciphering for cryptography or other purposes involving the need for secrecy G09C)

## Abstract

A set of two or more variable length data blocks is stored in memory. Each variable length data block has 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. For each variable length data block of the set, the first P non-overlapping portions of size B of the variable length data block are stored in a chunk of the memory allocated to that 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. Any remaining portions of the variable length data blocks are stored in a remainder section of the memory shared between the variable length data blocks of the set. Information indicating the size of each of the variable length data blocks in the set is stored in a header.

## Claims

### Claim 1

A method of storing a set of M variable length data blocks in a memory, each variable length data block having a maximum size of N*B, wherein M and N are integers greater than or equal to two and B is a maximum data size writable to the memory using a single memory access request, the method comprising:
allocating the set of M variable length data blocks a portion of the memory greater than or equal to M*N*B independent of a size of the variable length data blocks in the set, the portion of memory being partitioned into a maximum accessible data unit section and a remainder section;
storing, for each variable length data block in the set, first P non-overlapping portions of size B of the variable length data block in the maximum accessible data unit section, 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, wherein X is an integer less than N;
storing any remaining portions of the variable length data blocks in the set in the remainder section; and
storing, in a header section of the memory, information indicating a size of each of the variable length data blocks in the set.

### Claim 2 (depends on 1)

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

### Claim 3 (depends on 2)

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

### Claim 4 (depends on 2)

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

### Claim 5 (depends on 1)

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 set in the remainder section comprises:
storing the remaining portion of a first variable length data block in the set at a start or at an end of the remainder section;
making a determination, for each other variable length data block in 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.

### Claim 6 (depends on 1)

The method of claim 1, wherein storing the remaining portions of the variable length data blocks in the set 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.

### Claim 7 (depends on 1)

The method of claim 1, wherein the first P non-overlapping portions of size B of the variable length data blocks in the set are stored in the maximum accessible data unit section in an order and the remaining portions of the variable length data blocks in the set are stored in the remainder section in that order.

### Claim 8 (depends on 1)

The method of claim 1, wherein the first P non-overlapping portions of size B of the variable length data blocks in the set are stored in the maximum accessible data unit section in an order and the remaining portions of the variable length data blocks in the set are stored in the remainder section in a different order.

### Claim 9 (depends on 1)

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

### Claim 10 (depends on 9)

The method of claim 9, wherein the remainder section has a size of M*B.

### Claim 11 (depends on 1)

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.

### Claim 12 (depends on 1)

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 maximum accessible data unit section;
reading the remaining portion of at least one other variable length data block in 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.

### Claim 13 (depends on 1)

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.

### Claim 14 (depends on 1)

The method of claim 1, wherein:
the maximum accessible data unit section is sub-divided into M equal-sized chunks, and each variable length data block in the set is allocated one of the M equal-sized chunks; and
the first P non-overlapping portions of a variable length data block in the set are stored in the chunk of the maximum accessible data unit section allocated to the variable length data block.

### Claim 15 (depends on 14)

The method of claim 14, wherein each of the M equal-sized chunks has a size of X*B.

### Claim 16

A memory system for storing a set of M variable length data blocks in a memory, each variable length data block having a maximum size of N*B, wherein M and N are integers greater than or equal to two and B is a maximum data size writable to the memory using a single memory access request, the memory system comprising:
said memory, wherein said memory comprises:
a portion allocated to the set of M variable length data blocks, the portion being greater than or equal to M*N*B independent of a size of the variable length data blocks in the set, the portion being partitioned into a maximum accessible data unit section and a remainder section, and
a header section; and
logic configured to:
store, for each variable length data block in the set, first P non-overlapping portions of size B of the variable length data block in the maximum accessible data unit section, 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, wherein X is an integer less than N,
store, in the remainder section, any remaining portions of the variable length data blocks in the set, and
store, in the header section, information indicating a size of each variable length data block in the set.

### Claim 17 (depends on 1)

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

### Claim 18 (depends on 16)

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

### Claim 19 (depends on 1)

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.

### Claim 20 (depends on 16)

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