Clemens Hammacher

Learn More
One of the biggest challenges imposed by multi-core architectures is how to exploit their potential for legacy systems not built with multiple cores in mind. By analyzing dynamic data dependences of a program run, one can identify independent computation paths that could have been handled by individual cores. Our prototype computes dynamic dependences for(More)
The polyhedral model is only applicable to code regions that form static control parts (SCoPs) or slight extensions thereof. To apply polyhedral techniques to a piece of code, the compiler usually checks, by static analysis, whether all SCoP conditions are fulfilled. However, in many codes, the compiler fails to verify that this is the case. In this paper(More)
How can we exploit a microprocessor as efficiently as possible? The "classic" approach is <i>static optimization</i> at compile-time, conservatively optimizing a program while keeping all possible uses in mind. Further optimization can only be achieved by anticipating the actual <i>usage profile</i>: If we know, for instance, that two computations will be(More)
Existing approaches to automatic parallelization produce good results in specific domains. Yet, it is unclear how to integrate their individual strengths to match the demands and opportunities of complex software. This lack of integration has both practical reasons, as integrating those largely differing approaches into one compiler would impose an(More)
Runtime systems for speculative parallelization can be substantially sped up by implementing them with kernel support. We describe a novel implementation of a thread-level speculation (TLS) system using virtual memory to isolate speculative state, implemented in a Linux kernel module. This design choice not only maximizes performance, but also allows to(More)
Understanding and analyzing what is going on in program runs is a common issue for researchers and tool builders. We present TRANT—a toolset for trace analysis of Java programs. TRANT allows for dynamic tracing of data dependencies; unlike other approaches, it allows for running Java programs in an unchanged form and has been designed from the ground up for(More)
  • 1