# US 11,908,061 B2 · Inter-warp sharing of general purpose register data in GPU

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

- Number: US 11,908,061 B2
- Document ID: US11908061B2
- Status: Granted
- Kind: B2
- Application number: 17/463,835
- Filed: 2021-09-01
- Published: 2021-12-23
- Granted: 2024-02-20
- Earliest claimed: 2019-03-01
- Assignees: Huawei Technologies Co., Ltd.
- Applicants: Huawei Technologies Co., Ltd.
- Inventors: Zhou Hong; Yufei Zhang
- Web page: https://patentgrep.com/patent/US11908061B2

## CPC

- G06F 9/30032: {Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE}
- G06T 15/005: {General purpose rendering architectures}
- G06F 9/30101: {Special purpose registers}
- G06F 9/3012: {Organisation of register space, e.g. banked or distributed register file}
- G06F 9/3851: {from multiple instruction streams, e.g. multistreaming}
- G06F 9/3887: {controlled by a single instruction for multiple data lanes [SIMD]}
- G06F 9/3888: {controlled by a single instruction for multiple threads [SIMT] in parallel}
- G06T 1/60: Memory management
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)
- G06T: IMAGE DATA PROCESSING OR GENERATION, IN GENERAL

## Abstract

Methodologies and architectures are provided for inter-thread sharing of data in a general purpose register (GPR) of a multiprocessor apparatus. The data sharing is performed by a graphics processing unit (GPU) having at least one processing cluster including a plurality of processing cores (PCs) configured for parallel operation. Each PC of a cluster is configured to utilize a dedicated portion of the GPR. The GPU further includes a shared memory for the cluster, and a memory read/write hub coupled to the GPR and shared memory, the hub including a crossbar switch. A PC executes a move data instruction, including operands referencing a destination portion of the GPR and a source portion assigned to the PC, to retrieve data from the source portion. The memory read/write hub writes the data, via the crossbar switch, to the destination portion of the GPR without first writing the data to the shared memory.

## Claims

### Claim 1

A graphics processing unit (GPU) comprising:
a general purpose register (GPR);
a processing cluster comprising a plurality of processing cores configured for parallel operation, wherein each processing core of the plurality of processing cores is configured to utilize a respective dedicated portion of the GPR when processing instructions;
a shared memory for the plurality of processing cores; and
a memory read/write hub coupled to the GPR and the shared memory, the memory read/write hub comprising a crossbar switch,
wherein the GPU is configured to execute instructions of an instruction set architecture, wherein the instructions of the instruction set architecture comprise a move data instruction that comprises operands that reference a source portion of the GPR and a destination portion of the GPR; and
in response to execution of the move data instruction:
a processing core of the plurality of processing cores is configured to retrieve data from the source portion of the GPR; and
the memory read/write hub is configured to write, via the crossbar switch, the retrieved data to the destination portion of the GPR, the writing of the retrieved data occurring without first writing the retrieved data to the shared memory.

### Claim 2 (depends on 1)

The GPU of claim 1, wherein the processing cluster is configured to execute a warp of related threads, each processing core of the plurality of processing cores executing a separate thread of the warp of related threads.

### Claim 3 (depends on 1)

The GPU of claim 1, wherein the move data instruction further comprises a warp identifier.

### Claim 4 (depends on 1)

The GPU of claim 1, wherein the operands that reference the source portion of the GPR and the destination portion of the GPR comprise a register identifier for the source portion of the GPR and a register identifier for the destination portion of the GPR.

### Claim 5 (depends on 1)

The GPU of claim 1, wherein the move data instruction further comprises a register size value.

### Claim 6 (depends on 1)

The GPU of claim 1, wherein in response to the execution of the move data instruction,
the processing core is further configured to send the retrieved data, a warp size value, and a per-thread register size value to the memory read/write hub.

### Claim 7 (depends on 1)

The GPU of claim 1, wherein in response to the execution of the move data instruction,
the processing core is further configured to send at least one of a destination processing core identifier or a destination register identifier to the memory read/write hub.

### Claim 8 (depends on 1)

The GPU of claim 1, wherein the source portion of the GPR referenced by the operands of the move data instruction is a subset of a respective dedicated portion of the GPR utilized by the processing core.

### Claim 9 (depends on 1)

The GPU of claim 1, wherein each processing core of the plurality of processing cores comprises an arithmetic logic unit (ALU).

### Claim 10 (depends on 1)

The GPU of claim 1, wherein each processing core of the plurality of processing cores comprises an integer arithmetic logic unit (ALU) and a floating-point ALU.

### Claim 11

A method for operating a graphics processing unit (GPU), the GPU comprising a processing cluster, the processing cluster comprising a plurality of processing cores configured to execute a warp of related threads, each processing core of the plurality of processing cores executing a separate thread of the warp of related threads in parallel, the GPU further comprising a shared memory for the processing cluster, the method comprising:
receiving, by a processing core of the plurality of processing cores, a move data instruction of an instruction set architecture of the GPU, the move data instruction comprising operands that reference a source portion of a general purpose register (GPR) and a destination portion of the GPR, each processing core of the plurality of processing cores configured to utilize a respective dedicated portion of the GPR when processing instructions, wherein the processing core is configured to utilize the source portion of the GPR referenced by the move data instruction;
executing, by the processing core, the move data instruction to:
retrieve data from the source portion of the GPR; and
provide the retrieved data to a memory read/write hub, the memory read/write hub coupled to the GPR and the shared memory, the memory read/write hub comprising a crossbar switch; and
writing, by the memory read/write hub via the crossbar switch, the retrieved data to the destination portion of the GPR, the writing of the retrieved data occurring without first writing the retrieved data to the shared memory.

### Claim 12 (depends on 11)

The method of claim 11, wherein the move data instruction further comprises a warp identifier.

### Claim 13 (depends on 11)

The method of claim 11, wherein the operands that reference the source portion of the GPR and the destination portion of the GPR comprises a register identifier for the source portion of the GPR and a register identifier for the destination portion of the GPR.

### Claim 14 (depends on 11)

The method of claim 11, wherein the move data instruction further comprises a register size value.

### Claim 15 (depends on 11)

The method of claim 11, wherein providing the retrieved data to the memory read/write hub further comprises providing a warp size value and a per-thread register size value to the memory read/write hub.

### Claim 16 (depends on 11)

The method of claim 11, wherein providing the retrieved data to the memory read/write hub further comprises providing at least one of a destination processing core identifier or a destination register identifier.

### Claim 17 (depends on 11)

The method of claim 11, wherein the source portion of the GPR referenced by the operands of the move data instruction is a subset of a respective dedicated portion of the GPR utilized by the processing core.

### Claim 18

A multiprocessor apparatus comprising:
a plurality of processing clusters, each of the plurality of processing clusters configured to execute a grouping of related threads in parallel, each of the plurality of processing clusters comprising:
a general purpose register (GPR);
a plurality of processing cores, each processing core of the plurality of processing cores comprising a temporary register, wherein each processing core of the plurality of processing cores is configured to utilize a respective dedicated portion of the GPR when processing instructions;
a shared memory for the plurality of processing cores; and
a memory read/write hub coupled to the GPR and the shared memory, the memory read/write hub comprising a crossbar switch,
wherein the multiprocessor apparatus is configured to execute instructions of an instruction set architecture, the instructions of the instruction set architecture comprising a move data instruction comprising operands that reference a source temporary register and a destination portion of the GPR; and
in response to execution of the move data instruction:
a processing core of the plurality of processing cores is configure to retrieve data from the source temporary register; and
the memory read/write hub is configured to write, via the crossbar switch, the retrieved data to the destination portion of the GPR, the writing of the retrieved data occurring without first writing the retrieved data to the shared memory.

### Claim 19 (depends on 18)

The multiprocessor apparatus of claim 18, wherein the move data instruction further comprises a thread grouping identifier.

### Claim 20 (depends on 18)

The multiprocessor apparatus of claim 18, wherein the operands that reference the source temporary register and the destination portion of the GPR comprise a register identifier for the source temporary register and a register identifier for the destination portion of the GPR, and the move data instruction further comprises a register size value.
