Cooperative Thread Array FFT Processing

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Conventional FFT implementations on processors are computationally intensive and require significant processing power, often limiting their ability to perform large DFTs in real-time, leading to potential quality issues in signal processing due to limited memory bandwidth and throughput.

Innovation Solution

The use of arrays of concurrent threads that can share data to perform Fast Fourier Transform (FFT) computations, where each thread reads and processes input data points, performs butterfly calculations, and stores results in shared or global memory, allowing for reduced latency and increased efficiency.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Productivity

If conventional DFT is implemented on a processor, then the transform can be performed on discrete samples, but the computational complexity is O(N^2) which limits processing power and real-time performance

Engineering Contradiction:
Improveprocessing speedVSAvoidcomputational complexity
Core Design Contradiction:
ProductivityVSPower

Solution Approach 1:

The patent divides the N-point DFT computation into multiple smaller sub-DFTs of size N/R, where R is the radix. Each sub-DFT is computed separately and then combined using butterfly operations. This segmentation reduces the overall computational complexity from O(N^2) to O((N/R)^2 * R) = O(N^2/R), providing significant speedup while maintaining accuracy.

Inventive Principle:
Principle #1Segmentation

2Productivity

If FFT is used to reduce computational operations to O(N log2 N), then processing speed improves, but memory bandwidth requirements and throughput limitations still constrain real-time large DFT performance

Engineering Contradiction:
Improveprocessing speedVSAvoidmemory bandwidth requirements
Core Design Contradiction:
ProductivityVSQuantity of substance

Solution Approach 1:

The patent introduces a new dimension of parallelism by implementing multiple independent FFT engines that can simultaneously process different blocks of input data. Each engine operates on its own subset of data, allowing the system to process large DFTs by dividing the input into multiple blocks that are transformed in parallel, thereby reducing the memory bandwidth burden on any single engine while maintaining high overall throughput.

Inventive Principle:
Principle #17Another dimension (Dimensionality change)

3Productivity

If the processor is configured to perform large DFTs with sufficient processing power, then real-time transformation is achieved, but the ability to perform other operations is limited due to dedicated processing power

Engineering Contradiction:
Improvereal-time transformation capabilityVSAvoidability to perform other operations
Core Design Contradiction:
ProductivityVSAdaptability or versatility

Solution Approach 1:

The patent designs the FFT processor with a modular architecture where the same computational resources (ALUs, memory interfaces) can be dynamically allocated to perform FFT operations when needed, and then made available for other signal processing tasks when not in use. The processor can switch between different operational modes (FFT, IFFT, other DSP operations) without requiring dedicated hardware for each function, thereby maintaining versatility while achieving real-time FFT performance when required.

Inventive Principle:
Principle #6Universality (Multi-functionality)

Data Source

PatentUS7836116B1Fast fourier transforms and related transforms using cooperative thread arrays
Publication Date: 2010.11.16 NVIDIA CORP
  • US7836116B1 patent drawing
  • US7836116B1 patent drawing
  • US7836116B1 patent drawing

AI summary

A linear transform such as a Fast Fourier Transform (FFT) is performed on an input data set having a number of points using one or more arrays of concurrent threads that are capable of sharing data with each other. Each thread of one thread array reads two or more of the points, performs an appropriate “butterfly” calculation to generate two or more new points, then stores the new points in a memory location that is accessible to other threads of the array. Each thread determines which points it is to read based at least in part on a unique thread identifier assigned thereto. Multiple transform stages can be handled by a single thread array, or different levels can be handled by different thread arrays.