Tracing JIT Compiler Parallelization via Runtime Trace Analysis

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Language compilers face challenges in determining whether to parallelize loops due to insufficient information about loop dependencies, leading to conservative approaches that fail to expedite program execution effectively.

Innovation Solution

A tracing just-in-time (TJIT) compiler system that extracts trace information during runtime to identify parallelizable operation components and allocates them to processing resources, using predicate and access information to determine safety and feasibility of parallelization, with the assistance of a theorem prover module for logical analysis.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Productivity

If a language compiler performs static compile-time parallelization of loops, then code execution can be expedited through parallel processing, but the compiler lacks sufficient information to determine whether parallelization is safe or worthwhile

Engineering Contradiction:
Improvecode execution speedVSAvoidloop dependency information
Core Design Contradiction:
ProductivityVSLoss of information

Solution Approach 1:

The system performs preliminary runtime analysis by executing loop iterations and tracing their execution paths before making parallelization decisions. This preliminary action collects information about loop dependencies and execution characteristics that are unavailable during static compilation, enabling informed parallelization decisions while maintaining execution efficiency.

Inventive Principle:
Principle #10Preliminary action

Solution Approach 2:

The system implements feedback mechanisms where runtime execution data from traced loop iterations is fed back to the compiler system. This feedback provides actual dependency information and execution patterns, allowing the compiler to make accurate parallelization decisions based on real runtime behavior rather than static analysis alone.

Inventive Principle:
Principle #23Feedback

2Reliability

If the language compiler takes a conservative approach to parallelization due to insufficient information, then parallelization safety is maintained, but significant gains in execution expediting are failed

Engineering Contradiction:
Improveparallelization safetyVSAvoidexecution expediting gain
Core Design Contradiction:
ReliabilityVSProductivity

Solution Approach 1:

The system transitions from static compile-time decisions to dynamic runtime decisions for parallelization. By continuously monitoring loop execution characteristics and dependencies during runtime, the system can dynamically adjust parallelization strategies, achieving both safety through accurate dependency detection and productivity through aggressive parallelization when conditions permit.

Inventive Principle:
Principle #15Dynamics

Solution Approach 2:

The system changes the informational parameters available to the compiler by collecting runtime execution data. This parameter change provides concrete information about loop dependencies, iteration patterns, and resource usage, enabling the compiler to move from conservative defaults to optimized parallelization decisions that maintain safety while maximizing execution speedup.

Inventive Principle:
Principle #35Parameter changes

3Measurement precision

If the TJIT compiler system extracts and analyzes trace information during runtime, then accurate parallelization decisions can be made, but additional runtime overhead is introduced

Engineering Contradiction:
Improveloop dependency detection accuracyVSAvoidruntime overhead
Core Design Contradiction:
Measurement precisionVSLoss of time

Solution Approach 1:

The system applies partial action by selectively tracing and analyzing only the loop iterations that are actually executed during runtime, rather than analyzing all possible iterations. This partial approach collects sufficient dependency information with minimal overhead, enabling accurate parallelization decisions without the excessive cost of comprehensive analysis of unreachable or redundant iterations.

Inventive Principle:
Principle #16Partial or excessive action

Data Source

PatentUS8959496B2Automatic parallelization in a tracing just-in-time compiler system
Publication Date: 2015.02.17 MICROSOFT TECHNOLOGY LICENSING LLC
  • US8959496B2 patent drawing
  • US8959496B2 patent drawing
  • US8959496B2 patent drawing

AI summary

A tracing just-in-time (TJIT) compiler system is described for performing parallelization of code in a runtime phase in the execution of code. Upon detecting a hot loop during the execution of the code, the compiler system extracts trace information from sequentially recorded traces. In a first phase, the compiler system uses the trace information to identify at least one group of operation components that can be operated on in a parallel manner. In a second phase, the compiler system provides instructions which allocate the group of operation components to plural processing resources. A native code generator module carries out those instructions by recompiling native code that directs the operation of a native system to perform parallel processing. The compiler system terminates a group if it encounters program data in a loop iteration that is not consistent with previously encountered predicated information (upon which it records a new trace in a sequential manner).