One
Approach to Visualizing Parallel Applications
One way to visualize parallelization conceptually is to imagine that
there are two of you; each thinks the same thoughts and behaves in the same
way. Potentially, you could achieve twice as much as one of you currently does,
but there are definitely some issues that the two of you will have to face.
You might imagine that your double could go out to
work while you stay at home and read books. In this situation, you are
implicitly controlling your double: You tell them what to do.
However, if you’re both identical, then your double
would also prefer to stay home and read while you go out to work. So, perhaps
you would have to devise a way to determine which of you goes to work
today—maybe splitting the work so that one would go one week, and the other the
next week.
Of course, there would also be problems on the
weekend, when you both would want to read the same newspaper at the same time.
So, perhaps you would need two copies of the paper or work out some way of
sharing it so only one of you had the paper at a time.
On the other hand, there would be plenty of
benefits. You could be painting one wall, while your double is painting
another. One of you could mow the lawn while the other washes the dishes. You
could even work together cooking the dinner; one of you could be chopping
vegetables while the other is frying them.
Although the idea of this kind of double person is
fanciful, these examples represent very real issues that arise when writing
parallel applications. As a thought experiment, imagining two people
collaborating on a particular task should help you identify ways to divide the
task and should also indicate some of the issues that result.
The rest of the chapter will explore some of these
opportunities and issues in more detail. However, it will help in visualizing
the later parts of the chapter if you can take some of these more “human”
examples and draw the parallels to the computational problems.
Parallelism provides an opportunity to get more
work done. This work might be independent tasks, such as mowing the lawn and
washing the dishes. These could corre-spond to different processes or perhaps
even different users utilizing the same system. Painting the walls of a house
requires a little more communication—you might need to identify which wall to
paint next—but generally the two tasks can proceed independ-ently. However,
when it comes to cooking a meal, the tasks are much more tightly cou-pled. The
order in which the vegetables are chopped should correspond to the order in
which they are needed. You might even need messages like “Stop what you’re
doing and get me more olive oil, now!” Preparing a meal requires a high amount
of communica-tion between the two workers.
The more communication is required, the more likely
it is that the effect of the two workers will not be a doubling of performance.
An example of communication might be to indicate which order the vegetables
should be prepared in. Inefficiencies might arise when the person cooking is
waiting for the other person to complete chopping the next needed vegetable.
The issue of accessing resources, for example, both
wanting to read the same newspaper, is another important concern. It can
sometimes be avoided by duplicating resources— both of you having your own
copies—but sometimes if there is only a single resource, we will need to
establish a way to share that resource.
In the next section, we will explore this thought
experiment further and observe how the algorithm we use to solve a problem
determines how efficiently the problem can be solved.
Related Topics
Privacy Policy, Terms and Conditions, DMCA Policy and Compliant
Copyright © 2018-2023 BrainKart.com; All Rights Reserved. Developed by Therithal info, Chennai.