Research

My main research interests are in High Performance Computing, including the design of efficient parallel algorithms and performance modeling and prediction on parallel and distributed systems (multi-cores architectures, clusters or computational Grids).

Today, I am particularly interested in designing adaptive algorithms, applying and integrating performance modeling techniques with adaptive approaches for solving automatic algorithm selection problems.

Adaptive Computing

Actually, for many reasons, such as the inherent heterogeneity, the increasing diversity and the continuous evolution of existing computational supports, solving efficiently a target problem by using a single algorithm or writing portable programs that perform well on any architecture is becoming a challenging task. This problem will require the design of new tools and methods enable to keep up with the rapid evolution and increasing complexity of such systems. One way to address this problem is to refer to adaptive approaches where powerful techniques can be used to select automatically the more appropriate algorithm or to determine good combinations between available algorithms to fit well the characteristics of the target computational system. This problem becomes more difficult in evolving and dynamic environments since the algorithms should adapt them-selves to versatile conditions.  

Performance Modeling and Prediction

It is well known that in terms of performance, running an algorithm on a set of resources does not guarantee good performances due to many factors, such as for instance the communication cost or the impact of the memory hierarchy. For this reason, developing efficient algorithms requires   analyzing and predicting the behaviors and evaluating the efficiencies of these algorithms and determining the characteristics of the execution environment. One way to do this is to refer to performance modeling techniques. However, modeling and predicting performances of parallel applications on actual platforms is a challenging task since it depends on several parameters related to the algorithm to be implemented, the compiler, the architecture of the target machine, the interconnection network, etc. Hence, there is still the need of new and powerful techniques enable to somehow predict behaviors or trends and to capture the heterogeneity and the hierarchy features of complex architectures with a special emphasis on multi and many-core systems.