To take advantage of modern computing architectures, with ever-increasing numbers of
processors, it is necessary to develop parallel algorithms for the IB method. [1]} present a domain decomposition scheme to parallelize the
interpolation and spreading operations on the Cray C-90 computer with shared memory and a
modest number of vector processors. Their results illustrate the need for a fast
interpolation and spreading: even parallelized, they spend roughly half of the wall clock
time spreading and interpolating. [2]} adapted this domain decomposition
scheme for use on a general purpose graphical processing unit (GPGPU; GPU for short). [3]} parallelized spreading on a GPU by processing one Lagrangian point at
a time. Because neither of these approaches can concurrently process arbitrary Lagrangian
points, it is easy to find cases for which they perform poorly. An alternative is to
distribute work among several devices, each with its own memory. This idea underpins the
popular IBAMR library (see [4]}, [5]}, [6]}, [7]}, [8]}), which also adaptively refines the mesh around the
immersed structure. With proper load-balancing, this allows a serial algorithm to process
a smaller portion of work. A cluster of multicore devices, however, will not be used
effectively without a shared-memory parallel algorithm. The cuIBM ([9]})
and PetIBM ([10]}, [11]}) libraries implement an adaptive IB
method for prescribed motion on single- and multi-GPU architectures, respectively. The
authors demonstrate their method on a few two-dimensional test problems. Their
implementation explicitly constructs the spreading and interpolation operators, which are
sparse. The interpolation matrix has approximately the same number of nonzero
entries per row, can be constructed in parallel in compressed sparse row (CSR) format,
and its multiplication against a column vector parallelizes easily as a series of sparse
dot products. The spreading matrix, with approximately the same number of nonzero
entries per column, can be constructed in parallel in compressed sparse column (CSC)
format, for which parallel multiplication against a column vector typically requires
conversion to a different format. Even after conversion to CSR, the spreading matrix does
not have approximately the same number of entries per row so does not always yield
effective parallelization of matrix-vector products.
