automatically exploiting cross-invocation parallelism using runtime ...

automatically exploiting cross-invocation parallelism using runtime ... automatically exploiting cross-invocation parallelism using runtime ...

dataspace.princeton.edu
from dataspace.princeton.edu More from this publisher
13.07.2015 Views

implemented in the Liberty parallelizing compiler infrastructure; second, each of its innerloop can be independently parallelized by a none-speculative and none partition-basedparallelization technique such as DOALL and LOCALWRITE; finally, the sequential codebetween two inner loops can be privatized and duplicated among all worker threads.After locating the candidate loops, SPECCROSS transformation is applied on each ofthem. SPECCROSS transformation consists of two major steps: first, we parallelize the hotloop by applying DOALL or LOCALWRITE to each inner loop and duplicate the sequentialcode among all worker threads; then SPECCROSS library function calls are inserted inthe parallel program to enable barrier speculation. Algorithm 5 demonstrates how thesefunction calls are inserted:1. A code region between two consecutive enter barrier functions is consideredas an epoch. For simplicity, each inner loop invocation is usually treated as an epoch.As a result, enter barrier functions are inserted at the beginning of each innerloop’s preheader basic block.2. Function enter task marks the beginning of each task. Since an inner loop iterationis usually treated as a separate task, enter task functions are inserted at thebeginning of each inner loop’s header.3. Function exit task is invoked at the end of each task. In other words, it is invokedbefore the execution exits an inner loop iteration or before the execution enters anotherinner loop iteration. Algorithm 5 (line 18-36) goes through each basic blockin an inner loop, checking its terminator instruction. If a terminator instruction is anunconditional branch which either exits the loop or branches back to the header ofthe loop, an exit task call is inserted right before the terminator instruction. If theterminator instruction is a conditional branch instruction and (1) if one of its targets isa basic block outside the loop and the other is the loop header, an exit task functionis also inserted before the terminator instruction; (2) if one target is a basic block70

outside the loop and the other is a basic block within the loop except the loop header,the exit task function is invoked only when the execution exits the loop; (3) ifone target is the header of the loop and the other is some other basic block within theloop, an exit task function is invoked only when the execution branches back tothe loop header.4. Function spec access is used to calculate the access signature for each task. Itis inserted before each memory operation (store or load) that is involved in a crossinvocationdependence (line 40-49).71

implemented in the Liberty parallelizing compiler infrastructure; second, each of its innerloop can be independently parallelized by a none-speculative and none partition-basedparallelization technique such as DOALL and LOCALWRITE; finally, the sequential codebetween two inner loops can be privatized and duplicated among all worker threads.After locating the candidate loops, SPECCROSS transformation is applied on each ofthem. SPECCROSS transformation consists of two major steps: first, we parallelize the hotloop by applying DOALL or LOCALWRITE to each inner loop and duplicate the sequentialcode among all worker threads; then SPECCROSS library function calls are inserted inthe parallel program to enable barrier speculation. Algorithm 5 demonstrates how thesefunction calls are inserted:1. A code region between two consecutive enter barrier functions is consideredas an epoch. For simplicity, each inner loop <strong>invocation</strong> is usually treated as an epoch.As a result, enter barrier functions are inserted at the beginning of each innerloop’s preheader basic block.2. Function enter task marks the beginning of each task. Since an inner loop iterationis usually treated as a separate task, enter task functions are inserted at thebeginning of each inner loop’s header.3. Function exit task is invoked at the end of each task. In other words, it is invokedbefore the execution exits an inner loop iteration or before the execution enters anotherinner loop iteration. Algorithm 5 (line 18-36) goes through each basic blockin an inner loop, checking its terminator instruction. If a terminator instruction is anunconditional branch which either exits the loop or branches back to the header ofthe loop, an exit task call is inserted right before the terminator instruction. If theterminator instruction is a conditional branch instruction and (1) if one of its targets isa basic block outside the loop and the other is the loop header, an exit task functionis also inserted before the terminator instruction; (2) if one target is a basic block70

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!