Modern compilers implement a number of optimization switches and they must be configured carefully in order to obtain the best performance. However, there exist few strategies to configure these... Show moreModern compilers implement a number of optimization switches and they must be configured carefully in order to obtain the best performance. However, there exist few strategies to configure these compiler switches or flags. This is caused by the fact that the performance of a code is both dependent on the target architecture and the application. Additionally, the effect of the compiler optimizations is highly dependent on other compiler optimizations which are employed, causing the actual effect to be masked and not predictable. In this thesis, we propose to use statistical analysis to determine the effectiveness of the compiler optimizations. This enables us to construct systematic methodologies for determining settings of compiler optimizations automatically. The proposed methodologies are all independent from the implementation of compilers and implementation of applications, therefore, it is easy to apply our methodologies to any combination of compilers and applications. This versatility makes our results unique compared to other approaches. Additionally, with our methodologies, users can choose their optimization objective, for example, execution time or code size, etc. From the results shown in this thesis, we can concluded that the statistical tuning of compiler optimization is both possible and useful. Show less
Many databases do not consist of a single table of fixed dimensions, but of objects that are related to each other: the databases are relational, or structured. We study the discovery of patterns... Show moreMany databases do not consist of a single table of fixed dimensions, but of objects that are related to each other: the databases are relational, or structured. We study the discovery of patterns in such data. In our approach, a data analyst specifies constraints on patterns that she believes to be of interest, and the computer searches for patterns that satisfy these constraints. An important constraint on which we focus, is the constraint that a pattern should have a significant number of occurrences in the data. Constraints like this allow the search to be performed reasonably efficiently. We develop algorithms for searching ppatterns taht are represented in formal first order logic, tree data structures and graph data structures. We perform experiments in which these algorithms, and algorithms proposed by other researchers, are compared with each other, and study which properties determine the efficiency of the algorithms. As a result, we are able to develop more efficient algorithms. As application we study the discovery of fragments in molecular datasets. The aim is to discover fragments that relate the structure of molecules to their activity. Show less