GPU Preemption via Double-Buffered Read-Modify-Write Memory

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Conventional preemption techniques in graphics processing units (GPUs) rely on 'safe points' for stopping and resuming tasks, which can lead to unpredictable and potentially long delays due to asynchronous processing, impacting user experience by delaying higher priority graphics tasks.

Innovation Solution

Implementing double-buffering for read-modify-write memory resources to allow preemption at arbitrary control points, enabling immediate handling of preemption requests while maintaining a stable state for restarting the original task, by storing original data in one buffer and modified data in another, allowing the GPU to restart from the beginning.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Reliability

If conventional preemption techniques using safe points are used, then the GPU can resume tasks, but unpredictable and long delays occur due to asynchronous processing

Engineering Contradiction:
Improvepreemption handlingVSAvoiddelay
Core Design Contradiction:
ReliabilityVSLoss of time

Solution Approach 1:

The patent applies preliminary action by pre-storing original task state information in a separate state buffer before preemption occurs. This allows the GPU to immediately restore the original state without waiting for asynchronous operations to complete, eliminating unpredictable delays while maintaining reliable preemption handling.

Inventive Principle:
Principle #10Preliminary action

2Adaptability or versatility

If the GPU tracks progress through command streams for preemption, then higher priority tasks can be executed, but the system complexity increases

Engineering Contradiction:
Improvetask prioritizationVSAvoidpreemption mechanism
Core Design Contradiction:
Adaptability or versatilityVSDevice complexity

Solution Approach 1:

The patent segments the GPU state into separate buffers: an original task buffer for current operations and a state buffer for preserving original task information. This segmentation allows independent management of task states, enabling versatile task prioritization while reducing overall system complexity through modular state management.

Inventive Principle:
Principle #1Segmentation

3Stability of the object's composition

If the GPU returns to the original task at the stopping point, then continuity is maintained, but memory resources may be compromised

Engineering Contradiction:
Improvetask state continuityVSAvoidmemory resource integrity
Core Design Contradiction:
Stability of the object's compositionVSReliability

Solution Approach 1:

The patent creates a copy of the original task state information and stores it in a dedicated state buffer before preemption. This copying mechanism allows the GPU to restore the exact original state after preemption, maintaining task state continuity while ensuring memory resource integrity by preserving an unchanged copy of the original data.

Inventive Principle:
Principle #26Copying

Data Source

PatentUS9230518B2Fault-tolerant preemption mechanism at arbitrary control points for graphics processing
Publication Date: 2016.01.05 QUALCOMM INC
  • US9230518B2 patent drawing
  • US9230518B2 patent drawing
  • US9230518B2 patent drawing

AI summary

This disclosure presents techniques and structures for preemption at arbitrary control points in graphics processing. A method of graphics processing may comprise executing commands in a command buffer, the commands operating on data in a read-modify-write memory resource, double buffering the data in the read-modify-write memory resource, such that a first buffer stores original data of the read-modify-write memory resource and a second buffer stores any modified data produced by executing the commands in the command buffer, receiving a request to preempt execution of the commands in the command buffer before completing all commands in the command buffer, and restarting execution of the commands at the start of the command buffer using the original data in the first buffer.