High-performant and easy-to-use solutions for complex parallel problems

In the multicore architectures and distributed systems available today, exploiting application parallelism has become a necessity to achieve high-performance levels. Being able to take advantage of all the resources of these systems through parallel programming is not trivial, and commonly requires great effort on the part of the programmer and a high level of knowledge of the technology and systems used. Although there is multiple research in the field of parallel application development, many of the current solutions have significant limitations in terms of their applicability, performance and/or usability. This Thesis introduces new tools to support the development of parallel applications in the form of software libraries with the aim of reducing their development and maintenance costs. These tools provide eficient solutions to complex problems, internally making use of advanced parallel techniques to achieve high performance, while remaining user-friendly. The first two proposals are parallel skeleton libraries that aim to solve divide-and-conquer problems, especially those with large imbalances and high levels of recursion. The first does it for shared memory systems, while the second does it for hybrid distributed-shared memory systems. Finally, a new thread-level speculative parallelization model and its implementation in a library are presented. This strategy makes use of speculative parallel execution techniques to allow the parallelization of almost any loop, even those with dependencies that are initially dificult to parallelize, with hardly any modifications to the original code. The language used for the implementations is C++. This widely used language provides an excellent performance level while allowing general programming through templates and other abstractions, which are perfect for developing advanced libraries with great applicability.

keywords: