![]() |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
![]() |
Steps to Parallelization
CAPO goes through several steps to parallelize a serial code (see figure
at right). First, the tool analyzes data dependencies to determine how
different variables depend on one another. Then, a loop level analysis
(looking for repeated sequences of instructions in the code) is done.
Users are then taken through a series of graphical user interfaces that
illustrate the parallelization process. "The tool takes away the
tedious and error-prone work of parallelizing code, allowing the user
to focus on optimization of critical parts of the code, all through a
single interface," explains Jost.
Dependency analysis, the core element of the CAPO software, determines
the relationships between variables within a serial code. This process
is usually time consuming because of the complex structure of large codes
containing many subroutines.
Following the dependence analysis, the loops within the code are examined.
"CAPO examines the loops for potential data dependencies that might
prohibit parallelization. If you have a loop which iterates over some
repeated sections of the code, you can actually break this loop into individual
pieces, such that you can run them concurrently on the processors,"
explains Jin. "That’s how you get the speed-up in code performance."
Once the loop level analysis is complete, users are guided through a series
of built-in graphical user interfaces. These interfaces enable users to
view all instances where the code did not parallelize. The more obstacles
a user is able to remove, the higher level of parallelization that can
be achieved (see figure at left)."The user guides the tool, but the
tool also guides the user—it’s an interaction," explains Jost. | ||||||
|
||||||