Automatic Code Parallelization via Dependency Analysis

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Existing computer processing techniques, such as speculative multithreading and automatic parallelization, often result in inefficient use of resources and execution issues due to their reliance on speculative execution and limited ability to parallelize bytecode and binary code, leading to suboptimal performance on constrained devices.

Innovation Solution

A system and method for automatic code parallelization that identifies slow code sections in bytecode or binary code, rewrites them into threads for parallel execution, using an optimization controller, code optimization detection unit, dependence analysis engine, side effect analysis engine, threading engine, and thread scheduler to optimize processing without requiring source code, thereby enhancing processor speedup and resource allocation.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Speed

If speculative multithreading is used to achieve processor speedup, then execution speed may be improved, but processing resources, energy, and memory are wasted on threads that may not be needed

Engineering Contradiction:
Improveprocessor speedupVSAvoidenergy and resource waste
Core Design Contradiction:
SpeedVSLoss of energy

Solution Approach 1:

The patent performs preliminary static analysis of code dependencies and execution characteristics before runtime, identifying candidate threads and their synchronization points in advance. This allows the system to prepare thread structures and dependency information beforehand, enabling faster runtime parallelization without speculative execution of unnecessary threads.

Inventive Principle:
Principle #10Preliminary action

Solution Approach 2:

The system incorporates runtime feedback mechanisms that monitor actual thread execution performance and resource usage. Based on this feedback, the system dynamically adjusts thread creation and execution strategies, ensuring that threads are only created when they provide actual performance benefit, thereby avoiding waste of energy and resources.

Inventive Principle:
Principle #23Feedback

2Speed

If speculative multithreading is implemented to improve performance, then code execution speed may increase, but execution correctness and stability deteriorate due to threading inaccuracies

Engineering Contradiction:
Improvecode execution speedVSAvoidexecution correctness
Core Design Contradiction:
SpeedVSReliability

Solution Approach 1:

The patent performs comprehensive static dependency analysis before runtime to identify all data dependencies, control dependencies, and side effects of code sections. This preliminary analysis creates a reliable foundation for parallelization by ensuring that all dependency relationships are known and can be properly managed through synchronization primitives, eliminating correctness issues associated with speculative threading.

Inventive Principle:
Principle #10Preliminary action

Solution Approach 2:

The system automatically generates thread-safe code by inserting appropriate synchronization primitives (locks, barriers, atomic operations) based on the static dependency analysis results. This self-service approach ensures that parallelized code maintains correctness without requiring manual intervention or speculative execution, as the synchronization structure is derived systematically from the code's actual dependency characteristics.

Inventive Principle:
Principle #25Self-service

3Productivity

If automatic parallelization is performed only on source code, then source code optimization is achieved, but bytecode and binary code parallelization capability is lost

Engineering Contradiction:
Improvesource code optimization effectivenessVSAvoidcode format adaptability
Core Design Contradiction:
ProductivityVSAdaptability or versatility

Solution Approach 1:

The patent implements a universal parallelization framework that operates on multiple code representations (source code, bytecode, and binary code) through a unified dependency analysis engine. The system uses intermediate representation (IR) to bridge different code formats, enabling the same parallelization algorithms to work across all formats without requiring separate processing pipelines, thus achieving both source code optimization and broad code format adaptability.

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

Solution Approach 2:

The system introduces intermediate representation (IR) as a mediator between different code formats. Source code, bytecode, and binary code are all converted to IR for uniform dependency analysis and parallelization processing. This intermediary representation enables the system to handle multiple code formats through a single unified processing path, maintaining versatility while preserving the effectiveness of source-code-level optimization insights.

Inventive Principle:
Principle #24Intermediary (Mediator)

4Reliability

If manual parallelization is performed to ensure correctness, then execution reliability is improved, but programming complexity and time consumption increase

Engineering Contradiction:
Improveparallelization correctnessVSAvoidprogramming complexity
Core Design Contradiction:
ReliabilityVSDevice complexity

Solution Approach 1:

The system automatically performs dependency analysis, thread identification, synchronization point insertion, and parallelization code generation without requiring manual programmer intervention. The static analysis engine systematically examines code dependencies and generates thread-safe parallelized code by automatically inserting appropriate synchronization primitives, thereby maintaining high reliability while eliminating the programming complexity and time consumption associated with manual parallelization.

Inventive Principle:
Principle #25Self-service

Solution Approach 2:

The system incorporates verification mechanisms that check the correctness of generated parallelized code against the original sequential code's behavior. By using feedback from static dependency analysis and runtime monitoring, the system ensures that parallelization transformations maintain correctness invariants, achieving reliability comparable to manual verification without the associated complexity.

Inventive Principle:
Principle #23Feedback

Data Source

PatentUS10466988B2Systems and methods for automatic computer code parallelization
Publication Date: 2019.11.05 MANYCORE CORP
  • US10466988B2 patent drawing
  • US10466988B2 patent drawing
  • US10466988B2 patent drawing

AI summary

A system and method for automatic parallelization of computer code includes: measuring a performance of a computer program; identifying slow code of the computer program; implementing a computer code analysis of the computer program including: implementing a dependence analysis; implementing a side effect analysis of the computer program; constructing a dependency analysis basic block (DABB) graph for blocks of the code: a graphical representation of one or more possible paths through a respective disparate block of code; constructing a versioned dependency graph that optimizes a performance of the computer program; generating a metaprogram based on the versioned dependency graph; and automatically executing parallelization of the computer program at runtime based on the metaprogram.