Hardware Indirect Prefetcher for Irregular Memory Access Patterns

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Existing processor technologies face performance bottlenecks in graph analytics and sparse matrix applications due to high latency and bandwidth limitations in memory access, particularly for irregular memory access patterns, which current hardware and software prefetching methods fail to adequately address.

Innovation Solution

The implementation of a hardware-based indirect prefetcher that detects and anticipates indirect memory access patterns by reading an index array ahead, and a partial cacheline accessing technique that only loads the necessary data into the cache, reducing bandwidth and power consumption without requiring programmer input.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Loss of time

If traditional hardware prefetching methods are used, then memory access latency is reduced for regular access patterns, but performance deteriorates for irregular indirect access patterns

Engineering Contradiction:
Improvememory access latencyVSAvoidthroughput for indirect access patterns
Core Design Contradiction:
Loss of timeVSProductivity

Solution Approach 1:

The patent implements a hardware prefetcher that performs preliminary actions by detecting indirect access patterns and prefetching data before it is actually needed by the processor. The system monitors memory access patterns, identifies indirect addressing sequences, and proactively loads required data into the cache hierarchy in advance, thereby reducing latency for irregular access patterns without requiring programmer intervention.

Inventive Principle:
Principle #10Preliminary action

Solution Approach 2:

The prefetcher operates autonomously to detect and handle indirect access patterns without external control. It self-monitors memory access streams, automatically identifies indirect addressing sequences through pattern recognition logic, and self-manages the prefetching operation by generating appropriate memory requests, thereby improving productivity for irregular patterns while maintaining low latency.

Inventive Principle:
Principle #25Self-service

2Reliability

If full cachelines are loaded into cache, then data availability is improved, but bandwidth consumption and power usage increase

Engineering Contradiction:
Improvedata availability in cacheVSAvoidbandwidth and power consumption
Core Design Contradiction:
ReliabilityVSLoss of energy

Solution Approach 1:

The patent applies local quality by differentiating between different portions of cachelines based on actual access patterns. Instead of uniformly loading entire cachelines, the system identifies and loads only the specific data elements or sub-regions that are actually needed for indirect access patterns, thereby maintaining data availability for required operations while reducing unnecessary bandwidth consumption and power usage for unused cache data.

Inventive Principle:
Principle #3Local quality

Solution Approach 2:

The system performs partial action by loading only the necessary portion of cachelines into the cache hierarchy rather than complete cachelines. The prefetcher analyzes indirect access patterns to determine the exact data requirements and selectively prefetches only those specific data elements, avoiding the excessive action of loading entire cachelines when only partial data is needed, thus reducing energy loss while maintaining reliability.

Inventive Principle:
Principle #16Partial or excessive action

Data Source

PatentUS9582422B2Hardware prefetcher for indirect access patterns
Publication Date: 2017.02.28 INTEL CORP
  • US9582422B2 patent drawing
  • US9582422B2 patent drawing
  • US9582422B2 patent drawing

AI summary

Two techniques address bottlenecking in processors. The first is indirect prefetching. The technique can be especially useful for graph analytics and sparse matrix applications. For graph analytics and sparse matrix applications, the addresses of most random memory accesses come from an index array B which is sequentially scanned by an application. The random accesses are actually indirect accesses in the form A[B[i]]. A hardware component is introduced to detect this pattern. The hardware can then read B a certain distance ahead, and prefetch the corresponding element in A. For example, if the “prefetch distance” is k, when B[i] is accessed, the hardware reads B[i+k], and then A[B[i+k]. For partial cacheline accessing, the indirect accesses are usually accessing random memory locations and only accessing a small portion of a cacheline. Instead of loading the whole cacheline into L1 cache, the second technique only loads a part of the cacheline.