Developer Reference

Contents

Convolution and Correlation

Intel® MKL
VS provides a set of routines intended to perform linear convolution and correlation transformations for single and double precision real and complex data.
For correct definition of implemented operations, see the Mathematical Notation and Definitions .
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
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:
${MKL}/examples/vslc/essl/vsl_wrappers
Additionally, you can browse the examples demonstrating the calculation of the ESSL functions through the wrappers:
${MKL}/examples/vslc/essl
The convolution and correlation API provides interfaces for Fortran 90 and C/89 languages.
You can use the C89 interface with later versions of the C/C++.
Intel® MKL
provides
the
mkl_vsl.h
header file
. All header files are in the directory
${MKL}/include
The 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 the
Intel® MKL
VS 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.

Product and Performance Information

1

Intel's compilers may or may not optimize to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include SSE2, SSE3, and SSSE3 instruction sets and other optimizations. Intel does not guarantee the availability, functionality, or effectiveness of any optimization on microprocessors not manufactured by Intel. Microprocessor-dependent optimizations in this product are intended for use with Intel microprocessors. Certain optimizations not specific to Intel microarchitecture are reserved for Intel microprocessors. Please refer to the applicable product User and Reference Guides for more information regarding the specific instruction sets covered by this notice.

Notice revision #20110804