Streaming Programming Generator for GPU Pipeline Automation
Find Innovative SolutionsGenerate Solutions
Solution Overview
Problem
Existing GPU programming languages, such as OpenCL, DirectCompute, and CUDA, require developers to manually specify low-level details of computational pipelines, making it time-consuming and cumbersome to develop and optimize programs for general-purpose computations on GPUs.
Innovation Solution
A toolkit that allows users to define computational pipelines using a control graph with stages, buffers, and kernels, automatically generating executable streaming programs and host-side runtime code, thereby simplifying the development process and enabling execution on GPUs, multicore CPUs, or distributed clusters.
Engineering Contradictions & Design Principles
Engineering Contradiction Analysis
1Productivity
If developers manually specify low-level details of computational pipelines using existing GPU programming languages, then the programs can execute on GPUs, but the development process becomes time-consuming and cumbersome
Solution Approach 1:
The patent introduces a computational pipeline description language as an intermediary between high-level algorithmic concepts and low-level GPU instructions. This intermediate representation allows developers to specify computational pipelines at an abstract level while the system automatically generates the necessary low-level code, thereby resolving the contradiction between execution capability and development efficiency
Solution Approach 2:
The system performs preliminary actions by automatically generating kernel code, buffer management code, and pipeline configuration code before the actual GPU execution. This advance generation of low-level details from high-level specifications eliminates the need for developers to manually write time-consuming low-level code, thus improving productivity while maintaining GPU execution capability
2Ease of operation
If developers use high-level abstractions to define computational pipelines, then the development effort is reduced, but the ability to control low-level details is lost
Solution Approach 1:
The patent segments the programming task into two distinct layers: a high-level pipeline description layer for ease of definition, and a low-level code generation layer for detailed control. The pipeline description language allows developers to work with high-level abstractions while the system segments the generation of low-level kernel code, buffer management, and synchronization details, thereby providing both ease of operation and necessary control
Solution Approach 2:
The system dynamically adapts the level of abstraction based on the specific computational pipeline being defined. The pipeline description language allows developers to specify high-level semantics while the code generation process dynamically produces appropriate low-level details, enabling ease of operation for common cases while maintaining the ability to control low-level details when needed
3Adaptability or versatility
If streaming programming languages describe only computational kernels and data buffers, then the language remains simple, but higher-level constructs cannot be expressed
Solution Approach 1:
The patent adds a new dimension to the programming model by introducing a temporal and structural dimension through the pipeline description language. This language operates at a higher conceptual dimension, describing computational pipelines as sequences of stages with data flow relationships, while the system maps these high-dimensional constructs down to the traditional kernel-buffer model, thereby enabling expression of higher-level constructs without excessive language complexity
Data Source
AI summary
A device receives input that includes definitions of components of a computational pipeline, where the components include one or more buffers, one or more kernels, and one or more stages within a control graph. The device generates, based on the input, kernel signatures for a graphics processor, where the kernel signatures compile into an executable streaming program for the computational pipeline. The device also generates, based on the input, host-side runtime code to execute the streaming program.


