Titulo Estágio
Runtime-Agnostic Concurrency Manager
Área Tecnológica
Engenharia de Software
Local do Estágio
SSE - CISUC
Enquadramento
Nowadays most computers are built on multicore processors. Multicore processors scale from high-end servers with 32 hardware threads to pocket-size quad-core smartphones. Thus, programmers must write parallel programs to speed up their programs.
If we look at production systems, several applications already support parallelism. Some examples are web-servers (Apache, Nginx, ...) and databases (Oracle, Postgres, ...). These applications distribute their work across all threads of the machine, to improve performance. The problem is that they consider as available targets for threads all the processors on the machine, regardless of other applications running on the same machine. For instance: On a quad-core machine running both Nginx and Postgres, both applications take 4 threads, when the best would be for each one to occupy only 2, avoiding context-switching between threads.
The same problem affects modularity of programs. Some libraries provide off-the-shelf parallel algorithms for you to use in your program (for instance, Parallel QuickSort). Each library optimizes the division of work so it uses all the processors available. Again, if your program is already parallel, the division of work in the library is no longer optimal.
Another issue with managing multiple parallelism and concurrency in systems is that each program may run on a different platform. Popular choices are the JVM, .NET VM, BEAM (Erlang), CPython, Cilk, Grand Central Dispatch, among others.
Objetivo
The main objective of this project is to create a common runtime for managing the concurrency in multiple applications on the same host. It will include:
1 - A task scheduler implemented on top of native libraries (pthreads). This can be implemented using techniques based on ForkJoin, Pico Threads, Co-routines. This should support symmetric parallelism, divide and conquer parallelism and thread-per-socket models.
2 - An API exposing the scheduler to some runtimes. For this scope, the pthread API, the JVM Thread and the CPython threading module are good starting points.
Plano de Trabalhos - Semestre 1
17 Sep - 31 Oct
Review of the most recent approaches to this problem in the state of the art. Identification of the biggest challenges on this area.
1 Nov - 31 Nov
Approach - Definition of the requirements and work plan. Definition of the APIs provided by the system.
1 Dez - 31 Dez
Runtime backend implementation on OS threads using several strategies.
1 Jan - 28 Jan
Writing and reviewing of the first semester report.
Plano de Trabalhos - Semestre 2
15 Feb - 8 Mar
Creating of a PThreads API on top of the runtime.
9 Mar - 31 Mar
Evaluation of overhead/gains of running on top of the Runtime instead of the API.
1 Apr - 30 Apr
Implementation of a wrapper API for the JVM and for CPython.
1 May - 31 May
Evaluation of the platform running several parallel programs on different runtimes.
1 Jun - 28 Jun
Writing and reviewing of the dissertation.
Condições
The proposed work plan will be performed in the Software and Systems Groups of CISUC, where the student will be given access to required hardware.
Observações
We are looking for a T-shaped student: he or she should be highly competent in systems programming in C, but should also be acquainted with higher level languages. A good understanding of parallel and concurrent programming is also a must. This dissertation will be co-advised by Professor Bruno Cabral.
Orientador
Alcides Fonseca
amaf@dei.uc.pt 📩