Task-based programming model has emerged as an alternative to the process-centric model of computation in distributed memory. In this model, an application is a collection of tasks with dependencies between these tasks. The tasks in an application can be executed in any order, as long as the dependency relations between the tasks are maintained. The programmer has a global view of tasks and data, while low-level problems such as scheduling and data transfer are the responsibility of the runtime.