Digital Signal Processing Reference
In-Depth Information
Instruction Multiple Data (SIMD) engines [ 56 ] . Nonetheless, high performance
routines for complex processor architectures with complex memory hierarchies
are still hand-optimized and are usually provided by processor vendors as library
functions. In the MPSoC era, the optimization space is too big to allow hand-crafted
solutions across different cores. The MPSoC compiler has to help the programmer
to optimize the application, probably taking into account the presence of optimized
routines for some of the processing elements.
In spite of the efforts invested in classical compiler technology, plain C program-
ming is not likely to be able to leverage the processing power of future MPSoCs.
When coding a parallel application in C, the parallelism is hidden due to the
inherent sequential semantics of the language and its centralized flow of control.
Retrieving this parallelism requires complex dataflow and dependence analyses
which are usually NP-complete and sometimes even undecidable (see Sect. 2.2 ) . For
this reason MPSoC compilers need also to cope with parallel programming models,
some of which will be introduced in the following.
2.1.1
Parallel Programming Models
There are manifold parallel programming models. In this section only a couple of
them will be introduced in order to give the reader an idea of the challenges that
these models pose to the compiler. Part 4 of this topic, Design Methods, provides in
depth discussion of several models of computation (MoCs) relevant to programming
models for signal processing MPSoCs.
Most current parallel programming models are built on top of traditional
sequential languages like C or Fortran by providing libraries or by adding language
extensions. These models are usually classified by the underlying memory architec-
ture that they support; either shared or distributed. Prominent examples used in the
high performance computing (HPC) community are:
￿
POSIX Threads (pThreads) [ 77 ] : A library-based shared memory parallel pro-
gramming model.
￿
Message Passing Interface (MPI) [ 74 ] : A library-based distributed memory
parallel programming model.
￿
Open Multi-Processing (OpenMP) [ 66 ] : A shared memory parallel programming
model based on language extensions . 1
These programming models are widely used in the HPC community, but their
acceptance in the embedded community is quite limited. Apart from the well-
known problems of programming with threads [ 54 ] , the overhead of embedded
implementations of these standards and the complex and hybrid (shared-distributed)
nature of embedded architectures have prevented the adoption of such programming
models. Embedded applications do not usually feature the regularity present in
1 OpenMP has also distributed memory extensions.
 
 
Search WWH ::




Custom Search