4 CHAPTER 1. INTRODUCTION
Parallel systems. Today parallelism is available in all computer systems, and at many dif-
ferent scales starting with parallelism in the nano-circuits that implement individual instruc-
tions, and working the way up to parallel systems that occupy large data centers. Since the
early 2000s hardware manufacturers have been placing multiple processing units, often called
“cores”, onto a single chip. These cores can be general purpose processors, or more special pur-
pose processors, such as those found in Graphics Processing Units (GPUs). Each core can run
in parallel with the others. At the larger scale many such chips can be connected by a network
and used together to solve large problems. For example, when you perform a simple search on
the Internet, you engage a data center with thousands of computers in some part of the world,
likely near your geographic location. Many of these computers (perhaps as many as hundreds,
if not thousands) take up your query and sift through data to give you an accurate response as
quickly as possible.
There are several reason for why such parallel systems and thus parallelism has become so
important. First, parallelism is simply more powerful than sequential computing, where only
one computation can be run at a time, because it enables solving more complex problems in
shorter time. For example,an Internet search is not as effective if it cannot be completed at “in-
teractive speeds”, completing in several milliseconds. Similarly, a weather-forecast simulation
is essentially useless if it cannot be completed in time.
The second reason is efficiency in terms of energy usage. As it turns out, performing a computa-
tion twice as fast sequentially requires eight times as much energy. Precisely speaking, energy
consumption is a cubic function of clock frequency (speed). With parallelism we don’t need
more energy to speed up a computation, at least in principle. For example, to perform a compu-
tation in half the time, we need to divide the computation into two parallel sub-computations,
perform them in parallel and combine their results. This can require as little as half the time as
the sequential computation while consuming the same amount of energy. In reality, there are
some overheads and we will need more energy, for example, to divide the computation and
combine the results. Such overheads are usually small, e.g., constant fraction over sequential
computation, but can be larger. These two factors—time and energy—have become increas-
ingly important in the last decade, catapulting parallelism to the forefront of computing.
Example 1.1. As is historically popular in explaining algorithms, we can establish an
analogy between parallel algorithms and cooking. As in a kitchen with multiple cooks,
in parallel algorithms you can do things in parallel for faster turnaround time. For
example, if you want to prepare 3 dishes with a team of cooks you can do so by asking
each cook to prepare one. Doing so will often be faster that using one cook. But there
are some overheads, for example, the work has to be divided as evenly as possible.
Obviously, you also need more resources, e.g., each cook might need their own kitchen
utensils.
Parallel software. The important advantage of using a parallel instead of a sequential al-
gorithm is the ability to perform sophisticated computations quickly enough to make them
practical or relevant, without consuming large amounts of energy.
January 16, 2018 (DRAFT, PPAP)