The recent evolution of Computer Science has changed our vision of computing, programming and using machines. The size and complexity of applications and problems to treat have led to a quest for high performance that has imposed the concept of parallelism in processors and computers architectures. This phenomenon can be seen almost everywhere, i.e. from supercomputers to desktop and laptops. Now, the architecture of processors is based on the use of many cores and specialized units like GPU are used for general purpose parallel computing. Simultaneously, networks technologies have known an important rise, parallel and distributed computing have converged and concepts like clusters and peer to peer computing have emerged.