Refine
H-BRS Bibliography
- no (3)
Document Type
- Master's Thesis (3)
Language
- English (3)
Has Fulltext
- no (3)
The work done in this thesis enhances the MMD algorithm in multi-core environments. The MMD algorithm, a transformation based algorithm for reversible logic synthesis, is based on the works introduced by Maslov, Miller and Dueck and their original, sequential implementation. It synthesises a formal function specification, provided by a truth table, into a reversible network and is able to perform several optimization steps after the synthesis. This work concentrates on one of these optimization steps, the template matching. This approach is used to reduce the size of the reversible circuit by replacing a number of gates that match a template which implements the same function and uses less gates. Smaller circuits have several benefits since they need less area and are not as costly. The template matching approach introduced in the original works is computationally expensive since it tries to match a library of templates against the given circuit. For each template at each position in the circuit, a number of different combinations have to be calculated during runtime resulting in high execution times, especially for large circuits. In order to make the template matching approach more efficient and usable, it has been reimplemented in order to take advantage of modern multi-core architectures such as the Cell Broadband Engine or a Graphics Processing Unit. For this work, two algorithmically different approaches that try to consider each multi-core architecture’s strengths, have been analyzed and improved. For the analysis these approaches have been cross-implemented on the two target hardware architectures and compared to the original parallel versions. Important metrics for this analysis are the execution time of the algorithm and the result of the minimization with the template matching approach. It could be shown that the algorithmically different approaches produce the same minimization results, independent of the used hardware architecture. However, both cross-implementations also show a significantly higher execution time which makes them practically irrelevant. The results of the first analysis and comparison lead to the decision to enhance only the original parallel approaches. Using the same metrics for successful enhancements as mentioned above, it could be shown that improving the algorithmic concepts and exploiting the capabilities of the hardware lead to better results for the execution time and the minimization results compared to their original implementations.
This thesis presents an approach to automatically adjust the parameters of a Java application run on the IBM J9 Virtual Machine in order to improve its performance. It works by analyzing the logfile the VM generates and searching for specific behavioral patterns. These patterns are matched against a list of known patterns for which rules exist that specify how to adapt the VM to the given application. Adapting the application is done by adding parameters and changing existing ones, for example to achieve a better heap usage. The process is fully automated and carried out by a toolkit developed for this thesis. The toolkit iteratively cycles through multiple possible parameter sets, benchmarks them and proposes the best alternative to the user. The user can, without any prior knowledge about the Java application or the VM improve the performance of the deployed application.
An analysis of sharing string objects with the Java Virtual Machine was conducted; they are the most used objects in Java programs and they are immutable - thus they are read-only and easily identified. While the results are promising, it is clear that sharing more objects would result in better performance. Automatic object selection for sharing is non-trivial, because in the current state only read-only objects can be shared. This attribute can not be easily determined during runtime by an algorithm; the developer on the other hand can. This thesis presents the development of an Application Programmer Interface (API) that allows programmers to use the Java Virtual Machine (JVM) internal sharing functionality. Furthermore, we present the usage of the sharing API. Open-source software was used as real-world test cases. Afterwards the evaluation shows that the ratio between memory savings and start-up time overhead is reasonable.