Summary: | 碩士 === 國立臺北大學 === 電機工程學系 === 101 === When a parallel compiler analyzes a program, it must use data dependence tests to determine whether a certain region contains dependencies or not. In recent years, increasing numbers of researchers have developed data dependence test methods for different kinds of loops.
A parallel compiler determines the dependence between loop iterations using data dependence tests. To do this, it must analyze the subscript expression. In a loop, if the parallel compiler determines that there are two iterations that access the same memory address, then data dependence exists, and the loop cannot be processed in parallel. Current data dependence tests can be divided into general two categories: exact dependence tests and inexact dependence tests. Exact dependence tests can be used to prove dependence and independence. Inexact dependence tests can only be applied to prove independence.
The greatest common divisor (GCD) test is used to check whether there is an integer solution or not. The Banerjee test also takes the boundaries of loop index variables into account. The GCD test can only prove independence in data dependence tests, and the Banerjee test is only able to prove that an equation does not have any integer solution within the boundaries of the iteration variables; it can only be used to prove independence in a data dependence test. The I test can be used to determine dependence for one-dimensional arrays with constant bounds and unitary increment loop iteration variables.
The normal I test was originally designed for loops that have an index variable that increments by a value of one; that is, it cannot be directly applied in non-unitary increment nested loops. This kind of nested loop must be converted to a unitary increment loop by loop normalization. However, it has been shown that loop normalization makes array references more complex and creates many debugging difficulties. For non-unitary increment loop iteration variables, the topic of non-continuous optimization data dependence tests is very important.
In this thesis, we construct algorithms for one-dimensional arrays and multidimensional arrays using the non-continuous I optimization data dependence model. Moreover, we write a program to analyze dependence on loops in practice. Using these chart algorithms, we can directly determine dependencies for one-dimensional and multidimensional arrays with constant bounds and non-unitary increment loop iteration variables without using loop normalization; hence, the time needed for loop normalization is reduced. Because it is unnecessary to modify the code of a program, the complexity of source level debugging for parallel and vector compilers can also be reduced, which is more desirable than determination using the normal I test, which must apply loop normalization. The time complexity of the algorithms is the same as that of the normal I test: O(c_3 n^2+c_2 n)。
|