13 | | The third phase is the reconstruction of the program. In this phase, we divide the code into, hopefully, independent parts named ''super blocks'' that represent subsets of the execution graph. Every super block doesn't overlap with other super blocks in accessed variables, and represents a long sequence of instructions, including branch statements, that commonly execute in this pattern. As a branch instruction has ''taken'' and ''not taken'' paths, the super block may contain one or both of the two paths according to the frequency of using these paths. For example, in biased branches, one of the paths is often considered so it is included in the super block, leaving the other path outside the super block. On the other hand, in unbiased branches, both paths may be included in the super block. Therefore, a super block has multiple exits, according to the control flow it chooses during its execution. A super block also has multiple entries, as a jump or branch instruction may target one of the basic blocks that constructs it. The ''parallelizer'' module, orchestrates the construction of super blocks and distributes them over parallel threads, which may potentially lead to out-of-order execution of the code. I/O instructions are excluded from super blocks, as changing their execution order affects the program semantics. |
| 13 | The third phase is the reconstruction of the program. In this phase, we divide the code into, hopefully, independent parts named ''super blocks'' that represent subsets of the execution graph. Every super block doesn't overlap with other super blocks in accessed variables, and represents a long sequence of instructions, including branch statements, that commonly execute in this pattern. As a branch instruction has ''taken'' and ''not taken'' paths, the super block may contain one or both of the two paths according to the frequency of using these paths. For example, in biased branches, one of the paths is often considered so it is included in the super block, leaving the other path outside the super block. On the other hand, in unbiased branches, both paths may be included in the super block. Therefore, a super block has multiple exits, according to the program control flow during its execution. A super block also has multiple entries, as a jump or branch instruction may target one of the basic blocks that constructs it. The ''parallelizer'' module, orchestrates the construction of super blocks and distributes them over parallel threads. However, this may potentially lead to out-of-order execution of the code (which we address in the next phase). I/O instructions are excluded from super blocks, as changing their execution order affects the program semantics. |