Compiler Placeholder for Device Lambda Expressions

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Existing GPGPU programming models face challenges in supporting lambda expressions defined in host code for GPU execution, as they require explicit naming of closure types, which is not standardized across compilers and can be local to function scope, limiting template specialization and compilation flexibility.

Innovation Solution

The solution involves identifying device lambda expressions in host code, replacing them with unique placeholder type instantiations, and generating modified host source code that can be compiled by any host compiler without modification, ensuring compatibility and flexibility in template specialization.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Adaptability or versatility

If lambda expressions are explicitly named with closure types in host code, then template specialization and compilation flexibility are improved, but compiler complexity and lack of portability across different host compilers worsen

Engineering Contradiction:
Improvetemplate specialization flexibilityVSAvoidcompiler complexity
Core Design Contradiction:
Adaptability or versatilityVSDevice complexity

Solution Approach 1:

The patent introduces an intermediary placeholder type that mediates between the lambda expression and the template system. Instead of requiring explicit closure type names, the placeholder type acts as a bridge that captures lambda parameters and passes them to device code, simplifying the compiler interface while maintaining template specialization capabilities

Inventive Principle:
Principle #24Intermediary (Mediator)

Solution Approach 2:

The patent extracts the closure type naming requirement from the host code and relocates it to the device code side. By moving the type specification responsibility to the device code where `_global_template` is instantiated, the host compiler no longer needs to handle complex closure type semantics, reducing its complexity

Inventive Principle:
Principle #2Taking out (Extraction)

2Ease of operation

If closure types are local to function scope, then code organization and encapsulation are improved, but template instantiation and compilation portability worsen

Engineering Contradiction:
Improvecode organizationVSAvoidcompiler portability
Core Design Contradiction:
Ease of operationVSAdaptability or versatility

Solution Approach 1:

The patent resolves the scope conflict by operating in a different dimensional space - the device code dimension. Instead of trying to make local function-scoped types visible at the host compilation level, it projects the type information into the device code instantiation context where `_global_template` can access and use these types without requiring host compiler support

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

3Adaptability or versatility

If host compiler customization is implemented to support lambda expressions, then lambda expression compilation capability is improved, but compiler compatibility and ease of use across different environments worsen

Engineering Contradiction:
Improvelambda expression supportVSAvoidcompiler compatibility
Core Design Contradiction:
Adaptability or versatilityVSEase of operation

Solution Approach 1:

The patent segments the lambda expression handling into two distinct parts: host code that defines the lambda with placeholder types, and device code that instantiates the template with actual types. This segmentation allows the host compiler to remain generic while the device code handles the specific type requirements, eliminating the need for host compiler customization

Inventive Principle:
Principle #1Segmentation

Data Source

PatentUS20190196797A1System and method for compiler support for compile time customization of code
Publication Date: 2019.06.27 NVIDIA CORP
  • US20190196797A1 patent drawing
  • US20190196797A1 patent drawing
  • US20190196797A1 patent drawing

AI summary

A system and method for processing source code for compilation. The method includes accessing a portion of host source code and determining whether the portion of the host source code comprises a device lambda expression. The method further includes in response to the portion of host code comprising the device lambda expression, determining a unique placeholder type instantiation based on the device lambda expression and modifying the device lambda expression based on the unique placeholder type instantiation to produce modified host source code. The method further includes sending the modified host source code to a host compiler.