Hash Table Access via Parallel Chain Traversal on SIMD Processors

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Conventional hash tables are inefficient when used on parallelized processors like GPGPUs due to lack of parallelism and branch and memory divergence during element manipulation operations.

Innovation Solution

The proposed solution involves a hash table design with multiple chains or arrays per bucket, allowing SIMD processors to traverse elements in parallel, reducing branch and memory divergence by ensuring all threads complete their look-ups simultaneously through a wide sweep search or organizing elements into contiguous arrays.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Productivity

If conventional hash tables are used on parallelized processors, then element manipulation can be performed, but parallelism is insufficient and branch/memory divergence occurs reducing efficiency

Engineering Contradiction:
Improvehash table operation efficiencyVSAvoidhash table structure complexity
Core Design Contradiction:
ProductivityVSDevice complexity

Solution Approach 1:

The hash table is segmented into multiple buckets, with each bucket containing a separate chain of elements. This segmentation allows different threads to operate on different buckets simultaneously, enabling parallel access and reducing branch divergence. Each thread can independently traverse its assigned bucket's chain without interfering with other threads, thus improving productivity while maintaining a manageable structure through systematic division.

Inventive Principle:
Principle #1Segmentation

2Ease of operation

If threads access hash table elements at different depths, then key look-up can be performed, but threads complete at different times causing branch divergence

Engineering Contradiction:
Improvekey look-up operationVSAvoidthread waiting time
Core Design Contradiction:
Ease of operationVSLoss of time

Solution Approach 1:

The hash table structure is pre-organized with multiple buckets and chains designed to balance element distribution. By preliminarily distributing elements across multiple chains within buckets, the system ensures that thread traversal depths are more uniform. This preliminary structural arrangement reduces the variance in completion times across threads, minimizing branch divergence and reducing idle waiting time while maintaining ease of key look-up operations.

Inventive Principle:
Principle #10Preliminary action

3Power

If multiple threads execute the same instructions in parallel, then processing capacity increases, but threads must wait for the slowest thread causing reduced efficiency

Engineering Contradiction:
Improveparallel processing capacityVSAvoidthread execution efficiency
Core Design Contradiction:
PowerVSProductivity

Solution Approach 1:

The hash table is divided into multiple independent buckets, each with its own chain structure. This segmentation allows the parallel processing power of multiple threads to be fully utilized by assigning different buckets to different threads. Each thread can complete its traversal independently without waiting for others, as the segmentation ensures that no single thread becomes a bottleneck. This resolves the contradiction by enabling both high parallel processing capacity and high thread execution efficiency through independent parallel paths.

Inventive Principle:
Principle #1Segmentation

Data Source

PatentUS9626428B2Apparatus and method for hash table access
Publication Date: 2017.04.18 ADVANCED MICRO DEVICES INC
  • US9626428B2 patent drawing
  • US9626428B2 patent drawing
  • US9626428B2 patent drawing

AI summary

A system and method for accessing a hash table are provided. A hash table includes buckets where each bucket includes multiple chains. When a single instruction multiple data (SIMD) processor receives a group of threads configured to execute a key look-up instruction that accesses an element in the hash table, the threads executing on the SIMD processor identify a bucket that stores a key in the key look-up instruction. Once identified, the threads in the group traverse the multiple chains in the bucket, such that the elements at a chain level in the multiple chains are traversed in parallel. The traversal continues until a key look-up succeeds or fails.