Improve performance of Multipole interpolation

Issue #1196 new
Ian Hinder created an issue

For codes which don't use OpenMP, the interpolation of a large number of points by Multipole limits performance in some situations. One workaround is to reduce the number of points, and possibly use one of the more accurate integration methods which is already implemented. Multipole performs interpolation by calling the standard Cactus interpolation API. To increase the speed of interpolation, Multipole could be modified to implement the interpolation interface from CarpetInterp2.

I understand that the standard Cactus interpolation interface is not provided by CarpetInterp2 because more information needs to be passed than the interface allows. Was this just the fastest way to get something working, or is it really a fundamental problem? I thought that the major difference was that CarpetInterp2 computes and stores interpolation weights from the coordinates so that they can be used again in subsequent interpolations to the same points. Could the standard Cactus interpolation interface be used for this, perhaps by passing a table entry which says "store the interpolation coefficients for these points for later reuse"? This would allow existing codes to use faster interpolation without having their interpolation code rewritten to use the new interface.

Keyword:

Comments (1)

  1. Erik Schnetter
    • removed comment

    I do not think that CarpetInterp2 is faster per se. It may be faster (does anybody have numbers?) since it pre-calculates the stencil coefficients and the communication schedule. That is, if we offered a Cactus interpolator compatible implementation, then (by default) there would not be any speedup. The largest complication is to restructure to code to allow precalculation; this usually requires scheduling another routine, duplicating a loop, using a static variable, etc. This would still be required even if the Cactus interpolator interface was used.

  2. Log in to comment