1. Project Title: Automatic Optimization of Execution Time, Memory Consumption, Energy Consumption and Vulnerability of High-level Programs
2. Area of knowledge: b) Physical Sciences, mathematics and Engineering Panel
3. Group of disciplines: Theoretical and Applied Mathematics, Computer Sciences and IT
4. Research project/ Research Group description:
Knowing how much of a resource a computer program will use before hand can have a very large impact on different aspects of ICT. For one, in High-Performance Computing, knowing the workload of a job can result in a fair allocation of jobs, where all concurrent users can be equally satisfied. On a more micro-level, knowing how long a branch instruction (then-else) will take allows for branch prediction previsions. The knowledge of memory and cpu-time can also allow for deciding which optimization to apply to a given program, or whether a program should execute on the CPU or GPU. Furthermore, predicting the energy consumption of several versions of a program allow for a more sustainable software practice. Taken into account that energy consumption of internet-connected devices accounts for more than 3% of global emissions and may consume more electricity than countries like Finland or Iceland, it is of utmost importance to give tools to developers to reason about energy consumption of the programs as early as possible. This project has two major goals: to provide developers with the tools to reason about the (time, memory, energy and vulnerability) cost of their programs; and to develop techniques to automatically improve this resource usage. The first goal can be obtained using composable cost-models that are trained using randomly-generated programs. We are developing a novel method for such cost-model tuning. The student will be responsible for developing and improving this method. The second goal can be achieved developing a set of refactoring that can optimize resource consumption. The optimal combination of refactorings can be approximated using genetic programming (Genetic Improvement).
5. Job position description:
Candidates should be proficient programmers and have experience with the internals of compilers, ideally having written one. A successful candidate will write components for existing or new compilers, mainly a new resource-aware type system, a refactoring system and efficient code generation tools. Knowledge of refined and dependent types is a bonus for creating the new type system. Experience with lower-level languages such as LLVM, Java bytecode or assembly will enable a more efficient code generation.
The candidate will also explore Search-Based Software Engineering (SBSE) techniques for automatically improving the program, such as Genetic Improving (CI) via Genetic Programming (GP) and other non-exact search methods.
Since the resource consumption is non deterministic (CPU time allocation is not perfect, memory and energy consumption values are sampled), a probabilistic model will be used, unlike previous tick-based resource aware models. A minimal knowledge of using statistical distributions is expected, as the resource model will operate over distributions inferred from several executions. Two major challenges are identified for this work: 1) There is no standard micro-benchmark for understanding how resource consumption of basic blocks can be composed to obtain a macro-benchmark resource usage prediction. 2) Most cost-models target low-level languages (usually assembly), instead of high-level programming languages. The goal is to create an accurate cost model for a high-level language (at the level of Java, Haskell or Python).
The selected candidate will join a team of 7 PhD members that work on improving the software development process, with a vast experience designing programming languages, type systems and compilers.
6. Group leader:
Full Name: Alcides Aguiar Fonseca
Website that gathers all the work of the Reliable Software and Systems research line within the research center