Speculative Load Compiler Control for Microprocessor Latency

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

In digital data processing, existing technologies face challenges in reducing latency when data is not in the cache, as they often require waiting for data retrieval from memory, which slows down system execution.

Innovation Solution

A statically scheduled processor compiler schedules a speculative load before the data is needed, inserting a conditional instruction to confirm or disaffirm the load, considering dependencies from the original source code, and allowing for parallel scheduling of branches with orthogonal conditions.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Loss of time

If the compiler speculatively hoists a load operation early in the instruction stream, then data availability is improved and latency is reduced, but the risk of incorrect data usage increases if the address is wrong

Engineering Contradiction:
ImprovelatencyVSAvoiddata correctness
Core Design Contradiction:
Loss of timeVSReliability

Solution Approach 1:

The compiler performs preliminary action by hoisting the load operation before the branch instruction, executing the load speculatively in advance. This allows data to be fetched earlier in the instruction stream, reducing latency. The load is marked as speculative and will be validated later by the conditional instruction to ensure correctness.

Inventive Principle:
Principle #10Preliminary action

Solution Approach 2:

A conditional instruction is inserted after the speculative load to provide feedback on whether the load was correct. This conditional instruction validates the address and determines if the speculatively loaded data should be used or discarded, ensuring data correctness while allowing early execution.

Inventive Principle:
Principle #23Feedback

2Reliability

If the compiler inserts conditional instructions to validate speculative loads, then data correctness is maintained, but the instruction stream complexity increases

Engineering Contradiction:
Improvedata correctnessVSAvoidinstruction stream complexity
Core Design Contradiction:
ReliabilityVSDevice complexity

Solution Approach 1:

The validation process is segmented into separate conditional instructions that are inserted at specific points in the instruction stream. Each conditional instruction handles a specific aspect of validation, allowing the complex validation logic to be broken down into manageable segments that integrate smoothly with the existing instruction flow.

Inventive Principle:
Principle #1Segmentation

3Speed

If the compiler schedules loads earlier in the instruction stream, then system speed is improved, but the difficulty of ensuring proper data dependencies increases

Engineering Contradiction:
Improvesystem speedVSAvoiddata dependency tracking
Core Design Contradiction:
SpeedVSDifficulty of detecting and measuring

Solution Approach 1:

The conditional instruction acts as an intermediary between the speculative load and subsequent instructions that depend on the data. It mediates the data flow by validating the load and controlling whether the dependent instructions execute, making data dependency tracking easier even when loads are scheduled early.

Inventive Principle:
Principle #24Intermediary (Mediator)

Data Source

PatentUS9239735B2Compiler-control method for load speculation in a statically scheduled microprocessor
Publication Date: 2016.01.19 TEXAS INSTRUMENTS INC
  • US9239735B2 patent drawing
  • US9239735B2 patent drawing
  • US9239735B2 patent drawing

AI summary

A statically scheduled processor compiler schedules a speculative load in the program before the data is needed. The compiler inserts a conditional instruction confirming or disaffirming the speculative load before the program behavior changes due to the speculative load. The condition is not based solely upon whether the speculative load address is correct but preferably includes dependence according to the original source code. The compiler may statically schedule two or more branches in parallel with orthogonal conditions.