Changes between Version 3 and Version 4 of Architecture


Ignore:
Timestamp:
12/31/69 19:21:53 (55 years ago)
Author:
binoy
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Architecture

    v3 v4  
    22[[Image(/chrome/site/arch.png, right)]]
    33 
    4 Hydra^''VM''^ works in four phases. First, the Hydra^''VM''^ accepts program bytecode and converts it to architecture-specific machine code. We consider the program as a set of ''basic blocks,'' where each basic block is a sequence of non-branching instructions that ends either with a branch instruction (conditional or non-conditional) or a return. Thus, any program can be represented by a graph in which nodes represent basic blocks and edges represent the program control flow -- i.e., an ''execution graph''. Basic blocks can be determined at compile-time. However, our main goal is to understand the frequency of reachability of the  basic blocks. To collect this information, we modify the baseline compiler of [http://jikesrvm.org Jikes RVM] to plugin additional instructions (into the bytecode) at the edges of the basic blocks that detect whenever a basic block is reached. Additionally, we plugin instructions into the bytecode to: 1) statically detect the set of variables accessed by the basic blocks, and 2) mark basic blocks with input/output operations, as they may need special handling in program reconstruction. This code modification doesn't affect the behavior of the original program. We call this version of the modified program, ''profiled bytecode''.
     4Hydra^''VM''^ works in four phases. First, the Hydra^''VM''^ accepts program bytecode and converts it to architecture-specific machine code. We consider the program as a set of ''basic blocks,'' where each basic block is a sequence of non-branching instructions that ends either with a branch instruction (conditional or non-conditional) or a return. Thus, any program can be represented by a graph in which nodes represent basic blocks and edges represent the program control flow - i.e., an ''execution graph''. Basic blocks can be determined at compile-time. However, our main goal is to determine the frequency of reachability of the  basic blocks. To collect this information, we modify the baseline compiler of [http://jikesrvm.org Jikes RVM] to plugin additional instructions (into the bytecode) at the edges of the basic blocks that detect whenever a basic block is reached. Additionally, we plugin instructions into the bytecode to: 1) statically detect the set of variables accessed by the basic blocks, and 2) mark basic blocks with input/output operations, as they may need special handling in program reconstruction. This code modification doesn't affect the behavior of the original program. We call this version of the modified program, ''profiled bytecode''.
    55
    66With the profiled bytecode, we can construct the program execution graph that shows basic blocks and variables as nodes and the execution flow as a weighted edge where weight denotes the frequency with which the target block is reached. The benefits of execution graph are multifold: