Vviewpoints
DOI: 10.1145/1562164.1562179
Viewpoint
Face the inevitable,
Embrace parallelism
Hardware, software, and applications must all evolve
in anticipation of the proliferation of parallelism.
ItooK My first parallel program- ming class in graduate school, approximately 20 years ago. Having attended a fairly well- funded and well-equipped graduate program, my fellow students and
I had at our disposal a shared-memory
multiprocessor system we could use for
experiments. Moreover, we had access
to a Cray supercomputer at a nearby su-
percomputing center. The tools available at the time for parallel programming amounted to auto-vectorizing
compilers, some vendor-specific performance libraries, and non-standard
threading application programming interfaces. Much of the hardware we used
was relatively unstable and the tools
buggy. It was a daunting task, though
we were merely asked to develop paral-
lel versions of simple algorithms, like
sorts. The zeitgeist was one of experimentation with immature programming models on cold-war-fueled supercomputer innovation.
How things have changed. While
some of the functional components
we experimented with were quite large,
they really did not approach the vast
complexities faced by today’s developers. With the exception of the rarified
air of research labs (academic or otherwise), sequential microprocessors
comprised the vast majority of computers that were used. However, in the
two decades since, mainstream microprocessors have abruptly evolved to
become increasingly (overtly) parallel
devices.
how Software has changed
Calling modern applications complex
does not quite do justice to the state of
affairs. It may surprise some readers to
learn that hardware vendors often have
insight into the architectures of a broad
range of applications. For Intel, this
spans a fairly large variety of market
segments. The reason, of course, is that
hardware platform companies have a
vested interest in ensuring software
runs well (running best is the goal) on
their products.
Applications that span hundreds of
thousands or millions of lines of code
are the norm. The use of externally
sourced libraries is fairly commonplace. Many application frameworks are
implemented at such a level of abstrac-