Skip to content
Snippets Groups Projects
intel-integrated-performance-primitives.md 2.99 KiB
Newer Older
  • Learn to ignore specific revisions
  • Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    # Intel IPP
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    
    Intel Integrated Performance Primitives is a very rich library of highly optimized algorithmic building blocks for media and data applications. This includes signal, image, and frame processing algorithms, such as FFT, FIR, Convolution, Optical Flow, Hough transform, Sum, MinMax, as well as cryptographic functions, linear algebra functions, and many more.
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    
    ## Installed Versions
    
    For the current list of installed versions, use:
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    ```console
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    ```
    
    
    !!! Important
        Check out IPP before implementing own math functions for data processing, as it is likely already there.
        IPP version 9.0.1 compiled for AVX2 vector instructions is available via the `ipp` module:
        The module sets up environment variables, required for linking and running IPP-enabled applications.
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    ## IPP Example
    
    ```cpp
    #include "ipp.h"
    #include <stdio.h>
    int main(int argc, char* argv[])
    {
        const IppLibraryVersion *lib;
        Ipp64u fm;
        IppStatus status;
    
        status= ippInit();            //IPP initialization with the best optimization layer
        if( status != ippStsNoErr ) {
                printf("IppInit() Error:n");
                printf("%sn", ippGetStatusString(status) );
                return -1;
        }
    
        //Get version info
        lib = ippiGetLibVersion();
        printf("%s %sn", lib->Name, lib->Version);
    
        //Get CPU features enabled with selected library level
        fm=ippGetEnabledCpuFeatures();
        printf("SSE    :%cn",(fm>1)&1?'Y':'N');
        printf("SSE2   :%cn",(fm>2)&1?'Y':'N');
        printf("SSE3   :%cn",(fm>3)&1?'Y':'N');
        printf("SSSE3  :%cn",(fm>4)&1?'Y':'N');
        printf("SSE41  :%cn",(fm>6)&1?'Y':'N');
        printf("SSE42  :%cn",(fm>7)&1?'Y':'N');
        printf("AVX    :%cn",(fm>8)&1 ?'Y':'N');
        printf("AVX2   :%cn", (fm>15)&1 ?'Y':'N' );
        printf("----------n");
        printf("OS Enabled AVX :%cn", (fm>9)&1 ?'Y':'N');
        printf("AES            :%cn", (fm>10)&1?'Y':'N');
        printf("CLMUL          :%cn", (fm>11)&1?'Y':'N');
        printf("RDRAND         :%cn", (fm>13)&1?'Y':'N');
        printf("F16C           :%cn", (fm>14)&1?'Y':'N');
    
        return 0;
    }
    ```
    
    
    Compile the example above, using any compiler and the `ipp` module:
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    ```console
    $ ml intel
    $ ml ipp
    $ icc testipp.c -o testipp.x -lippi -lipps -lippcore
    ```
    
    
    You will need the `ipp` module loaded to run an IPP-enabled executable. This may be avoided, by compiling library search paths into the executable:
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    ```console
    $ ml intel
    $ ml ipp
    $ icc testipp.c -o testipp.x -Wl,-rpath=$LIBRARY_PATH -lippi -lipps -lippcore
    ```
    
    ## Code Samples and Documentation
    
    
    Intel provides a number of [Code Samples for IPP][a], illustrating use of IPP.
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    
    Read the full documentation on IPP on the [Intel website][b], in particular the [IPP Reference manual][c].
    
    David Hrbáč's avatar
    David Hrbáč committed
    
    [a]: https://software.intel.com/en-us/articles/code-samples-for-intel-integrated-performance-primitives-library
    [b]: http://software.intel.com/sites/products/search/search.php?q=&x=15&y=6&product=ipp&version=7.1&docos=lin
    [c]: http://software.intel.com/sites/products/documentation/doclib/ipp_sa/71/ipp_manual/index.htm