Programming multicore systems is a hot topic these days.
As Robert Dewar notes in his EE Times commentary,
"There's nothing new about multicore mania".
Ada has been supporting multiprocessor, multicore, and multithreaded architectures
as long it has existed. As he notes, "decades of experience have been accumulated
in using Ada to deal with the problem of writing programs that run effectively on
machines using more than one processor".
For some reason, many pundits are ignoring all of this experience
and clamoring for new ways to do multiprocessor programs.
Indeed,
Microsoft
thinks that a programming model for multicore systems is "will not emerge for five to 10 years",
according to
this
Embedded.com article.
While we're all waiting for that to happen, Ada practitioners
will be using Ada to build high-performance multicore applications. For instance,
Karl Nyberg of Grebyn Corporation
won a Sun Fire T1000 server in Sun Microsystems Open Performance Contest by
building a parallel application using Ada. No need to wait 10 years.
A concurrent program typically comprises active components that interact with
each other either directly or through shared resources. Ada directly supports
each of these elements. An active component is modeled by a task,
Ada's unit of concurrent execution. Direct communication between two tasks is
achieved by a rendezvous, which provides synchronous passing of data. A shared
resource can be mapped to a protected object (which provides mutual exclusion)
or to other less general features. These semantic building blocks are high-level
enough to be appropriate for modeling the architecture of a concurrent program.
Ada tasks (logical threads of execution) can be mapped to
multiple processors, to multiple threads on a single processor (with or without
hardware support), or to multiple cores of a single processor, depending on the
compiler and target environment. The program need not change to run in any of
these environments.
A brief overview of Ada tasks and related features (with examples)
can be found in the
Tasking section
of the
Ada Programming Wikibook.
An equally brief introduction can be found in
Chapter 19
of
Ada95: The Craft of Object Oriented Programming. Sections can
be found in other free resources on Ada as well; see our
free textbooks page
for other examples.
The "bible" of Ada tasking is the
book
Concurrent and Real-Time Programming in Ada
by Burns and Welling. It has recently been revised to include Ada 2005 features and
recent research in the field.