Compiler Node Tree for Non-Adjacent Loop Fusion

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Existing compiler technologies are limited in optimizing program code with non-adjacent loops, as they often fail to identify and optimize opportunities for loop fusion due to intervening control flow instructions, leading to suboptimal performance and increased power consumption in computing systems.

Innovation Solution

A compiler is developed to build a node tree representing parent-child relationships of program statements, allowing for the identification and transformation of non-adjacent loop nodes with the same initial and increment values, enabling loop fusion through techniques like head and tail duplication and code motion to increase instruction-level parallelism.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Productivity

If existing compiler technologies are used to optimize program code, then adjacent loops can be fused, but non-adjacent loops with intervening control flow instructions cannot be optimized

Engineering Contradiction:
Improveloop optimization capabilityVSAvoidhandling of non-adjacent loops
Core Design Contradiction:
ProductivityVSAdaptability or versatility

Solution Approach 1:

The patent segments the control flow graph into basic blocks and uses a node tree structure to represent parent-child relationships between nodes. This segmentation allows the compiler to systematically analyze and transform non-adjacent loops by processing nodes in a hierarchical manner, enabling loop fusion even when loops are separated by intervening control flow instructions.

Inventive Principle:
Principle #1Segmentation

Solution Approach 2:

The patent introduces a new dimension of analysis by building a node tree that represents the hierarchical structure of control flow nodes. Instead of only considering linear adjacency of loops, the node tree enables the compiler to perceive relationships between non-adjacent loops through parent-child relationships, allowing transformations that bridge loops separated by intervening instructions.

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

2Productivity

If loop fusion is performed to reduce loop overhead, then instruction-level parallelism increases, but complex code transformations are required for non-adjacent loops

Engineering Contradiction:
Improveinstruction-level parallelismVSAvoidcode transformation complexity
Core Design Contradiction:
ProductivityVSDevice complexity

Solution Approach 1:

The patent performs preliminary actions by first building the node tree structure and identifying candidate loop nodes before executing the actual fusion transformation. This preliminary analysis phase organizes the complex code structure into a manageable hierarchical representation, making subsequent transformation steps more systematic and less complex.

Inventive Principle:
Principle #10Preliminary action

Solution Approach 2:

The node tree serves as an intermediary structure between the original complex code and the transformed optimized code. It provides a intermediate representation that simplifies the analysis and transformation process, enabling the compiler to handle non-adjacent loops through a structured intermediary model rather than directly manipulating complex code structures.

Inventive Principle:
Principle #24Intermediary (Mediator)

3Productivity

If compilers perform sophisticated optimizations, then program performance improves, but compiler complexity and development difficulty increase

Engineering Contradiction:
Improveprogram performanceVSAvoidcompiler complexity
Core Design Contradiction:
ProductivityVSDevice complexity

Solution Approach 1:

The node tree structure serves multiple functions: it represents the control flow graph, enables identification of loop nodes, facilitates code transformations, and supports optimization analysis. This multi-functional approach consolidates what would otherwise be separate complex mechanisms into a single unified structure, reducing overall compiler complexity while maintaining sophisticated optimization capabilities.

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

Data Source

PatentUS9015690B2Proactive loop fusion of non-adjacent loops with intervening control flow instructions
Publication Date: 2015.04.21 ADVANCED MICRO DEVICES INC
  • US9015690B2 patent drawing
  • US9015690B2 patent drawing
  • US9015690B2 patent drawing

AI summary

A system and method for optimization of code with non-adjacent loops. A compiler builds a node tree, which is not a control flow graph, that represents parent-child relationships of nodes of a computer program. Each node represents a control flow statement or a straight-line block of statements of the computer program. If a non-adjacent loop pair of nodes satisfy predetermined conditions, the compiler may perform legal code transformations on the computer program and corresponding node transformations on the node tree. These transformations may make adjacent this pair of loop nodes. The compiler may be configured to perform legal code transformations, such as head and tail duplication, code motion, and if-merging, in order to make adjacent these two loop nodes. Then loop fusion may be performed on this loop pair in order to increase instruction level parallelism (ILP) within an optimized version of the original source code.