Exploiting parallelism may require developers to think
differently about how their programs are written.
By Bryan Catanzaro and Kurt Keutzer
Driven by the capabilities and limitations of modern semiconductor manufacturing, the computing industry is currently undergoing a massive shift oward parallel computing. For more than three
decades, the increased integration capabilities provided by
successive generations of semiconductor manufacturing were
used to produce ever more complex and capable processors.
Increases in processing power served as the substrate for
advances in computing applications
that have profoundly changed the way
we live, learn, conduct business, and
has had a
so parallelism is
much more likely to
because we have made breakthroughs
in parallel programming models and
have proven that parallel processing is
successful and profitable. Instead, the
shift toward parallel computing is actually a retreat from even more daunting problems in sequential processor
Some people think that the processing power we already have will be
enough, and so there will be no great
need for increased computing power.
Such thoughts have been around for
as long as computers have existed, but
so far we have found that each advance
in computing has enabled a new generation of applications. Indeed, many
applications, such as virtual world
simulation and rendering, image recognition, and speech recognition,
require large advances in computing
power [ 5].
As a result, computationally intensive applications must now be rewritten
to be scalable and efficient on parallel
platforms. This means that one of the
biggest challenges of the current computing era is to make parallel programming mainstream and successful.
Although parallel programming
has had a difficult history, the computing landscape is different this time, so
parallelism is much more likely to succeed. First, thanks to the integration
capabilities of modern semiconductor
manufacturing, the kind of parallelism we are targeting has changed. Previous efforts at parallel programming