Summary: | 博士 === 國立清華大學 === 資訊工程學系 === 93 === When performing aggressive optimizations and parallelization to exploit features of advanced architectures, optimizing and parallelizing compilers need to quantitatively assess the profitability of any transformations in order to achieve high performance. Useful optimizations and parallelization can be performed if it is known that certain points-to relationships would hold with high or low probabilities. For instance, if the probabilities are low, a compiler could transform programs to perform data speculation or partition iterations into threads in speculative multithreading, or it would avoid conducting code specialization. Consequently, it is essential for compilers to incorporate pointer analysis techniques that can estimate the possibility for every points-to relationship that it would hold during the execution. However, conventional pointer analysis techniques do not provide such quantitative descriptions and thus hinder compilers from more aggressive optimizations, such as thread partitioning in speculative multithreading, data speculations, code specialization, etc.
This thesis addresses this issue by proposing a probabilistic points-to analysis (PPA) technique to compute the probability of every points-to relationship at each program point. Based on the foundation of data-flow analysis, an elimination algorithm and an iterative algorithm were developed respective to handle and solve the related problems of probabilistic interprocedural points-to analysis. A prototype compiler has been implemented upon the SUIF system to perform the interprocedural probabilistic points-to analysis. Experimental results show this technique can estimate the probabilities of points-to relationships in benchmark programs with reasonable small
errors, about 4.61% in average.
In additions, we present an application of adopting probabilistic points-to information into compiler optimizations for speculative multithreading architecture.
Speculative multithreading (SpMT) architecture can exploit thread-level parallelism that cannot be identified statically. Speedup can be obtained by speculatively executing threads in parallel that are extracted from a sequential program. However, performance degradation might happen if the threads are highly dependent, since a
recovery mechanism will be activated when a speculative thread executes incorrectly and such a recovery action usually incurs a very high penalty. Therefore, it is essential for SpMT to quantify the degree of dependences and to turn off speculation if the degree of dependences passes certain thresholds. We propose a technique that quantitatively computes dependences between loop iterations and such information can be used to determine if loop iterations can be executed in parallel by speculative threads. This technique can be broken into two steps. First probabilistic points-to analysis is performed to estimate the probabilities of points-to relationships in case there are pointer references in programs, and then the degree of dependences between loop iterations is computed quantitatively. Experimental results show compiler-directed
thread-level speculation based on the information gathered by this technique can achieve significant performance improvement on SpMT.
|