Here are some convolution benchmarks using direct (psImageConvolveDirect) and FFT convolution (psImageConvolveFFT). The source is in psLib/test/convolveBench.c. Times are in seconds per convolution. The kernel sizes are the full sizes, distributed evenly about 0. No multithreading, or any other tricks, were used, except that psLib was compiled with --enable-optimize. The bottom line is that unless the kernel is really large (more than around 10 pix, corresponding to about 2.5 arcsec for PS1), direct convolution is the way to go. * On alala:
#         Image          Kernel          Direct             FFT
        100x100             7x7        0.014120        0.023974
        200x200             7x7        0.004930        0.025839
        400x400             7x7        0.019928        0.143949
        600x600             7x7        0.045172        0.240070
        800x800             7x7        0.080492        0.581588
      1000x1000             7x7        0.125420        1.776494
      2000x2000             7x7        0.504519        5.551337
      4000x4000             7x7        2.009139        38.239530
        600x600             3x3        0.016893        0.245433
        600x600             5x5        0.028220        0.206202
        600x600             7x7        0.045632        0.238620
        600x600             9x9        0.095164        0.204965
        600x600           13x13        0.176188        0.239563
        600x600           17x17        0.271444        0.263421
        600x600           21x21        0.394447        0.267914
        600x600           31x31        0.786528        0.266132
* on mithrandir:
#         Image          Kernel          Direct             FFT
        100x100             7x7        0.029464        0.007483
        200x200             7x7        0.013420        0.016342
        400x400             7x7        0.053638        0.101447
        600x600             7x7        0.123597        0.304330
        800x800             7x7        0.223795        0.557118
      1000x1000             7x7        0.346237        0.669387
      2000x2000             7x7        1.338501        5.108009
      4000x4000             7x7        5.397184        25.005011
        600x600             3x3        0.036354        0.300892
        600x600             5x5        0.071562        0.250613
        600x600             7x7        0.122224        0.302385
        600x600             9x9        0.218580        0.276135
        600x600           13x13        0.412700        0.262436
        600x600           17x17        0.662877        0.163675
        600x600           21x21        0.969317        0.271112
        600x600           31x31        2.036099        0.329363