Skip to Content

HEAP: The HEAP software parallelization toolset

0
Your rating: None
Tool Name (abbreviation): 
HEAP
Author(s): 
Luciano Lavagno, ...
(unregistered) Author(s): 
Mihai Lazarescu (Politecnico di Torino)

The HEAP project addresses the problem of parallelizing legacy sequential software for multi-core architectures from three complementary sides. On one side, we exploit array access analysis techniques based on polyhedral analysis to provide a conservative lower bound on the possible decomposition into concurrent process networks. On another side, we use runtime data-dependency analysis to optimistically show to the developer further parallelization opportunities. Finally, we provide means to perform coverage analysis to ensure that the parallelized code, especially if generated using the optimistic analysis, implements exactly the same functionality as the "golden" sequential reference code.

Project Information
Project Acronym: 
HEAP
Project Start: 
Mon, 02/01/2010
Project End: 
Wed, 10/31/2012
Project Funding ID: 
FP7-ICT-247615
Project Description: 
HEAP addresses a key problem in the development process for current and future multi-core and multi-threaded architectures: the identification of a sufficient amount of thread-level parallelism (i.e. macro-parallelism) to exploit the available hardware, without imposing an excessive burden on the communication structure (often a shared memory or cache). HEAP consortium proposes to use a variety of techniques in order to provide both upper and lower bounds on the amount of available parallelism, where the lower bound is driven by “pessimistic” techniques (which may overestimate the amount of dependencies between statements, and hence limit the amount of discoverable parallelism), and the upper bound is driven by “optimistic” (which may ignore some dependencies, if they are not part of the executed program paths with a given set of input data). Metric-driven verification techniques are then used in order to semi-automatically refine both estimates, in particular the optimistic ones, and identify a candidate program partition. The partitioning process is also driven by data profiling, since it is aimed at reducing communication bottlenecks. A programmer will be able to interact frequently with the parallelization environment, for example by instructing it to ignore some impossible or unlikely execution paths. Another significant input from the designer is the choice of communication mechanisms, which in turn depends on the mapping of the threads to processors and on their communication mechanisms (e.g. busses, shared memories, dedicated channels). The project addresses this aspect directly, by proposing a co-design of the parallel application and of the architectural platform, with particular emphasis on the cache management strategy, which is essential to ensure efficient communication between the concurrent computational threads. The result of the computer-assisted parallelization flow is a set of threads, complete of synchronization mechanisms (e.g. FIFOs, MutExes) and an optimized memory hierarchy, which can be implemented on a multi-core architecture. HEAP is innovative with respect to the state of the art by combining several approaches, from polyhedral analysis, to data profiling, to metric-driven verification, with significant guidance from the developer. This will allows to heuristically tackle an extremely difficult problem, whose exact automated solution is impossible for real-life software application.
Tag your tool
Keywords: 
software parallelization
polyhedral analysis
data dependency identification
software verification
software coverage analysis