# Overview

VSL provides a set of routines intended to perform linear convolution and correlation transformations for single and double precision data.

For correct definition of implemented operations, see Mathematical Notation and Definitions.

The current implementation provides:

- Fourier algorithms for one-dimensional single and double precision data

- Fourier algorithms for multi-dimensional single and double precision data

- Direct algorithms for one-dimensional single and double precision data.

- Direct algorithms for multi-dimensional single and double precision data.

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}/examples/vslc/essl/vsl_wrappers`
`${MKL}/examples/vslf/essl/vsl_wrappers`
Additionally, you can browse the examples demonstrating the calculation of the ESSL functions through the wrappers. You can find the examples in the following directories:
`${MKL}/examples/vslc/essl`
`${MKL}/examples/vslf/essl`

Convolution and correlation API provides interfaces for Fortran 90 and C/89 languages. You may use the C/89 interface also with later versions of C or C++, or Fortran 90 interface with programs written in Fortran 95. Note that there is no Fortran 77 support.

For users of the C/C++ and FORTRAN languages, the mkl_vsl.h and mkl_vsl.fi headers are provided. Both header files are found under the directory:

`${MKL}/include`

See more details about the FORTRAN header in Random Number Generators topic.

Convolution and correlation API is implemented through task objects, or tasks. Task object is a data structure, or descriptor, which holds parameters that determine the specific convolution or correlation operation. Such parameters may be precision, type, and number of dimensions of user data, an identifier of the computation algorithm to be used, shapes of data arrays, and so on.

All Intel MKL convolution and correlation routines process task objects in one way or another: either create a new task descriptor, change the parameter settings, compute mathematical results of the convolution or correlation using the stored parameters, or perform other operations. Accordingly, all routines are split into the following groups:

Task Constructors - routines that create a new task object descriptor and set up most common parameters.

Task Editors - routines that can set or modify some parameter settings in the existing task descriptor.

Task Execution Routines - compute results of the convolution or correlation operation over the actual input data, using the operation parameters held in the task descriptor.

Task Copy - routines used to make several copies of the task descriptor.

Task Destructors - routines that delete task objects and free the memory.

When the task is executed or copied for the first time, a special process runs which is called task commitment. During this process, consistency of task parameters is checked and the required work data are prepared. If the parameters are consistent, the task is tagged as committed successfully. The task remains committed until you edit its parameters. Hence, the task can be executed multiple times after a single commitment process. Since the task commitment process may include costly intermediate calculations such as preparation of Fourier transform of input data, launching the process only once can help speed up overall performance.

Parent topic: Convolution and Correlation