COMPSs, the programming framework

COMPSs ( is a programming framework consisting of a programming model and an execution runtime which supports it, and whose main objective is to support the development of applications for distributed environments. The COMPSs programming model aims to keep programmers unaware of the execution environment and parallelization details. The latter are only required to create a sequential application and specify which methods of the application code will be executed remotely. This selection is done by providing an annotated interface where these methods are declared with some metadata about them and their parameters. COMPSs has also the capability of orchestrating workflows composed of services mixed with regular methods (pieces of code not intended to be services). Both services and methods can be COMPSs tasks and part of a COMPSs application workflow. An application published as a service containing calls to service and method tasks will be referred to as a composite service.

On the other hand, the COMPSs runtime is in charge of optimizing the performance of the application by exploiting its inherent concurrency. The runtime intercepts any call to a selected method creating a representative task and finding the data dependencies with all the previous ones that must be considered along the application run. The task is added to a task dependency graph as a new node and such dependencies are represented by edges of the graph. Tasks with no dependencies enter the scheduling step and are assigned to available resources. This decision is made according to a scheduling algorithm that takes into account data locality, task constraints and the workload of each node. According to this decision the input data for the scheduled task are transferred to the selected host and the task is remotely submitted. Once a task finishes, the task dependency graph is updated, possibly yielding new dependency-free tasks that can be scheduled.

Through the monitoring of the workload of the application, the runtime determines the excess/lack of resources and turns to cloud providers enforcing a dynamic management of the resource pool. In order to make COMPSs interoperable with different providers, a common interface is used, which implements the specific cloud provider API. Currently, there exist connectors for Amazon EC2, Azure and for providers that implement the Open Cloud Computing Interface (OCCI) for cloud infrastructure resources management and the Open Virtualization Format (OVF) for VM images management.

The programming model provides bindings for Java, C/C++ and Python applications and a graphical interface is available to help programmers port their code to COMPSs and to deploy the application on the infrastructure.

For quetions about COMPSs please contact us at