With the rise of the internet and the progress of information technologies, the data processing requirements have been increased exponentially. Moreover, computer systems have also been evolved to fulfill this requirements resulting in more complex systems. Recent trends aim to improve computing performance by incorporating different types of computing devices such as GPUs, FPGAs and CPU architectures which are specialized for accelerating different type of algorithms as well as reducing the energy consumption. With the rise of Cloud and Fog computing, these devices can be distributed geographically and connected through the internet by means of different types of networks.

Programming applications to take profit of distributed heterogeneous computing systems is becoming a very complex and hard task because developers have to deal with different problems and management issues. In this chapter, we present a methodology to combine different task-based programming models in order to simplify the development of complex parallel applications for distributed and heterogeneous systems and what are the benefits of this proposal compared to current options.