Software

Elina - Modular Framework for Distributed Parallel Java Computing on Heterogeneous Environments

Elina an adaptable middleware for Java High-Performance Computing in heterogeneous clusters. Adaptability is obtained by trusting the runtime system with the management of thread and data placement, and by equipping it with a layer able to adjust its implementation to the particularities of the underlying software and hardware stacks.

Papers

Hervé Paulino, Nuno Delgado: Cache-Conscious Run-time Decomposition of Data Parallel Computations. Journal of Supercomputing (2016)

Marrow - An Algorithmic Skeleton Framework for the Orchestration of GPU Computations

Marrow is an algorithmic skeleton framework for the orchestration of OpenCL computations in multi-GPU environments. Among its most distinguishable features are a set skeletons previously unavailable in the GPU context, such as Pipeline and Loop, and the ability to compose these skeletons, through nesting, to create complex computations - a feature also new to this context. Moreover, it introduces optimizations that overlap communication and computation, thus conjoining programming simplicity with performance gains in many application scenarios. 

Mob - Service-Oriented Computing with Mobile Agents

Mob is a service-oriented scripting language for programming mobile agents in distributed systems. The main novelty of the language is the integration of the service-oriented and mobile agent paradigms. The combination of the service-oriented and mobile agent paradigms in a programming language provides a useful tool for high-level programming of mobile agents. For instance, using a service-oriented language, programmers are not required to keep track of agent names. This makes applications more resilient since the same service may be provided transparently by several agents in the network. This is especially important in networks with volatile resources. Another key feature of the programming language is that agents may be simultaneously clients and servers, creating a more flexible framework for implementing distributed applications.

Mob programs are compiled into an intermediate language derived for a process calculus. This translation scheme forms the front-end of the language compiler and allows us to use, for the back-end and for the run-time system, a compiler and a virtual machine originally developed for the process calculus.