Complex Type Convolution/Correlation are Supported


Introduction

Linear convolution and correlation operation are widely used in single processing. Intel MKL provides a set of routines intended to perform the transformations in VSL.(Vector Statistic Library). We start to support complex type of transform since MKL 10.1.

The names of routines have the following structure:
vsl[datatype]{Conv|Corr}<base name> for C-interface
The field [datatype] is optional. If present, the symbol specifies the type of the input and
output data and can be
s (for single precision real type),
d (for double precision real type),
c(for single precision complex type), or
z (for double precision complex type).

The current implementation provides:

· Fourier algorithms for one-dimensional single and double precision real and complex data
· Fourier algorithms for multi-dimensional single and double precision real and complex data
· Direct algorithms for one-dimensional single and double precision real and complex data
•  Direct algorithms for multi-dimensional single and double precision real and complex data

Sample Code

    printf("EXAMPLE executing a convolution task\n");
    rank = 1;
    mode = VSL_CONV_MODE_DIRECT;
    vslcConvNewTask(&task,mode,rank,&xshape,&yshape,&zshape);
    status = vslcConvExec(task,x,&xstride,y,&ystride,z,&zstride);


For simple sample c or fortran code, please see
${MKL Install Dir}\examples\vslc\source\vslcconvexec.c
${MKL Install Dir}\examples\vslf\source\vslcconvexec.f

Compatiblity with IBM* ESSL library
One-dimensional algorithms cover the following functions from the IBM* ESSL library:
SCONF, SCORF
SCOND, SCORD
SDCON, SDCOR
DDCON, DDCOR
SDDCON, SDDCOR.
Special wrappers are designed to simulate these ESSL functions. The wrappers are provided
as sample sources for FORTRAN and C. To reuse them, use the following directories:
${MKL install Dir}/examples/vslc/essl/vsl_wrappers
${MKL install Dir}/examples/vslf/essl/vsl_wrappers

Performance issue
One issue is reported in MKL forum Speed of vslsconv in 10.1. The speed of vslsconv for 1000x1000 and 10x10 is far slower than FFT evaluated.

MKL really seems to have problem with choosing the optimal algorithm in this situation. It erroneously favors the overlap-add method and ends up performing a series of small 2D FFTs.

This issue will be fixed in one of our future releases.

For more complete information about compiler optimizations, see our Optimization Notice.