4 CHAPTER 1. INTRODUCTION
Parallel systems. Over the past several decades, the computer scientists have developed
many different forms of parallel systems. On the one hand, hardware manufacturers have
developed multicore chips that contain multiple processors on the same chip, allowing the
processors to communicate quickly and efficiently. Today such chips contain anywhere from a
couple of processors to as many as couple of dozens. We refer to the form of parallelism that
arises in such multicore chips as, small-scale parallelism, as it involves smaller numbers of
processors packed into a relatively small area. While multicore chips were initially used only
in laptops and desktops and servers, they are now used in almost all smaller mobile devices
such as phones (many mobile phones today have 4- or 8- core chips.)
There has also been much interest in developing domain-specific hardware for specific appli-
cations. For example, Graphics Processing Units (GPUs) can pack as many as 1000 small cores
(processors) onto a single chip.
On the other hand, we have developed larger-scale parallel systems by connecting via a net-
work many, as much as thousands, of different computers. 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. We refer to this form of parallelism as large-scale
parallelism, because it involves a number of computers over a relatively large area such as a
building or a data center.
There are several reason for why such parallel hardware 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.
August 30, 2017 (DRAFT, PPAP)