Some problems have a geometric structure in which the values of neighboring points are needed to update a point.

An example is a 2-D image broken into pixels. To "sharpen" the image, a program could check to see if a point (pixel) has an "aberrant" value by comparing it to its neighbors' values. If judged to be aberrant, a new value could be calculated based on the neighboring values.

The best way to parallelize this problem is to block decompose the data in two dimensions and then map the blocks onto a 2-D mesh of processes. The mesh topology is just an abstraction indicating which processes hold neighboring data.

A two dimensional grid of points representing pixels in an image. The grid is divided into quadrants and each quadrant is assigned to a different process.
A two dimensional grid of points representing pixels in an image. The grid is divided into quadrants and each quadrant is assigned to a different process.

For the points in the interior of each process's block, all the information needed to update the point is held on that process. To update a process's exterior points, rows and columns of points held by neighboring processes are needed.

 
©   Cornell University  |  Center for Advanced Computing  |  Copyright Statement  |  Inclusivity Statement