This section contains three examples of types of problems that could be solved using data parallelism.
Typically, in creating a data-parallel design, the ultimate goal is to assign one process per CPU or "core."
However, it is useful to start out by thinking in terms of the smallest possible computational
tasks that can be done in parallel. Tasks can then be agglomerated into larger processes.
As we will see, agglomerations should be chosen to minimize the number of communication channels,
as well as to minimize the number and size of messages that must be communicated via the channels.
The agglomerated processes can be mapped onto the available CPUs in various ways, including the
simplest mapping, one process per CPU.
However, it can help to be flexible in your thinking and to consider several options, because a different
option may turn out to be better!