Compiler support for multi-core and many-core systems
Functional programming
Coordination programming
Data flow computing
Programming language design and implementation
Program optimisation / transformation / parallelisation / compilation
Energy efficiency / green computing
High productivity programming vs igh performance computing trade-off
Memory management in concurrent environments
High performance computing
Multi-core and many-core computer architecture
and much more ....
Computing systems in the post clock frequency scaling era provide unprecedented peak performance levels. However, effectively harnessing this compute power for concrete applications becomes increasingly and exceedingly difficult. Modern computing systems are highly parallel and increasingly heterogeneous with specialised hardware units for particular compute tasks, and it is generally agreed in the hardware community that this trend will persist for the foreseeable future.
From the software engineering perspective current and more so future compute architectures bring up a number of challenges. Traditionally sequential software must be parallelised and the necessary synchronisation and communication requirements met. Computing tasks must be mapped to computing elements with diverse properties, thus creating a large design space. Independent compute tasks, potentially belonging to independent applications simultaneously running on the same system compete for computing resources, thus quickly leading to soft real time issues. Large numbers of compute elements increase the likelihood of transient and permanent failure of individual elements without compromising the overall system's availability, thus requiring software to deal with failure as well as with dynamically changing hardware resources. Last not least, the traditional notion of performance as either latency or throughput is increasingly replaced by a multi-objective scenario putting latency and/or throughput in relation to energy consumption.
Modern software must address all of the above issues while at the same time the diversity of system architectures and configurations continuously grows. With the currently prevailing low-level and machine-centric programming methodologies and the corresponding tool chains these requirements put a large burden on the programmer rendering the software development process inefficient, unproductive and eventually economically inviable (in particular in high labour cost countries).
My research agenda pursues a comprehensive approach to address compilation of resource-agnostic program specifications to diverse compute architectures, management of heterogeneous computing resources, placement of application (components), energy consumption and dependability through advanced compiler and runtime system technology. My central objective is to reconcile software engineering productivity, application portability and runtime performance in terms of latency, throughput and energy consumption for current and upcoming system architectures.
My research plan is based on the concerted design and (prototypical) implementation of programming languages and programming language concepts with an emphasis on declarative techniques, advanced compilation technology that maps resource-agnostic high-level code to a variety of computing architectures and adaptive runtime systems that mediate between application components and computing resources in a closed feedback loop.
I'm involved in a leading position in a number of research projects that develop and maintain novel programming languages, compilers and runtime systems for today's and tomorrow's compute architectures. Despite the diversity of features the common goal of all these projects is to facilitate the programming of modern compute architectures, to effectively map concurrent programs on different hardware architectures and to increase the confidence into the correctness of computed results.