<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated on Thu, 24 May 2012 15:40:08 -0700 -->
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <atom:link href="http://software.intel.com/en-us/articles/intel-ipp-kb/type/technical-notes/feed/" rel="self" type="application/rss+xml" />
    <title>Intel Software Network articles Feed</title>
    <link>http://software.intel.com/en-us/articles/intel-ipp-kb/type/technical-notes/</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>Intel® IPP 7.0 Release Notes</title>
      <description><![CDATA[ <h1 class="c1">Intel® Integrated Performance Primitives Library 7.0 Release Notes</h1>
<p>This document provides a general summary of new features and important notes about the Intel® IPP library software product.</p>
<p>Please see the following links for the latest information regarding the Intel® Integrated Performance Primitives (Intel® IPP):</p>
<ul>
<li class="c0"><a href="http://software.intel.com/en-us/intel-ipp">Intel® IPP Main Product Page</a></li>
<li class="c0"><a href="http://software.intel.com/en-us/articles/intel-ipp-70-library-release-notes/">Intel® IPP 7.0 Release Notes</a></li>
<li class="c0"><a target="_blank" href="http://software.intel.com/en-us/articles/intel-ipp-70-library-install-guide/">Intel® IPP 7.0 Installation Guide</a></li>
<li class="c0"><a target="_blank" href="http://software.intel.com/en-us/articles/intel-ipp-70-library-system-requirements/">Intel® IPP 7.0 System Requirements</a></li>
<li class="c0"><a target="_blank" href="http://software.intel.com/en-us/articles/intel-ipp-70-library-getting-started/">Intel® IPP 7.0 Getting Started</a></li>
<li class="c0"><a target="_blank" href="http://software.intel.com/en-us/articles/intel-ipp-70-library-bug-fixes/">Intel® IPP 7.0 Bug Fixes</a></li>
</ul>
<p>Links to <i><a href="http://www.intel.com/software/products/ipp">documentation, help, and code samples</a></i> can be found on the main <a href="http://www.intel.com/software/products/ipp"><i>Intel IPP product page</i></a>. For technical support visit the <a href="http://software.intel.com/en-us/forums/intel-integrated-performance-primitives/"><i>Intel IPP technical support forum</i></a> and review the articles in the <a href="http://software.intel.com/en-us/articles/intel-ipp-kb/all/1/"><i>Intel IPP knowledgebase</i></a>.</p>
<p>Please <i><a href="https://registrationcenter.intel.com/">register your product</a></i> using your preferred email address. This helps Intel recognize you as a valued customer in the support forum and insures that you will be notified of product updates. You can read <a href="http://www.intel.com/sites/sitewide/en_US/privacy/privacy.htm?iid=ftr+privacy"><i>Intel's Online Privacy Notice Summary</i></a> if you have any questions regarding the use of your email address for software product registration.</p>
<p><a href="http://software.intel.com/en-us/articles/how-to-build-ipp-application/"><i>How to Build an IPP Application</i></a> provides an introduction to compiling, linking and deploying Intel IPP applications.</p>
<h2 class="sectionHeading">What's New in Intel® IPP 7.0</h2>
<ul>
<li class="c2"><a href="http://software.intel.com/en-us/articles/intel-ipp-functions-optimized-for-intel-avx-intel-advanced-vector-extensions/">Additional optimizations for the 256-bit Intel AVX</a> SIMD instruction set.</li>
<li class="c2">Further AES-NI optimizations for cryptography and data compression.</li>
<li class="c2">Microsoft* Visual Studio* 2010 support.</li>
<li class="c2">A JPEG-XR (HD Photo) codec is now included in the UIC framework.</li>
<li class="c2">A Windows Imaging Codec (WIC) has been added to the UIC sample.</li>
<li class="c2">The new <i>interfaces</i> directory contains high-level application code, in the form of source and pre-built binaries.</li>
<li class="c2">A <i><a target="_blank" href="http://software.intel.com/en-us/articles/new-directory-structure-and-library-naming-in-ipp/">New Directory Structure and Library Naming Scheme</a></i> describes library layout and name changes important to developers.</li>
<!--
<li class="c2">This version of the Intel IPP library, when included with the Atom SDK (a separately distributed product), is now provided as the standard dispatched version of the static library (for Linux*), which contains all supported SIMD instruction sets for the IA-32 architecture. If you wish to build your Intel&reg;&nbsp;Atom&trade; processor application with a non-dispatched version of the library please review the instructions in the <code>$(IPPROOT)/tools/ia32/staticlib</code> directory and compile/link with the s8 architecture.</li>
-->
</ul>
<p>A complete list of <i>new functions</i> added with the 7.0 release is located in the <i>NewFunctionsList.txt</i> file, which can be found in the <i>...\Documentation\en_US\ipp\</i> directory. You will also find the <i>ThreadedFunctionsList.txt</i> file in that same location, listing those functions that are available in an internally threaded format. Threading, within the multi-threaded variants of the Intel IPP library, is accomplished by use of the Intel® OpenMP* library.</p>
<p>For a more detailed list of what's new in Intel IPP 7.0 <a href="http://software.intel.com/en-us/articles/whats-new-in-intel-ipp/">please read this article</a>.</p>
<h2 class="sectionHeading">7.0 update 7 Release Notes</h2>
<ul>
<li class="c2">An OpenGL video renderer has been added to Microsoft* Windows* audio-video-codecs (UMC). To enable, uncomment "#define UMC_ENABLE_NEW_RENDERS" in core/umc/include/umc_defs.h. See simple_player readme for more details. Note: Building UMC in a new directory is recommended. If your build process copies over a previous version of UMC, please remove null_drv.c, null_drv.h, null_video_renderer.cpp, and null_video_renderer.h from io/video_renders.</li>
<li class="c2">Multiple bug fixes have been incorporated. See the KB article titled <a href="http://software.intel.com/en-us/articles/intel-ipp-70-library-bug-fixes/">Intel® IPP 7.0 Library Bug Fixes</a> for details.</li>
</ul>
<h2 class="sectionHeading">7.0 update 6 Release Notes</h2>
<ul>
<li class="c2">The ippiDCTFwd_32f_C1R function was threaded for additional performance improvement.</li>
<li class="c2">Multiple bug fixes have been incorporated. See the KB article titled <a href="http://software.intel.com/en-us/articles/intel-ipp-70-library-bug-fixes/">Intel® IPP 7.0 Library Bug Fixes</a> for details.</li>
</ul>
<h2 class="sectionHeading">7.0 update 5 Release Notes</h2>
<p>For technical reasons related to installation packaging, two editions of the 7.0.5 release have been issued. The Intel IPP library product binaries contained within these two 7.0.5 installation packages are identical. If you install the cryptography package make sure the three digit product ID on the install file (e.g. w_ccompxe_crypto_ipp_7.0.5.<b>258</b>.zip) matches the three digit ID in the main install package filename (e.g. w_ipp_7.0.5.<b>258</b>_ia32.exe).</p>
<ul>
<li class="c2">The ippiDCTFwd_32f_C1R function was optimized more than 2x speedup</li>
<li class="c2">Multiple bug fixes have been incorporated. See the KB article titled <a href="http://software.intel.com/en-us/articles/intel-ipp-70-library-bug-fixes/">Intel® IPP 7.0 Library Bug Fixes</a> for details.</li>
</ul>
<h2 class="sectionHeading">7.0 update 4 Release Notes</h2>
<p>For technical reasons related to installation packaging, two editions of the 7.0.4 release were issued. The Intel IPP library product binaries contained within these two 7.0.4 installation packages are identical. If you install the cryptography package make sure the three digit product ID on the install file (e.g. w_ccompxe_crypto_ipp_7.0.4.<b>221</b>.zip) matches the three digit ID in the main install package filename (e.g. w_ipp_7.0.4.<b>221</b>_ia32.exe).</p>
<ul>
<li class="c2">The px_/mx_ prefixes have been restored to the static generic library so that you can now include the static generic library in the same application that includes the product library. The automatic dispatcher will not recognize the generic library and will not dispatch to the generic optimizations; instead, you must call the generic functions directly with the px_/mx_ prefix. For more information, please see the KB article titled <a href="http://software.intel.com http://software.intel.com/en-us/articles/generic-library-dispatching-with-the-ipp-70-library/"><i>Generic Static Library Dispatching with the Intel® IPP 7.0 Library</i></a>.</li>
<li class="c2">Multiple bug fixes have been incorporated. See the KB article titled <a href="http://software.intel.com/en-us/articles/intel-ipp-70-library-bug-fixes/"><i>Intel® IPP 7.0 Library Bug Fixes</i></a> for details.</li>
</ul>
<h2 class="sectionHeading">7.0 update 3 Release Notes</h2>
<ul>
<li class="c2">Additional optimizations for the Intel® Atom™ instruction set have been incorporated. Please review the KB article titled <a href="http://software.intel.com/en-us/articles/new-atom-support/"><i>Intel® Atom™ Processor support in the Intel® Integrated Performance Primitives (Intel® IPP) Library</i></a> for details regarding which functions include direct optimization for the Intel Atom processor.</li>
<li class="c2">Multiple bug fixes and performance enhancements have been incorporated, especially relating to the UMC sample.</li>
</ul>
<h2 class="sectionHeading">7.0 update 2 Release Notes</h2>
<ul>
<li class="c2">Additional optimizations for the 256-bit Intel® AVX SIMD instruction set have been incorporated. Please review the KB article titled <a href="http://software.intel.com/en-us/articles/intel-ipp-functions-optimized-for-intel-avx-intel-advanced-vector-extensions"><i>Intel® IPP Functions Optimized for Intel® AVX (Intel® Advanced Vector Extensions)</i></a> for details regarding which functions include direct optimization for the Intel AVX instructions.</li>
<li class="c2">New optimizations for the Intel® Atom™ instruction set have been incorporated. Please review the KB article titled <a href="http://software.intel.com/en-us/articles/new-atom-support/"><i>Intel® Atom™ Processor support in the Intel® Integrated Performance Primitives (Intel® IPP) Library</i></a> for details regarding which functions now include direct optimization for the Intel Atom processor.</li>
<li class="c2">Data compression Huffman performance gains of about 2x achieved via a redesign of the "Inflate for Fixed Huffman" algorithm.</li>
<li class="c2">Cryptography improvements include 1.4x faster "sign verify" and a 2x faster ippsMontForm() function. In addition, improvements have been made to the ippsDLPSignDSA(), ippsDLPVerifyDSA(), ippsDLPGenKeyPair() and ippsDLPPublicKey() functions.</li>
<li class="c2">The ipp_zlib library has been updated so it is now based on the zlib 1.2.5 distribution.</li>
</ul>
<h2 class="sectionHeading">7.0 update 1a Release Notes</h2>
<p>For technical reasons related to installation packaging, two editions of the 7.0.1 release have been issued. The Intel IPP library product binaries contained within these two 7.0.1 installation packages are identical. The second edition adds legacy px/mx "generic" add-on libraries for use in those situations where the new minimum SSE base level (see "7.0 update 1 Release Notes" below) will not work for your target systems.</p>
<blockquote><i><b><span class="c1">IMPORTANT:</span></b> Most systems do not require these add-on generic libraries! It is not necessary to download and re-install this edition of the Intel IPP library on your development system if you have already successfully downloaded and installed the first edition of the 7.0.1 library, either as a standalone product or as part of one of the Intel® Parallel Studio XE or Intel® Composer XE products.</i></blockquote>
<p>These generic add-on libraries contain 32-bit and 64-bit code in single-threaded static and multi-threaded dynamic format only. The generic dynamic library files will automatically integrate with the Intel IPP library dispatch mechanism; the generic static library files do not integrate with the Intel IPP dispatcher.</p>
<p>Since the generic add-on libraries are provided in standard archives, you install them manually (as you currently do with the Intel IPP samples). If you have already installed the first edition of 7.0.1 on your system you do not need to download and re-install the entire 7.0.1a package; instead, download only the generic add-on library archives and extract the library files from those archives into their respective locations in your existing Intel IPP installation directories.</p>
<ul>
<li>1st edition Windows 7.0.1 files are denoted with a 7.0.1.104 or 7.0.1.041 label.</li>
<li>2nd edition Windows 7.0.1a files are denoted with a 7.0.1.127 or 7.0.1.046 label.</li>
<li>1st edition Linux 7.0.1 files are denoted with a 7.0.1.084 or 7.0.1.029 label.</li>
<li>2nd edition Linux 7.0.1a files are denoted with a 7.0.1.107 or 7.0.1.037 label.</li>
</ul>
<h2 class="sectionHeading">7.0 update 1 Release Notes</h2>
<ul>
<span class="c1">
<li class="c2">Additional optimizations for the 256-bit Intel® AVX SIMD instruction set (available on Intel® processors conforming to the Sandy Bridge microarchitecture) have been incorporated. Please review the KB article titled<b> </b><a href="http://software.intel.com/en-us/articles/intel-ipp-functions-optimized-for-intel-avx-intel-advanced-vector-extensions"><i>Intel® IPP Functions Optimized for Intel® AVX (Intel® Advanced Vector Extensions</i></a> for more information about which functions include optimizations for the Intel AVX instructions.</li>
<li class="c2"><b>IMPORTANT! </b>The Intel SSE3 optimization layer (t7) has been removed from the 32-bit edition (ia32) of the library and </li>
</span><span class="c2"><i><b>the minimum SIMD instruction level supported by this version of the library has changed</b>.</i></span> Please review the article titled <a href="http://software.intel.com/en-us/articles/understanding-simd-optimization-layers-and-dispatching-in-the-intel-ipp-70-library/"><i>Understanding SIMD Optimization Layers and Dispatching in the Intel IPP 7.0 Library</i></a> for more information. 
</ul>
<h2 class="sectionHeading">7.0 Release Notes</h2>
<p>The initial release of the Intel IPP library was only distributed as part of the Intel® Parallel Composer 2011 product, which is distributed with the Intel® Parallel Studio 2011 product, and is only available for the Microsoft* Windows* platform. Update releases are available on all supported platforms and as standalone products.</p>
<h3><b>Performance and Optimization Changes:</b></h3>
<ul>
<li class="c2">Additional optimizations for the 256-bit AVX SIMD instruction set (available on Intel® processors conforming to the Sandy Bridge microarchitecture) have been incorporated.</li>
<li class="c2">AVX optimization (g9/e9) is enabled by default; eliminating the requirement to use ippEnableCpu() on AVX capable processors.</li>
<li class="c2">Further AES-NI optimizations have been applied to the cryptography domain (separate download, see below) and data compression (CRC32 for ipp_bzip2), substantially improving performance on those processors that support the AES-NI instructions.</li>
<li class="c2">Intel® Itanium® architecture (IA-64) support is not included in this release of the library. Intel IPP 6.1 is the latest release for the IA-64 architecture.</li>
<li class="c2">The base 32-bit optimization layer of the library (px) has been compiled for higher performance and now requires a processor that conforms to the SSE2 processor architecture; this change is consistent with the requirements of the 64-bit base optimization layer (mx).</li>
<li class="c2">The standalone Intel Atom™ processor static libraries have been merged into the dispatched versions of the static library.</li>
<li class="c2">The SSE2 optimization layers (t7/m7) have been removed from this version of the IPP library; they will continue to be supported in the Intel IPP 6.1 product.</li>
<li class="c2">The 32-bit SSE3 optimization layer (w7) has been removed from this version of the IPP library; it continues to be supported in the Intel IPP 6.1 product.</li>
<li class="c2">New ippSetAffinity() function provides finer control of OpenMP threading within the library. For a complete list of threaded functions, please review the <i>ThreadedFunctionsList.txt</i> list located in the Intel IPP documentation directory.</li>
<li class="c2">ippInitCpu() now provides finer grained control over internal library dispatching for Intel processors conforming to the Penryn, Nehalem, and Westmere microarchitectures.</li>
<li class="c2">The OpenMP static library has been deprecated; all IPP samples now reference only the OpenMP dynamic/shared library.</li>
<li class="c2">The AES GCM API has been augmented to improve performance of AES encryption on pre-Westmere CPUs.</li>
</ul>
<h3 class="c1"><b>Microsoft* Visual Studio* Support:</b></h3>
<ul>
<li class="c2">Microsoft* Visual Studio 2010 is now supported by the Windows edition of the Intel IPP library; meaning, Intel IPP library help files and project files are now compatible with the Visual Studio 2010 IDE. The Visual Studio 2005 and 2008 IDEs continue to be supported. Visual Studio .NET (2003) help is <i>not supported</i> by this release of the library; however, Intel IPP 7.0 applications can still be compiled and linked using the VS.NET IDE.</li>
<li class="c2">The DMIP sample now includes a Microsoft* DSL (Domain Specific Language) add-on for use with Microsoft* Visual Studio 2008.</li>
</ul>
<h3 class="c1"><b>Domain-Specific Changes:</b></h3>
<ul>
<li class="c2">Many new functions have been added to the library API in this release of the product, including IPPI_ANTIALIASING mode support for ippiResizeSqrPixel, new color conversion functionality for JPEG image processing and additional context functionality for the cryptography domain. For a complete list of the new functions added to this release please see the <i>NewFunctionsList.txt</i> list located in the Intel IPP documentation directory.</li>
<li class="c2">Support for the JPEG-XR (HD Photo) forward and inverse transforms for 16s, 32s and 32f data types and variable length code (VLC) encode and decode functions for 32s data types has been added.</li>
<li class="c2">A JPEG-XR (HD Photo) codec is now included in the UIC sample framework for grayscale, RGB and RGBA images with 8, 16, and 32-bit integer and 16 and 32-bit floating point pixel depths.</li>
<li class="c2">A new Windows Imaging Codec (WIC) added to the UIC sample.</li>
<li class="c2">The matrix math domain adds 86 new 3D math functions designed for use with the Microsoft* DirectX API. A DirectX compatible sample using these functions is also provided, making it very easy to integrate these functions into existing DirectX applications.</li>
<li class="c2">The speech recognition functions (ippSR domain) are not part of this release; this domain will continue to be supported in the IPP 6.1 product.</li>
<li class="c2">The SPIRAL generated functions (ippGEN domain) are now distributed as a separate download. See instructions below for more information.</li>
<li class="c2">The UMC simple_player application now runs on the Windows* Vista* and Windows 7* Aero interface.</li>
</ul>
<h3 class="c1"><b>New High-Level APIs:</b></h3>
<ul>
<li class="c2">A new <i>interfaces</i> directory has been added that contains high-level application code, in the form of source and pre-built binaries. Several popular data compression libraries (e.g., bzip2, zlib and gzip) have been modified for use with the Intel IPP library and can be found in this new <i>interfaces</i> directory for immediate use in your applications.</li>
<li class="c2">There is a new ipp_lzopack (data compression) library, located in the <i>interfaces</i> directory mentioned above.</li>
<li class="c2">Multi-threading is now part of the ipp_zlib library (by use of the OpenMP multi-threading library), also located in the new <i>interfaces</i> directory.</li>
</ul>
<h3 class="c1"><b>Installation Changes:</b></h3>
<ul>
<li class="c2">Documentation is now delivered in searchable HTML format; Windows CHM and Adobe PDF formats have been removed.</li>
<li class="c2">A new directory hierarchy has been established to simplify integration of the Intel IPP library with Intel Compiler products. This change may require updates to existing build scripts, makefiles and/or Visual Studio project files.</li>
<li class="c2">Directories formerly designated as "em64t" are now designated with the "intel64" tag. This change may require changes to existing build scripts, makefiles and/or Visual Studio project files.</li>
<li class="c2">Library filenames have been normalized to be consistent between 32-bit and 64-bit architectures (i.e., the "em64t" tag has been removed from all 64-bit library file names). This change may require that you update your build scripts, makefiles and/or Visual Studio project files.</li>
<li class="c2">The domain-specific "emerged" and "merged" static library files have been combined (e.g., ippsemerged.lib + ippsmerged_t.lib ? ipps_t.lib) for simpler reference and the single-threaded static libraries are now designated by a "_l" suffix (multi-threaded static libraries continue to be designated by a "_t" suffix). This change may require updates to existing build scripts, makefiles and/or Visual Studio project files.</li>
<li class="c2">The OpenMP static libraries have been deprecated; these OpenMP library components will still be shipped as part of this version of the product, but will be removed in a future release. See the Intel Compiler documentation for more information regarding OpenMP.</li>
</ul>
<h2 class="sectionHeading">Product Contents</h2>
<p>The <b><i>core</i></b> Intel® Integrated Performance Primitives (Intel® IPP) v7.0 for Microsoft* Windows* consists of two installation packages:</p>
<ul>
<li class="c0">Intel® IPP for Microsoft* Windows* on IA-32 Intel® Architecture</li>
<li class="c0">Intel® IPP for Microsoft* Windows* on Intel® 64 Architecture</li>
</ul>
<p>and the following <b><i>optional</i></b> add-on packages:</p>
<ul>
<li class="c0"><a target="_blank" href="http://software.intel.com/en-us/articles/download-ipp-cryptography-libraries">Intel® IPP for Microsoft* Windows* Crypography Add-on</a></li>
<li class="c0">Intel® IPP for Microsoft* Windows* SPIRAL Add-on</li>
<li class="c0"><a target="_blank" href="http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-samples-license-agreement/">Intel® IPP for Microsoft* Windows* Samples</a></li>
</ul>
<p>The <b><i>core</i></b> Intel® Integrated Performance Primitives (Intel® IPP) v7.0 for Linux* consists of two installation packages:</p>
<ul>
<li class="c0">Intel® IPP for Linux* on IA-32 Intel® Architecture</li>
<li class="c0">Intel® IPP for Linux* on Intel® 64 Architecture</li>
</ul>
<p>and the following <b><i>optional</i></b> add-on packages:</p>
<ul>
<li class="c0"><a target="_blank" href="http://software.intel.com/en-us/articles/download-ipp-cryptography-libraries">Intel® IPP for Linux* Crypography Add-on</a></li>
<li class="c0">Intel® IPP for Linux* SPIRAL Add-on</li>
<li class="c0"><a target="_blank" href="http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-samples-license-agreement/">Intel® IPP for Linux* Samples</a></li>
</ul>
<p>There is no standalone installation of the Intel IPP v7.0 for Mac OS X*. The Intel IPP 7.0 for Mac OS X is distributed as part of the Intel® Composer XE and Intel® C++ Composer XE product suites.</p>
<h2 class="sectionHeading">Intel® IPP for Cryptography is a Separate Download</h2>
<p>The Intel IPP for cryptography is a separate installation package that contains the binaries and header files needed to utilize the functions contained in the Intel IPP cryptography domain. It is an <i>add-on</i> to the Intel IPP library and, therefore, <i>requires that the core Intel IPP already be installed on your system</i>. You must first install the standalone Intel® IPP, Intel® Cluster Studio XE, Intel® C++ Studio XE, Intel® Composer XE, Intel® Parallel Composer, Intel® Parallel Studio, or the Intel® Parallel Studio XE product before installing the respective Intel IPP for cryptography package.</p>
<p>To obtain the Intel IPP for cryptography, which are distributed separately from the main Intel IPP, review this knowledge base article: <i><a target="_blank" href="http://software.intel.com/en-us/articles/download-ipp-cryptography-libraries">Where do I download the Intel IPP for Cryptography?</a></i>.</p>
<h2 class="sectionHeading">Intel® IPP SPIRAL Domain (ippGEN) is a Separate Download</h2>
<p>In order to decrease the size of the Intel IPP installation package, the SPIRAL subset (ippGEN) of the signal processing domain is now distributed as a separate library add-on. Go to the <i><a href="http://registrationcenter.intel.com/">Intel Registration Center</a></i> to download the ippGEN component of the Intel® IPP.</p>
<p>SPIRAL for Intel® IPP is a separate installation package that contains the binaries and header files needed to utilize the functions contained in the ippGEN domain. It is an <i>add-on</i> to the Intel® IPP and, therefore, <i>requires that the core Intel® IPP be already installed on your system</i>. You must first install the standalone Intel® IPP, Intel® Cluster Studio XE, Intel® C++ Studio XE, Intel® Composer XE, Intel® Parallel Composer, Intel® Parallel Studio, or the Intel® Parallel Studio XE product before installing the respective SPIRAL add-on library.</p>
<p>The ippGEN package is an adjunct to the ippSP (Signal Processing) domain. It contains signal processing functions that have been optimized for non-ordinary size data sets, primarily in the class of FFT functions. If you have not used these "ippg" functions in the past it is likely that you do not need to download and install this add-on library. However, there is no harm to installing this add-on with the core Intel IPP.</p>
<h1 class="sectionHeading">Technical Support</h1>
<p>If you did not register your Intel software product during installation, please do so now at the <i><a href="https://registrationcenter.intel.com/">Intel® Software Development Products Registration Center</a></i>. Registration entitles you to free technical support, product updates and upgrades for the duration of the support term.</p>
<p>For technical information about the Intel IPP, including FAQ's, tips and tricks, and other support information, please visit the Intel® IPP forum: <a href="http://software.intel.com/en-us/forums/intel-integrated-performance-primitives/">http://software.intel.com/en-us/forums/intel-integrated-performance-primitives/</a> and browse the Intel® IPP knowledge base: <a href="http://software.intel.com/en-us/articles/intel-ipp-kb/all/">http://software.intel.com/en-us/articles/intel-ipp-kb/all/</a>.</p>
<p>For general information about Intel technical support, product updates, user forums, FAQs, tips and tricks and other support questions, please visit <a href="http://www.intel.com/software/products/support/">http://www.intel.com/software/products/support/</a>.</p>
<blockquote>
<p><i><b>Note:</b> If your distributor provides technical support for this product, please contact them rather than Intel.</i></p>
</blockquote>
<p> </p>
<h1 class="sectionHeading">License Definitions</h1>
<p>Any software source code included with this product is furnished under a software license and may only be used or copied in accordance with the terms of that license. Please see the <a href="http://software.intel.com/en-us/articles/intel-software-development-products-license-agreement/">Intel Software Products End User License Agreement</a> for license definitions and restrictions on the library.</p>
<p>INFORMATION IN THIS DOCUMENT IS PROVIDED IN CONNECTION WITH INTEL PRODUCTS. NO LICENSE, EXPRESS OR IMPLIED, BY ESTOPPEL OR OTHERWISE, TO ANY INTELLECTUAL PROPERTY RIGHTS IS GRANTED BY THIS DOCUMENT. EXCEPT AS PROVIDED IN INTEL'S TERMS AND CONDITIONS OF SALE FOR SUCH PRODUCTS, INTEL ASSUMES NO LIABILITY WHATSOEVER AND INTEL DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY, RELATING TO SALE AND/OR USE OF INTEL PRODUCTS INCLUDING LIABILITY OR WARRANTIES RELATING TO FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR INFRINGEMENT OF ANY PATENT, COPYRIGHT OR OTHER INTELLECTUAL PROPERTY RIGHT.</p>
<p>UNLESS OTHERWISE AGREED IN WRITING BY INTEL, THE INTEL PRODUCTS ARE NOT DESIGNED NOR INTENDED FOR ANY APPLICATION IN WHICH THE FAILURE OF THE INTEL PRODUCT COULD CREATE A SITUATION WHERE PERSONAL INJURY OR DEATH MAY OCCUR.</p>
<p>Intel may make changes to specifications and product descriptions at any time, without notice. Designers must not rely on the absence or characteristics of any features or instructions marked "reserved" or "undefined." Intel reserves these for future definition and shall have no responsibility whatsoever for conflicts or incompatibilities arising from future changes to them. The information here is subject to change without notice. Do not finalize a design with this information.</p>
<p>The products described in this document may contain design defects or errors known as errata which may cause the product to deviate from published specifications. Current characterized errata are available on request.</p>
<p>Contact your local Intel sales office or your distributor to obtain the latest specifications and before placing your product order.</p>
<p>Copies of documents which have an order number and are referenced in this document, or other Intel literature, may be obtained by calling <span class="baec5a81-e4d6-4674-97f3-e9220f0136c1" >1-800-548-4725<a href="http://software.intel.com#" title="Call: 1-800-548-4725" ><img src="http://software.intel.comdata:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAKLSURBVHjadJPfS5NhFMe/21xvuhXRyJAZroiSrJnbRdT7vrAf5HBaK5RABmEEwQIvkpZ/QRcWXdSFw5soKaF0F7qZeLO13mGBDpQsf5CoxVKHOt0Pctp2uvEdrzG/V+c553w/54HnPDIiQiGpPMETABoB2AAYd9MRAMMAvGmX+RcAyAoBVJ7gZQDtABworH4AHWmX+bOMZdkjCoXiUzabvcAwzPSsob5p/VTNY9GcdpnxdmYZ9wJThSCtCr1e/4XjuNPd3d1KjUZzaGbI27ysqzGQoggAsLa1A7ehArrDxfDNr0oBlQB+wmKxbJFEL968SxoamsjkHaPU9l9piUo6A0RE1DG2QCWdASrpDAzJM5kMI8XecdjVxfEl+K9dxFgsgUvvR6HyBKHyBAEATyKLeGSsENuNcqk5kUjEGm7fzcYqr0ClVODl99+YXEvl6+c1amjVe+ahiGGYaUEQKnmeh91uL43rqheixjpdmzCL11er0PcjhrTLvMfUJsyKYUSeyWQ6enp6tgCgrKxsfbP8bB8AdE1G89cOReMAgOv+Cag8QXRNRkXAsDwcDr+am5tLCYKA3t7eo2dG+1vVK/MfpRPtA+MIReMYaKj+/xm9MiICx3EmpVL5wefzFavValis1u1vvHMkdfykCQC0kSGUTo+Ajmnx1dSC7IGD+UUCEYGIwLKsyWazrSeTSSIiMpnNf7Ttz5+ec96fr7/VnE0mk+QfHMzV3WjcKH/4rEr05QGFIA6HY4llWRLPRER+v3/HYrFMFQSIkNra2tVQKJSlfcSyLO0LECFWq3XF6XRGA4HAptTsdrsXeZ6fEHtl+31nAOA4rkUulz/I5XL63dQGgHEAN8Ph8AYA/BsAt4ube4GblQIAAAAASUVORK5CYII=" title="Call: 1-800-548-4725"  /></a></span>, or go to <a href="http://www.intel.com/design/literature.htm">http://www.intel.com/design/literature.htm</a>.</p>
<p>The Intel IPP library functions may contain code that can be used for implementations of algorithms that may require complying with patent conditions.</p>
<p>Please be aware that the RC5 algorithms are patented by Rivest, Ronald L.; RSA* Data Security, Inc. US patent 5,724,428.</p>
<p>Intel and the Intel logo are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries. For a complete list of Intel trademarks please go here: <a href="http://www.intel.com/sites/sitewide/en_US/tradmarx.htm">http://www.intel.com/sites/sitewide/en_US/tradmarx.htm</a>.</p>
<p>*Other names and brands may be claimed as the property of others.</p>
<table cellpadding="5" cellspacing="0" rules="none" border="1">
<tbody>
<tr>
<th align="left" valign="middle" >Optimization Notice</th>
</tr>
<tr bgcolor="#ccecff">
<td>
<p>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.</p>
<p align="right">Notice revision #20110804</p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>Copyright © 2002-2012, Intel Corporation. All rights reserved.</p> ]]></description>
      <link>http://software.intel.com/en-us/articles/intel-ipp-70-library-release-notes/</link>
      <pubDate>Tue, 22 Mar 2011 00:00:00 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/intel-ipp-70-library-release-notes/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/intel-ipp-70-library-release-notes/</guid>
      <category>Intel® Integrated Performance Primitives Knowledge Base</category>
    </item>
    <item>
      <title>Intel® Atom™ Processors support in the Intel® Integrated Performance Primitives (Intel® IPP) Library</title>
      <description><![CDATA[ <p><em>All versions of the Intel® IPP library will run on Intel® Atom™ processors. The table below represents the Intel IPP library functions that have been "hand-tuned" for optimal performance on Intel Atom processors in version 7.0.2 of the library.</em></p>
<p>Hand-tuned optimizations designed to maximize performance of the Intel IPP library on Intel Atom processors were added beginning with v6.0 of the Intel IPP library. For maximum performance on Intel Atom processors, we recommend that you upgrade to version 7.0 of the Intel IPP library.</p>
<p>Both static and dynamic/shared libraries in v7.0 of the Intel IPP library include Intel Atom processor optimizations. Applications linked with versions 7.0 of the Intel IPP library will be dispatched to the "<strong>s8</strong>" optimized library for IA-32 and the "<strong>n8</strong>" library for Intel® 64 whenever your application executes on an Intel Atom processor.</p>
<blockquote>
<p>For more information regarding dispatching please see <em><a href="http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-intel-ipp-understanding-cpu-optimized-code-used-in-intel-ipp">Understanding CPU Dispatching in the Intel® IPP Library</a></em> or check the Intel IPP <em>Getting_Started.htm</em> and <em>userguide_*.pdf</em> files in the <a target="_blank" href="http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-documentation/">Intel IPP documentation</a>.</p>
</blockquote>
<p>In the v6.x Intel IPP library, only the dynamic/shared libraries contain Intel Atom processor optimizations; there are no Intel Atom processor optimizations in the v6.x dispatched static libraries. However, the v6.x dispatched static libraries will safely run on an Intel Atom processor by dispatching to the <strong>v8/u8</strong> libraries optimized for the Merom microarchitecture (Intel Core 2 processor), which is also designed for use with the same Intel Supplemental SSE3 SIMD instruction set (SSSE3) that Intel Atom processors support. A separate non-dispatched static Intel IPP library for Linux* is available on the IA-32 platform (and as part of the Intel Atom SDK).</p>
<p>The following list of functions have been hand-optimized for the Intel Atom processor for the version of the Intel IPP library listed at the beginning of this article.</p>
<blockquote>
<p><em><strong>Note:</strong> every Intel IPP library primitive is available for use with the Intel Atom processor, this list simply shows those functions which have been specially hand-tuned for the Intel Atom processor; hand-tuning is not required to achieve optimum performance for all IPP functions. If you have some specific Intel IPP functions that are not listed in the following table, and would like to see them added to the priority list for Atom optimization, please create a thread on the <a target="_blank" href="http://software.intel.com/en-us/forums/intel-integrated-performance-primitives/">IPP forum</a> stating which functions you would like to see added to the Atom optimization priority list.</em></p>
</blockquote>
<div align="center">
<table width="600" cellpadding="2" cellspacing="0" border="0">
<tbody>
<tr>
<td align="left" valign="top">
<table width="275" cellpadding="2" cellspacing="0" border="0">
<tbody>
<tr>
<td>
<p><b>Signal Processing</b></p>
<pre>ippsAddProduct_32f
ippsAddProduct_32fc
ippsAddProduct_32s_Sfs
ippsAddProduct_64f
ippsAddProduct_64fc
ippsAdd_32f    
ippsAdd_32fc   
ippsAdd_64f    
ippsAdd_64fc
ippsAdd_32f_I
ippsAdd_32fc_I
ippsAdd_32s_Sfs
ippsConvert_16s32f
ippsConvert_16u32f
ippsConvert_32f16s_Sfs
ippsConvert_32f16u_Sfs
ippsConvert_32f32s_Sfs
ippsConvert_32f8s_Sfs
ippsConvert_32f8u_Sfs
ippsConvert_32s32f
ippsConvert_32s64f
ippsConvert_64f32s_Sfs
ippsConvert_8s32f
ippsConvert_8u32f
ippsCopy_16s
ippsCopy_64s
ippsDFTFwd_CToC_32fc
ippsDFTFwd_CToC_64fc
ippsDiv_16sc_Sfs
ippsDiv_16s_Sfs
ippsDiv_16u_Sfs
ippsDiv_32f
ippsDiv_32fc
ippsDiv_32s16s_Sfs
ippsDiv_32s_Sfs
ippsDiv_64f
ippsDiv_64fc
ippsDotProd_32f32fc64fc
ippsDotProd_32f64f
ippsDotProd_32fc64fc
ippsDotProd_64f
ippsDotProd_64f64fc
ippsDotProd_64fc
ippsFFTFwd_CToC_32fc
ippsFFTFwd_CToC_64fc
ippsFilterMedian_32f
ippsFilterMedian_32s
ippsFilterMedian_64f
ippsFIR32f_16s_Sfs
ippsFIR64f_16s_Sfs
ippsFIR64f_32s_Sfs
ippsFIR_32f
ippsFIR_64f
ippsJoin_32f16s_D2L
ippsLShiftC_32s_I
ippsMax_32s
ippsMean_32f
ippsMin_32s
ippsMul_32f       
ippsMul_32fc      
ippsMul_64f       
ippsMul_64fc
ippsMul_32f_I
ippsMulC_32f
ippsMulC_32f_I
ippsNorm_L2_32f
ippsNormDiff_L2_32f
ippsRShiftC_32s_I
ippsSampleUp_32f
ippsScale_32f_I
ippsSqr_32f
ippsSqr_32f_I
ippsSqr_32fc
ippsSqr_64f
ippsSqr_64fc
ippsSqrt_16s_Sfs
ippsSqrt_16u_Sfs
ippsSqrt_32f
ippsSqrt_32f_I
ippsSqrt_32fc
ippsSqrt_64f
ippsSqrt_64fc
ippsSub_32s_Sfs
ippsSub_32f       
ippsSub_32f_I
ippsSub_32fc      
ippsSub_64f       
ippsSub_64fc      
ippsSum_32f
ippsSum_32f
ippsThreshold_LTVal_32f_I
</pre>
<p> </p>
</td>
</tr>
<tr>
<td>
<p><strong>Speech Coding</strong></p>
<pre>ippsAdaptiveCodebookSearch_RTA_32f
ippsSBADPCMEncode_G722_16s
ippsSBADPCMDecode_G722_16s
ippsDCTFwd_G7221_16s
ippsDCTInv_G7221_16s
ippsDecomposeDCTToMLT_G7221_16s
ippsDecomposeMLTToDCT_G7221_16s
ippsEnvelopFrequency_G7291_16s
ippsFilterHighpass_G7291_16s
ippsFilterLowpass_G7291_16s
ippsFIRSubbandLow_EC_32sc_Sfs
ippsFIRSubbandLowCoeffUpdate_EC_32sc_I
ippsFixedCodebookSearch_RTA_32f
ippsFixedCodebookSearchRandom_RTA_32f
ippsLSPToLPC_RTA_32f
ippsLSPQuant_RTA_32f
ippsMDCTFwd_G7291_16s
ippsMDCTPostProcess_G7291_16s
ippsQMFDecode_G722_16s
ippsQMFDecode_G7291_16s
ippsQMFEncode_G722_16s
ippsQMFEncode_G7291_16s
ippsSubbandAnalysis_16s32sc_Sfs
ippsSubbandController_EC_32f
ippsSubbandControllerUpdate_EC_32f
ippsSubbandSynthesis_32sc16s_Sfs
ippsTiltCompensation_G7291_16s
ippsToeplizMatrix_G729_32f
ippsToneDetect_EC_32f
</pre>
<p> </p>
</td>
</tr>
<tr>
<td align="left" valign="top">
<p><strong>Data Compression</strong></p>
<pre>ippsCRC32_8u
ippsEncodeRLE_BZ2_8u
ippsReduceDictionary_8u_I
ippsVLCCountBits_16s32s
ippsVLCDecodeOne_1u16s
ippsVLCDecodeUTupleBlock_1u16s
ippsVLCDecodeUTupleOne_1u16s
ippsVLCEncodeInit_32s
</pre>
<p> </p>
</td>
</tr>
<tr>
<td>
<p><strong>Audio Coding</strong></p>
<pre>ippsMDCTInvWindow_MP3_32s
ippsPow43Scale_16s32s_Sf
ippsPow43_16s32f
ippsPredictCoef_SBR_C_32fc_D2L
ippsSynthesisDownFilter_SBR_CToR_32fc32f_D2L
ippsSynthesisDownFilter_SBR_RToR_32f_D2L
ippsSynthesisFilter_PQMF_MP3_32f
ippsSynthesisFilter_SBR_CToR_32fc32f_D2L
ippsSynthesisFilter_SBR_RToR_32f_D2L
ippsVLCDecodeEscBlock_AAC_1u16s
ippsVLCDecodeEscBlock_MP3_1u16s
ippsVLCDecodeUTupleEscBlock_AAC_1u16s
ippsVLCDecodeUTupleEscBlock_MP3_1u16s
</pre>
<p> </p>
</td>
</tr>
</tbody>
</table>
</td>
<td align="left" valign="top">
<table width="275" cellpadding="2" cellspacing="0" border="0">
<tbody>
<tr>
<td align="left" valign="top">
<p><b>Image Processing</b></p>
<pre>ippiAdd_16s_C1IRSfs
ippiConvert_16u32f_C1R 
ippiConvert_16u8u_C3R 
ippiConvert_8u16s_C1R
ippiConvert_8u16u_C1R 
ippiCopyReplicateBorder_16s_C1R
ippiCopy_8u_C1R 
ippiCopy_8u_C3R 
ippiCopy_8u_C4R 
ippiDilate_32f_AC4R 
ippiDilate_32f_C1R 
ippiDilate_32f_C3R 
ippiDiv_16s_AC4RSfs 
ippiDiv_16s_C1RSfs 
ippiDiv_16s_C3RSfs 
ippiDiv_16s_C4RSfs 
ippiDiv_16u_AC4RSfs 
ippiDiv_16u_C1RSfs 
ippiDiv_16u_C3RSfs 
ippiDiv_16u_C4RSfs 
ippiDiv_32f_AC4R 
ippiDiv_32f_C1R 
ippiDiv_32f_C3R 
ippiDiv_32f_C4R 
ippiErode_32f_AC4R 
ippiErode_32f_C1R 
ippiErode_32f_C3R 
ippiFilter32f_8u_AC4R
ippiFilter32f_8u_C1R 
ippiFilter32f_8u_C3R 
ippiFilter32f_8u_C4R 
ippiFilterGauss_16s_AC4R 
ippiFilterGauss_16s_C1R 
ippiFilterGauss_16s_C3R 
ippiFilterGauss_16s_C4R 
ippiFilterGauss_32f_AC4R 
ippiFilterGauss_32f_C1R 
ippiFilterGauss_32f_C3R 
ippiFilterGauss_32f_C4R 
ippiFilter_16s_AC4R 
ippiFilter_16s_C1R 
ippiFilter_16s_C3R 
ippiFilter_16s_C4R 
ippiFilter_16u_AC4R 
ippiFilter_16u_C1R 
ippiFilter_16u_C3R 
ippiFilter_16u_C4R 
ippiFilter_8u_AC4R 
ippiFilter_8u_C1R 
ippiFilter_8u_C3R 
ippiFilter_8u_C4R 
ippiGetPerspectiveQuad
ippiMirror_16u_C1IR
ippiMirror_16u_C4R 
ippiMirror_32s_C4R 
ippiMirror_8u_C4R 
ippiMul_32f_AC4R 
ippiMul_32f_C1R 
ippiMul_32f_C3R 
ippiMul_32f_C4R 
ippiSet_16u_C3R 
ippiSet_16u_C4R 
ippiSet_32f_C1R 
ippiSet_32f_C3R 
ippiSet_8u_C3R 
ippiSet_8u_C4R 
ippiSqrt_16s_AC4RSfs 
ippiSqrt_16s_C1RSfs 
ippiSqrt_16s_C3RSfs 
ippiSqrt_16u_AC4RSfs 
ippiSqrt_16u_C1RSfs 
ippiSqrt_16u_C3RSfs 
ippiSqrt_32f_AC4R 
ippiSqrt_32f_C1R 
ippiSqrt_32f_C3R 
ippiSqr_32f_AC4R 
ippiSqr_32f_C1R 
ippiSqr_32f_C3R 
ippiSqr_32f_C4R 
ippiSub_16s_C1IRSfs
</pre>
<p> </p>
</td>
</tr>
<tr>
<td align="left" valign="top">
<p><b>Color Conversion</b></p>
<pre>ippiBGR555ToYCbCr420_16u8u_C3P3R
ippiBGR555ToYCbCr422_16u8u_C3C2R
ippiBGR555ToYCbCr422_16u8u_C3P3R
ippiBGR555ToYCrCb420_16u8u_C3P3R
ippiBGR555ToYUV420_16u8u_C3P3R
ippiBGR565ToYCbCr411_16u8u_C3P3R
ippiBGR565ToYCbCr420_16u8u_C3P3R
ippiBGR565ToYCbCr422_16u8u_C3C2R
ippiBGR565ToYCbCr422_16u8u_C3P3R
ippiBGR565ToYCrCb420_16u8u_C3P3R
ippiBGR565ToYUV420_16u8u_C3P3R
ippiBGRToCbYCr422_8u_AC4C2R
ippiBGRToHLS_8u_AC4P4R
ippiBGRToHLS_8u_AP4C4R
ippiBGRToHLS_8u_AP4R
ippiBGRToHLS_8u_C3P3R
ippiBGRToHLS_8u_P3C3R
ippiBGRToHLS_8u_P3R
ippiBGRToYCbCr422_8u_AC4C2R
ippiBGRToYCbCr422_8u_AC4P3R
ippiBGRToYCbCr422_8u_C3C2R
ippiBGRToYCbCr422_8u_C3P3R
ippiCbYCr422ToBGR_8u_C2C4R
ippiHLSToBGR_8u_AC4P4R
ippiHLSToBGR_8u_AP4C4R
ippiHLSToBGR_8u_AP4R
ippiHLSToBGR_8u_C3P3R
ippiHLSToBGR_8u_P3C3R
ippiHLSToBGR_8u_P3R
ippiRGB565ToYUV422_16u8u_C3P3R
ippiRGBToCbYCr422Gamma_8u_C3C2R
ippiRGBToCbYCr422_8u_C3C2R
ippiRGBToYCbCr422_8u_C3C2R
ippiRGBToYCbCr422_8u_C3P3R
ippiRGBToYCbCr_8u_P3R
ippiRGBToYCrCb422_8u_P3C2R
ippiRGBToYUV420_8u_P3
ippiRGBToYUV420_8u_P3R
ippiRGBToYUV422_8u_C3C2R
ippiRGBToYUV422_8u_C3P3
ippiRGBToYUV422_8u_C3P3R
ippiRGBToYUV422_8u_P3
ippiRGBToYUV422_8u_P3R
ippiRGBToYUV_8u_AC4R
ippiRGBToYUV_8u_C3R
ippiRGBToYUV_8u_P3R
ippiYCbCr422To420_Interlace_8u_P3R
ippiYCbCr422ToBGR_8u_C2C3R
ippiYCbCr422ToBGR_8u_C2P3R
ippiYCbCrToRGB_8u_P3R
ippiYUV422ToRGB_8u_P3C3
ippiYUV422ToRGB_8u_P3C3R
ippiYUVToRGB_8u_P3C3R
</pre>
<p> </p>
</td>
</tr>
<tr>
<td>
<p><strong>Video Coding</strong></p>
<pre>ippiReconstructLumaIntra4x4_H264High_32s16u_IP1R
ippiFilterDeblockingLumaVerEdge_H264_16u_C1IR
ippiFilterDeblockingLumaHorEdge_H264_16u_C1IR
</pre>
<p> </p>
</td>
</tr>
<tr>
<td>
<p><strong>Miscellaneous</strong></p>
<pre>ippsFindCAny_8u
ippmInvert_m_32f
ippmMul_tm_32f
</pre>
<p> </p>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
<p><br />Functions not listed above are either hand-optimized for the Merom microarchitecture (SSSE3) or for prior SIMD instruction sets that are compatible with the Intel Atom processor (such as SSE2). In addition, the entire Intel Atom optimized library is <em>compiler-optimized</em> for the Intel Atom processor using the Intel Compiler <em>xSSE3_ATOM</em> switch (enable Atom optimizations) in order to take advantage of features unique to the Intel Atom processor.</p>
<p>Please see <em><a target="_blank" href="http://software.intel.com/en-us/articles/atom-optimized-compiler/">Optimized for the Intel® Atom™ Processor with Intel's Compiler</a></em> for more information and check out the <a href="http://software.intel.com/en-us/intel-parallel-studio-home/">Intel Parallel Studio web site</a> where you can learn more about the tools available to develop, debug, and tune your multi-threaded applications.</p>
<p>
<table cellpadding="5" cellspacing="0" rules="none" border="1">
<tbody>
<tr>
<th align="left" valign="middle" >Optimization Notice</th>
</tr>
<tr bgcolor="#ccecff">
<td>
<p>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.</p>
<p align="right">Notice revision #20110804</p>
</td>
</tr>
</tbody>
</table>
</p> ]]></description>
      <link>http://software.intel.com/en-us/articles/new-atom-support/</link>
      <pubDate>Mon, 31 Jan 2011 09:00:00 -0800</pubDate>
      <comments>http://software.intel.com/en-us/articles/new-atom-support/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/new-atom-support/</guid>
      <category>Intel® Integrated Performance Primitives Knowledge Base</category>
    </item>
    <item>
      <title>Intel® Integrated Performance Primitives (Intel® IPP) Functions Optimized for Intel® Advanced Vector Extensions (Intel® AVX)</title>
      <description><![CDATA[ <ul>
<blockquote><i>
<li>The table below reflects the Intel AVX support provided in the Intel IPP 7.0.2 library release.</li>
<li>Intel AVX optimized code is available in both the 32-bit and 64-bit editions of the 7.0 library. </li>
<li>There is very limited support for Intel AVX in the 6.1 library; if you plan to use Intel IPP on an Intel AVX platform you should upgrade to the 7.0 version of the Intel IPP library. </li>
</i></blockquote>
</ul>
<p><a target="_blank" href="http://www.intel.com/software/avx">Intel® AVX (Intel® Advanced Vector Extensions)</a> is a 256-bit instruction set extension to SSE designed to provide even higher performance for applications that are floating-point intensive. Intel AVX adds new functionality to the the existing Intel SIMD instruction set (based on SSE) and includes a more compact SIMD encoding format. A large number (200+) of Intel SSEx instructions have been "upgraded" in AVX to take advantage of features like a distinct destination operand and flexible memory alignment. Approximately 100 of the legacy 128-bit Intel SSEx instructions have been promoted to process 256-bit vector data. In addition, approximately 100 new data processing and arithmetic operations, not present in the legacy Intel SSEx SIMD instruction set, have been added.</p>
<p>The primary benefits of Intel AVX are:</p>
<ul>
<li>Support for wider vector data (up to 256-bit). </li>
<li>Efficient instruction encoding scheme that supports 3 and 4 operand instruction syntaxes. </li>
<li>Flexible programming environment, ranging from branch handling to relaxed memory alignment requirements. </li>
<li>New data manipulation and arithmetic compute primitives, including broadcast, permute, fused-multiply-add, etc.<br /><span ><span ><br /></span></span></li>
</ul>
<hr />
<p><em><span ><br /></span>ippGetCpuFeatures()</em> reports information regarding the SIMD features available to your processor. Alternatively, <em>ippGetCpuType()</em> detects the processor type in your system. A return value of <em>ippCpuAVX</em> means your processor supports the Intel AVX instruction set. These functions are declared in <i>ippcore.h</i>.</p>
<p>Mask the value returned by <i>ippGetCpuFeatures()</i> with <em>ippCPUID_AVX<span > (0x0100</span></em>) to determine if the Intel AVX SIMD instructions are supported by your processor (ippGetCpuFeatures() &amp; ippCPUID_AVX is TRUE). To determine if your operating system <span >also</span> supports the Intel AVX instructions (saves the extended SIMD registers), mask the returned value from <i>ippGetCpuFeatures()</i> with <i>ippAVX_ENABLEDBYOS </i>(0x0200). <span >Both</span> conditions (i.e., CPU and OS support) must be met before your application can utilize the Intel AVX SIMD instructions.</p>
<hr />
<p><br />The Intel IPP library has been optimized for a variety of SIMD instruction sets. Automatic "dispatching" detects the SIMD instruction set that is available on the running processor and selects the optimal SIMD instructions for that processor. Please review <i><a href="http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-intel-ipp-understanding-cpu-optimized-code-used-in-intel-ipp/">Understanding CPU Dispatching in the Intel® IPP Library</a><span > for more information regarding dispatching.</span></i></p>
<p>Intel AVX optimization in the Intel IPP library consists of "hand-optimized" and "compiler-tuned" functions – code that has been directly optimized for the Intel AVX instruction set. Given the large number of primitives in the Intel IPP library, it is impossible to directly optimize every Intel IPP function for the large set of new instructions represented by the Intel AVX instruction set within the period of a single product release or update (processor-specific optimizations may also take into consideration cache size and number of cores/threads). Therefore, the functions in the table below represent those that either receive the greatest benefit from the new Intel AVX instructions or are the most widely used by Intel IPP customers.</p>
<blockquote>
<p>If you have some specific Intel IPP functions that are not listed in the following table, and would like to see them added to the priority list for future AVX optimization, please create a thread on the <a target="_blank" href="http://software.intel.com/en-us/forums/intel-integrated-performance-primitives/">IPP forum</a> stating which functions you would like to see added to the AVX optimization priority list.</p>
</blockquote>
<p>Functions directly optimized for Intel AVX are added to the table below as they become available with each new release or update of the library.</p>
<p>The following conventions are used in the table below to allow multiple similar functions to be denoted on a single line:</p>
<ul>
<li>{x} - Braces enclose a required (function name) element. </li>
<li>[x] - Square brackets enclose an optional (function name) element. </li>
<li>| - A vertical line indicates an exclusive choice within a set of optional or required elements. </li>
<li>{x|y|z} - Example of three mutually exclusive choices within a required element in the function name. </li>
<li>[x|y|z] - Example of three mutually exclusive choices within an optional element in the function name. </li>
</ul>
<div align="center">
<table width="700" cellpadding="2" cellspacing="0" border="0">
<tbody>
<tr>
<td align="left" valign="top">
<table width="300" cellpadding="2" cellspacing="0" border="0">
<tbody>
<tr>
<td>
<p><b>Signal Processing</b></p>
<pre>ippsAbs_{16s|32s|32f|64f}[_I] 
ippsAdd_{32f|32fc|64f|64fc}[_I] 
ippsAddC_{32f|64f}[_I] 
ippsAddProductC_32f 
ippsAddProduct_{32fc|64f|64fc} 
ippsAutoCorr_{32f|64f}
ippsConv_32f 
ippsConvert_{8s|8u|16s|16u|32s|64f}32f 
ippsConvert_{32s|32f}64f 
ippsConvert_32f{8s|8u|16s|16u}_Sfs 
ippsConvert_64f32s_Sfs 
ippsCopy_{16s|32s|32f|64f} 
ippsCrossCorr_{32f|64f} 
ippsDFTFwd_CToC_{32f|32fc|64f|64fc} 
ippsDFTFwd_RTo{CCS|Pack|Perm}_{32f|64f} 
ippsDFTInv_CCSToR_{32f|64f} 
ippsDFTInv_CToC_{32f|32fc|64f|64fc} 
ippsDFTInv_{Pack|Perm}ToR_{32f|64f} 
ippsDFTOutOrd{Fwd|Inv}_CToC_{32fc|64fc} 
ippsDiv[C]_32f[_I] 
ippsDotProd_32f64f 
ippsFFTFwd_CToC_{32f|32fc|64f|64fc}[_I] 
ippsFFTFwd_RTo{CCS|Pack|Perm}_{32f|64f}[_I] 
ippsFFTInv_CCSToR_{32f|64f}[_I] 
ippsFFTInv_CToC_{32f|32fc|64f|64fc}[_I] 
ippsFFTInv_{Pack|Perm}ToR_{32f|64f}[_I] 
ippsFIR64f_32f[_I] 
ippsFIR64fc_32fc[_I] 
ippsFIRLMS_32f 
ippsFIR_{32f|32fc|64f|64fc}[_I] 
ippsIIR32fc_16sc_[I]Sfs 
ippsIIR64fc_32fc[_I] 
ippsIIR_32f[_I] 
ippsLShiftC_16s_I 
ippsMagnitude_16sc_Sfs 
ipps{Min|Max}Indx_{32f|64f} 
ippsMul_32fc[_I] 
ippsMul[C]_{32f|32fc|64f|64fc}[_I] 
ippsMulC_64f64s_ISfs 
ipps{Not|Or}_8u 
ippsPhase_{16s|16sc|32sc}_Sfs 
ippsPowerSpectr_{32f|32fc} 
ippsRShiftC_16u_I 
ippsSet_{8u|16s|32s} 
ippsSqr_{8u|16s|16u|16sc}_[I]Sfs 
ippsSqr_{32f|32fc|64f|64fc}[_I] 
ippsSqrt_32f[_I] 
ippsSub_{32f|32fc|64f|64fc}[_I] 
ippsSubC_{32f|32fc|64f|64fc}[_I] 
ippsSubCRev_{32f|32fc|64f|64fc}[_I] 
ippsSum_{32f|64f} 
ippsThreshold_{32f|GT_32f|LT_32f}_[_I] 
ippsThreshold_{GT|LT}Abs_{32f|64f}[_I] 
ippsThreshold_GTVal_32f[_I] 
ippsWinBartlett_{32f|32fc|64f|64fc}[_I] 
ippsWinBlackman_{32f|64f|64fc}[_I] 
ippsWinBlackmanOpt_{32f|64f|64fc}[_I] 
ippsWinBlackmanStd_{32f|64f|64fc}[_I] 
ippsWinKaiser_{32f|64f|64fc}[_I] 
ippsZero_{8u|16s|32f}
</pre>
<p> </p>
</td>
</tr>
<tr>
<td>
<p><b>SPIRAL (GEN) Functions</b></p>
<pre>ippgDFTFwd_CToC_8_64fc ippgDFTFwd_CToC_12_64fc 
ippgDFTFwd_CToC_16_{32fc|64fc}
ippgDFTFwd_CToC_20_64fc
ippgDFTFwd_CToC_24_64fc
ippgDFTFwd_CToC_28_64fc 
ippgDFTFwd_CToC_32_{32fc|64fc}
ippgDFTFwd_CToC_36_64fc
ippgDFTFwd_CToC_40_64fc
ippgDFTFwd_CToC_44_64fc 
ippgDFTFwd_CToC_48_{32fc|64fc}
ippgDFTFwd_CToC_52_64fc 
ippgDFTFwd_CToC_56_64fc 
ippgDFTFwd_CToC_60_64fc 
ippgDFTFwd_CToC_64_{32fc|64fc} 
ippgDFTInv_CToC_8_64fc 
ippgDFTInv_CToC_12_64fc 
ippgDFTInv_CToC_16_{32fc|64fc} 
ippgDFTInv_CToC_20_64fc 
ippgDFTInv_CToC_24_64fc 
ippgDFTInv_CToC_28_64fc 
ippgDFTInv_CToC_32_{32fc|64fc} 
ippgDFTInv_CToC_36_64fc 
ippgDFTInv_CToC_40_64fc 
ippgDFTInv_CToC_44_64fc 
ippgDFTInv_CToC_48_{32fc|64fc} 
ippgDFTInv_CToC_52_64fc 
ippgDFTInv_CToC_56_64fc 
ippgDFTInv_CToC_60_64fc 
ippgDFTInv_CToC_64_{32fc|64fc}
</pre>
<p> </p>
</td>
</tr>
<tr>
<td align="left" valign="top">
<p><b>Audio Coding</b></p>
<pre>iippsDeinterleave_32f
</pre>
<p> </p>
</td>
</tr>
<tr>
<td align="left" valign="top">
<p><b>Speech Coding</b></p>
<pre>ippsAdaptiveCodebookSearch_RTA_32f
ippsFixedCodebookSearch_RTA_32f
ippsFixedCodebookSearchRandom_RTA_32f
ippsHighPassFilter_RTA_32f
ippsLSPQuant_RTA_32f
ippsLSPToLPC_RTA_32f
ippsPostFilter_RTA_32f_I
ippsQMFDecode_RTA_32f
ippsSynthesisFilter_G729_32f
</pre>
<p> </p>
</td>
</tr>
<tr>
<td align="left" valign="top">
<p><b>Color Conversion</b></p>
<pre>ippiRGBToHLS_8u_AC4R
ippiRGBToHLS_8u_C3R
</pre>
<p> </p>
</td>
</tr>
<tr>
<td>
<p><b>Realistic Rendering</b></p>
<pre>ipprCastEye_32f
ipprCastShadowSO_32f
ipprDot_32f_P3C1M
ipprHitPoint3DEpsM0_32f_M
ipprHitPoint3DEpsS0_32f_M
ipprMul_32f_C1P3IM
</pre>
<p> </p>
</td>
</tr>
<tr>
<td>
<p><b>Computer Vision</b></p>
<pre>ippiEigenValsVecs_[8u]32f_C1R 
ippiFilterGaussBorder_32f_C1R 
ippiMinEigenVal_[8u]32f_C1R 
ippiNorm_Inf_{8u|8s|16u|32f}_C{1|3C}MR 
ippiNorm_L1_{8u|8s|16u|32f}_C{1|3C}MR 
ippiNorm_L2_{8u|8s|16u|32f}_C{1|3C}MR 
ippiNormRel_L2_32f_C3CMR 
ippiUpdateMotionHistory_[8u|16u]32f_C1IR
</pre>
<p> </p>
</td>
</tr>
</tbody>
</table>
</td>
<td align="left" valign="top">
<table width="350" cellpadding="2" cellspacing="0" border="0">
<tbody>
<tr>
<td align="left" valign="top">
<p><b>Image Processing</b></p>
<pre>ippiAddC_32f_C1[I]R 
ippiConvert_32f* 
ippiCopy_16s* 
ippiCopy_8u* 
ippiConvFull_32f_{AC4|C1|C3}R 
ippiConvValid_32f_{AC4|C1|C3}R 
ippiCrossCorrFull_NormLevel_16u32f_{AC4|C1|C3|C4}R 
ippiCrossCorrFull_NormLevel_32f_{AC4|C1|C3|C4}R 
ippiCrossCorrFull_NormLevel_64f_C1R 
ippiCrossCorrFull_NormLevel_8s32f_{AC4|C1|C3|C4}R 
ippiCrossCorrFull_NormLevel_8u32f_{AC4|C1|C3|C4}R 
ippiCrossCorrFull_NormLevel_8u_{AC4|C1|C3|C4}RSfs 
ippiCrossCorrFull_Norm_16u32f_{AC4|C1|C3|C4}R 
ippiCrossCorrFull_Norm_32f_{AC4|C1|C3|C4}R 
ippiCrossCorrFull_Norm_8s32f_{AC4|C1|C3|C4}R 
ippiCrossCorrFull_Norm_8u32f_{AC4|C1|C3|C4}R 
ippiCrossCorrFull_Norm_8u_{AC4|C1|C3|C4}RSfs 
ippiCrossCorrSame_NormLevel_16u32f_{AC4|C1|C3|C4}R 
ippiCrossCorrSame_NormLevel_32f_{AC4|C1|C3|C4}R 
ippiCrossCorrSame_NormLevel_8s32f_{AC4|C1|C3|C4}R 
ippiCrossCorrSame_NormLevel_8u32f_{AC4|C1|C3|C4}R 
ippiCrossCorrSame_NormLevel_8u_{AC4|C1|C3|C4}RSfs 
ippiCrossCorrSame_Norm_16u32f_{AC4|C1|C3|C4}R 
ippiCrossCorrSame_Norm_32f_{AC4|C1|C3|C4}R 
ippiCrossCorrSame_Norm_8s32f_{AC4|C1|C3|C4}R 
ippiCrossCorrSame_Norm_8u32f_{AC4|C1|C3|C4}R 
ippiCrossCorrSame_Norm_8u_{AC4|C1|C3|C4}RSfs 
ippiCrossCorrValid_{8u32f|8s32f|16u32f|32f}_C1R 
ippiCrossCorrValid_NormLevel_16u32f_{AC4|C1|C3|C4}R 
ippiCrossCorrValid_NormLevel_32f_{AC4|C1|C3|C4}R 
ippiCrossCorrValid_NormLevel_64f_C1R 
ippiCrossCorrValid_NormLevel_8s32f_{AC4|C1|C3|C4}R 
ippiCrossCorrValid_NormLevel_8u32f_{AC4|C1|C3|C4}R 
ippiCrossCorrValid_NormLevel_8u_{AC4|C1|C3|C4}RSfs 
ippiCrossCorrValid_Norm_16u32f_{AC4|C1|C3|C4}R 
ippiCrossCorrValid_Norm_32f_{AC4|C1|C3|C4}R 
ippiCrossCorrValid_Norm_8s32f_{AC4|C1|C3|C4}R 
ippiCrossCorrValid_Norm_8u32f_{AC4|C1|C3|C4}R 
ippiCrossCorrValid_Norm_8u_{AC4|C1|C3|C4}RSfs 
ippiDCT8x8FwdLS_8u16s_C1R 
ippiDCT8x8Fwd_16s_C1[I|R] 
ippiDCT8x8Fwd_32f_C1[I] 
ippiDCT8x8Fwd_8u16s_C1R 
ippiDCT8x8InvLSClip_16s8u_C1R 
ippiDCT8x8Inv_16s8u_C1R 
ippiDCT8x8Inv_16s_C1[I|R] 
ippiDCT8x8Inv_2x2_16s_C1[I] 
ippiDCT8x8Inv_32f_C1[I] 
ippiDCT8x8Inv_4x4_16s_C1[I] 
ippiDCT8x8Inv_A10_16s_C1[I] 
ippiDCT8x8To2x2Inv_16s_C1[I] 
ippiDCT8x8To4x4Inv_16s_C1[I] 
ippiDFTFwd_CToC_32fc_C1[I]R 
ippiDFTFwd_RToPack_32f_{AC4|C1|C3|C4}[I]R 
ippiDFTFwd_RToPack_8u32s_{AC4|C1|C3|C4}RSfs 
ippiDFTInv_CToC_32fc_C1[I]R 
ippiDFTInv_PackToR_32f_{AC4|C1|C3|C4}[I]R 
ippiDFTInv_PackToR_32s8u_{AC4|C1|C3|C4}RSfs 
ippiDilate3x3_32f_C1[I]R 
ippiDilate3x3_64f_C1R 
ippiDivC_32f_C1[I]R 
ippiDiv_32f_{C1|C3}[I]R 
ippiDotProd_32f64f_{C1|C3}R 
ippiErode3x3_64f_C1R 
ippiFFTFwd_CToC_32fc_C1[I]R 
ippiFFTFwd_RToPack_32f_{AC4|C1|C3|C4}[I]R 
ippiFFTFwd_RToPack_8u32s_{AC4|C1|C3|C4}RSfs 
ippiFFTInv_CToC_32fc_C1[I]R 
ippiFFTInv_PackToR_32f_{AC4|C1|C3|C4}[I]R 
ippiFFTInv_PackToR_32s8u_{AC4|C1|C3|C4}RSfs 
ippiFilter_32f_{C1|C3|C4}R 
ippiFilter_32f_AC4R 
ippiFilter_64f_{C1|C3}R 
ippiFilter32f_{8s|8u|16s|16u|32s}_C{1|3|4}R 
ippiFilter32f_{8u|16s|16u}_AC4R 
ippiFilter32f_{8s|8u}16s_C{1|3|4}R 
ippiFilterBox_8u_{C1|C3}R 
ippiFilterBox_32f_{C1|C4|AC4}R 
ippiFilterColumn32f_{8u|16s|16u}_{C1|C3|C4|AC4}R 
ippiFilterColumn_32f_{C1|C3|C4|AC4}R 
ippiFilterGauss_32f_{C1|C3}R 
ippiFilterHipass_32f_{C1|C3|C4|AC4}R 
ippiFilterLaplace_32f_{C1|C3|C4|AC4}R 
ippiFilterLowpass_32f_{C1|C3|AC4}R 
ippiFilterMax_32f_{C1|C3|C4|AC4}R 
ippiFilterMedian_32f_C1R 
ippiFilterMin_32f_{C1|C3|C4|AC4}R 
ippiFilterRow_32f_{C1|C3|C4|AC4}R 
ippiFilterRow32f_{8u|16s|16u}_{C1|C3|C4|AC4}R 
ippiFilterSobelHoriz_32f_{C1|C3}R 
ippiFilterSobelVert_32f_{C1|C3}R 
ippiMean_32f_{C1|C3}R 
ippiMulC_32f_C1[I]R 
ippiMul_32f_{C1|C3|C4}[I]R 
ippiResizeSqrPixel_{32f|64f}_{C1|C3|C4|AC4}R 
ippiResizeSqrPixel_{32f|64f}_{P3|P4}R 
ippiSqrDistanceFull_Norm_16u32f_{AC4|C1|C3|C4}R 
ippiSqrDistanceFull_Norm_32f_{AC4|C1|C3|C4}R 
ippiSqrDistanceFull_Norm_8s32f_{AC4|C1|C3|C4}R 
ippiSqrDistanceFull_Norm_8u32f_{AC4|C1|C3|C4}R 
ippiSqrDistanceFull_Norm_8u_{AC4|C1|C3|C4}RSfs 
ippiSqrDistanceSame_Norm_16u32f_{AC4|C1|C3|C4}R 
ippiSqrDistanceSame_Norm_32f_{AC4|C1|C3|C4}R 
ippiSqrDistanceSame_Norm_8s32f_{AC4|C1|C3|C4}R 
ippiSqrDistanceSame_Norm_8u32f_{AC4|C1|C3|C4}R 
ippiSqrDistanceSame_Norm_8u_{AC4|C1|C3|C4}RSfs 
ippiSqrDistanceValid_Norm_16u32f_{AC4|C1|C3|C4}R 
ippiSqrDistanceValid_Norm_32f_{AC4|C1|C3|C4}R 
ippiSqrDistanceValid_Norm_8s32f_{AC4|C1|C3|C4}R 
ippiSqrDistanceValid_Norm_8u32f_{AC4|C1|C3|C4}R 
ippiSqrDistanceValid_Norm_8u_{AC4|C1|C3|C4}RSfs 
ippiSqrt_32f_C1R 
ippiSqrt_32f_C3IR 
ippiSubC_32f_C1[I]R 
ippiSub_32f_{C1|C3|C4}[I]R 
ippiSum_32f_C{1|3}R 
ippiTranspose_32f_C1R
</pre>
<p> </p>
</td>
</tr>
<tr>
<td>
<p><b>Image Compression</b></p>
<pre>ippiPCTFwd_JPEGXR_32f_C1IR 
ippiPCTFwd16x16_JPEGXR_32f_C1IR 
ippiPCTFwd8x16_JPEGXR_32f_C1IR 
ippiPCTFwd8x8_JPEGXR_32f_C1IR 
ippiPCTInv_JPEGXR_32f_C1IR_128 
ippiPCTInv16x16_JPEGXR_32f_C1IR 
ippiPCTInv8x16_JPEGXR_32f_C1IR 
ippiPCTInv8x8_JPEGXR_32f_C1IR
</pre>
<p> </p>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
<p>Those functions that have not been directly optimized for AVX (i.e., functions that do not appear in the table) have been compiled using the Intel Compiler "xG" switch (enable AVX optimization). Additional performance improvements are achieved by adherence to an AVX ABI (application binary interface) feature that inserts the special AVX "vzeroupper" instruction after any function with AVX code to eliminate any AVX to SSE transition penalties.</p>
<p>For those functions that are not directly optimized for AVX, the g9/e9 library utilizes optimizations from prior compatible SSE optimizations, such as those tuned for the p8/y8 libraries and preceding SIMD optimizations (e.g., SSE4.x, AES-NI and SSE2/3). Thus, functions not listed above will include the highest level of directly optimized code based on the AES-NI, SSE4.x, SSSE3, SSE3 and SSE2 SIMD instruction sets, wherever applicable.</p>
<p>For more information about the g9/e9 optimization layer and Intel AVX in the Intel IPP library, please refer to the <i><a target="_blank" href="http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-documentation/">Intel Integrated Performance Primitives for Windows* OS on Intel® 64 Architecture 'User's Guide'</a></i>.</p>
<p>Review <a href="http://software.intel.com/en-us/articles/how-to-compile-for-intel-avx/"><em>How to Compile for Intel® AVX</em></a> for more information and check out the <a href="http://software.intel.com/en-us/intel-parallel-studio-home/">Intel Parallel Studio web site</a> where you can learn more about the tools available to develop, debug, and tune your multi-threaded applications.</p>
<p>
<table cellpadding="5" cellspacing="0" rules="none" border="1">
<tbody>
<tr>
<th align="left" valign="middle" >Optimization Notice</th>
</tr>
<tr bgcolor="#ccecff">
<td>
<p>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.</p>
<p align="right">Notice revision #20110804</p>
</td>
</tr>
</tbody>
</table>
</p> ]]></description>
      <link>http://software.intel.com/en-us/articles/intel-ipp-functions-optimized-for-intel-avx-intel-advanced-vector-extensions/</link>
      <pubDate>Mon, 31 Jan 2011 09:00:00 -0800</pubDate>
      <comments>http://software.intel.com/en-us/articles/intel-ipp-functions-optimized-for-intel-avx-intel-advanced-vector-extensions/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/intel-ipp-functions-optimized-for-intel-avx-intel-advanced-vector-extensions/</guid>
      <category>Intel® Integrated Performance Primitives Knowledge Base</category>
    </item>
    <item>
      <title>Using Intel® IPP with OpenCV 2.1</title>
      <description><![CDATA[ <p class="Default"><b>Introduction</b></p>
<p class="Default">Intel<sup>®</sup> Integrated Performance Primitives (Intel<sup>®</sup> IPP) is an extensive library of multicore-ready, highly optimized software functions for digital media and data-processing applications. Intel<sup>®</sup> IPP offers thousands of optimized functions covering frequently-used fundamental algorithms. Intel IPP functions are designed to deliver performance beyond what optimized compilers alone can deliver. More information about IPP can be retrieved at <a href="http://www.intel.com/software/products/ipp/index.htm">http://www.intel.com/software/products/ipp/index.htm</a>.</p>
<p class="Default">OpenCV is an acronym for Open Source Computer Vision Library. The library is a well-known software library in computer vision for both academic and commercial use.  It is free, open source software and provides developers an easy way to input, display and store video and images, and also provides over 500 routines for computer vision processing, image processing, face detection and tracking, machine learning, etc. More information about OpenCV can be found at <a href="http://opencv.willowgarage.com/wiki/FullOpenCVWiki">http://opencv.willowgarage.com/wiki/FullOpenCVWiki</a>.</p>
<p class="Default">In early OpenCV versions, OpenCV was automatically accelerated by taking advantage of Intel® Integrated Performance Primitives (Intel® IPP). However, the latest OpenCV version 2.1.0 doesn't incorporate Intel® IPP by default, thus the performance benefit of Intel® IPP functions which are optimized via the Streaming SIMD Extensions (SSE, SSE, SSE2, SSE3, SSSE3, SSE4, SSE4.1, SSE4.2, and Intel® AVX in latest) instructions, cannot be obtained automatically.</p>
<p class="Default">With the technical notes, we will show how to use Intel® IPP with latest OpenCV as well as how to integrate Intel® IPP into OpenCV.  Two test cases are provided to demonstrate the details.</p>
<ul>
<li>
<div class="Default"><b>Use Intel® IPP library and OpenCV library independently </b><br />Test case: transpose a image via cvRemap and ippiRemap</div>
</li>
<li>
<div class="Default"><b>Integrate Intel® IPP library into OpenCV library </b><b>and <a name="IPP_OPenCV_Intergrate_Use"></a>use OpenCV with built-in Intel® IPP <br /></b>Test case: Measures image similarity via cvMatchTemplate() with default OpenCV library and OpenCV library with built-in-IPP</div>
</li>
<li>
<div class="Default"><b>Compare OpenCV, OpenCV with built-in Intel®</b><b> IPP,  and Intel®</b><b> IPP</b><b> <br /></b>Perfromance test: cvMatchTemplate() in OpenCV and in OpenCV with built-in Intel® IPP,  ippiCrossCorrValid_Norm()<br /><br />Attached the documentation and test case. <br /><b><a href="http://software.intel.com/file/33161" onclick="function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick(){function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { ndownload('http://software.intel.com/file/33161') } } } } } } } } } } } } } } }} } } } } } } } } } } } } } } }"><span >OpenCV_ApplicationNotes.pdf</span></a><span >, <br /></span><b><a href="http://software.intel.com/file/33275" onclick="function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick(){function onclick(){function onclick() { function onclick(){function onclick(){function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { ndownload('http://software.intel.com/file/33163') } } } } } } } } } } } }}} }}} } } } } } } } } } } }"><span >ImageTranspose.cpp</span></a><span >,</span> <br /></b></b><b><a href="http://software.intel.com/file/33274" onclick="function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick(){function onclick(){function onclick() { function onclick(){function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { ndownload('http://software.intel.com/file/33164') } } } } } } } } } } }} }}} } } } } } } } } } } }"><span >correlation_ipp_opencv.cpp</span></a><span >, <br /></span>Sample in Microsoft Visual Studio 2008 and Intel® VTune Amplifer XE 2011<br /></b><b><a href="http://software.intel.comjavascript:void(0)" onclick="function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { function onclick() { ndownload('http://software.intel.com/file/33165') } } } } } } } } } } } } } } } } } } } } } } } }"><span >IPP_OpenCV2.1_Sample.zip</span></a> (See attached zip file)</b><br />
<p class="Default"><b><br />Summary</b></p>
<p class="Default">Intel® IPP is a software library provided by Intel® software group. It offers over 10K highly optimized fundamental functions for multimedia, data and image processing application. OpenCV is free and open for both non-commercial and commercial use. It provides cross-platform middle-to-high level functions for popular computer vision algorithms. OpenCV can be built with Intel® Integrated Performance Primitives (IPP). This makes it fast on all the architectures supported by the library, where the optimal code for each host architecture is chosen at runtime.</p>
<p class="Default">In this paper, we showed how to integrate Intel® IPP into OpenCV step by step. With the two samples, we also discovered how OpenCV library with built-in Intel® IPP works, demonstrated how to use Intel® IPP with latest OpenCV library as well as how to use OpenCV with built-in Intel® IPP. In summary, the OpenCV library supports more computer vision algorithms than the Intel IPP library. Intel IPP library provides low-level but high performance basic image and video processing functions. We can use them as two independent libraries. However, it is convenient to integrate IPP and OpenCV via OpenCV build process and the Have_IPP flag. Thus we can benefit Intel IPP integrated into the OpenCV library automatically. In regard to the performance of routines with the same functionality in Intel® IPP and OpenCV, the direct IPP function call has the best performance. It is about <b>5x</b> faster than the default OpenCV library and <b>2.21x</b> the OpenCV library with built-in ipp under two cores @2.13G.  Taking considering of the fact of OpenCV itself can be built in parallel and OpenCV also includes SSE2-optimized code for many of functions, we recommend using OpenCV with calls to stand alone Intel® IPP, or OpenCV with built-in Intel IPP according to the application's feature and performance requirements. <a name="_GoBack"></a></p>
<p class="Default"> </p>
Refer to our <a href="http://software.intel.com/en-us/articles/optimization-notice/">Optimization Notice</a> for more information regarding performance and optimization choices in Intel software products.</div>
</li>
</ul>
<table cellpadding="5" cellspacing="0" rules="none" border="1">
<tbody>
<tr>
<th align="left" valign="middle" >Optimization Notice</th>
</tr>
<tr bgcolor="#ccecff">
<td>
<p>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.</p>
<p align="right">Notice revision #20110804</p>
</td>
</tr>
</tbody>
</table>
 ]]></description>
      <link>http://software.intel.com/en-us/articles/using-intel-ipp-with-opencv/</link>
      <pubDate>Sun, 05 Dec 2010 09:00:00 -0800</pubDate>
      <comments>http://software.intel.com/en-us/articles/using-intel-ipp-with-opencv/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/using-intel-ipp-with-opencv/</guid>
      <category>Intel® Integrated Performance Primitives Knowledge Base</category>
    </item>
    <item>
      <title>A Tool for Listing the Intel IPP Functions used by Your Application</title>
      <description><![CDATA[ <blockquote>
<p><strong>20 sep 2011 – article update</strong> – the ZIP file has been updated to include a missing DLL and it also now contains both AWK and GAWK executables. If you already have the necessary UNIX utilities on your Windows system (e.g., Cygwin or MinGW) you may not need the contents of the ZIP file. <em><strong>In any case please download the "ipp-fn-survey.awk" script file, it is required regardless of the UNIX utilities you use to run the script!</strong></em> On Windows, this AWK script has only been verified against the old GnuWin32 utils provided here. The GnuWin32 utils distributed in the attached ZIP file can be found here: <a href="http://gnuwin32.sourceforge.net/packages.html" title="http://gnuwin32.sourceforge.net/packages.html">http://gnuwin32.sourceforge.net/packages.html</a>.</p>
</blockquote>
<p>In the interest of developing a list of "most frequently used" functions by customers of the Intel IPP library, we have created a simple <a href="http://software.intel.com/file/31656">AWK script</a> that can be used on either a Windows or Linux system to extract the names of the Intel IPP functions used in your application, without having to reveal any of your application source.</p>
<p>The number of Intel IPP functions present in the library is quite large; as a result, optimizing the entire library for new SIMD architectures must be performed in phases. In general, we would like to optimize first those functions that are most popular and relevant to our customers, in order to insure that your applications receive the maximum benefit as new SIMD architectures and/or extensions to those architectures are introduced.</p>
<p>Attached to this KB article are two files:</p>
<ul>
<li><a target="_blank" href="http://software.intel.com/file/31656">ipp-fn-survey.awk</a> </li>
<li><a target="_blank" href="http://software.intel.com/file/38595">GnuWin32-utils.zip</a> </li>
</ul>
<p>The AWK script scans C/C++ source code to identify any function that conforms to the standard naming scheme used by the Intel IPP library. This AWK script is provided in source format, so you can inspect the script to determine exactly what it does.</p>
<p>In essence, this script:</p>
<ol>
<li>removes /* */ and // style comments to avoid false detects within comments </li>
<li>removes " " string constants to avoid false detects within strings </li>
<li>searches for and lists the names of all Intel IPP "core" functions </li>
<li>searches for and lists the names of all Intel IPP "administrative" functions </li>
</ol>
<p>The script is not perfect and may miss a few Intel IPP functions. Please see the comments inside the AWK script for more details on known or suspected issues.</p>
<blockquote>
<p>If the source tree you scan includes the IPP header files (ippac.h, ippcc.h, ippch.h, etc.) be sure to exclude those files from the search; otherwise, you will include every IPP function listed in those headers, even if you are not using them in your source code.</p>
</blockquote>
<p class="sectionHeading">Basic Operation on Windows:</p>
<p>To run this script on a Windows machine you will need a copy of the GnuWin32 GAWK application (or a compatible AWK). In order to build a concise and sorted list of the Intel IPP functions used within your application it is also helpful to utilize the UNIX-compatible find, sort and uniq functions. All of these functions are provided in the <a target="_blank" href="http://software.intel.com/file/38595">GnuWin32-utils.zip attachment</a> to this KB article. With the GnuWin32 applications installed on your Windows system, use the following command line:</p>
<p>&gt;find src_dir -regex ".+\.[ch]p*" -exec gawk -f ipp-fn-survey.awk {} ; | sort | uniq &gt;ipp-survey.txt</p>
<p>where "src_dir" is the root of the directory you wish to scan source for names of IPP functions -- simplest way to do this is to copy the AWK file and the contents of the ZIP file (GnuWin32-utils-zip) to "src_dir" and type:</p>
<p>&gt;find . -regex ".+\.[ch]p*" -exec gawk -f ipp-fn-survey.awk {} ; | sort | uniq &gt;ipp-survey.txt</p>
<blockquote>
<p>Note: on a Windows system "find" needs to be a UNIX compatible version of find, not the Microsoft find. To avoid name conflicts with the Microsoft find.exe you might need to rename the GnuWin32 "find.exe" file to "uxfind.exe" and then run the samples above by referencing "uxfind" rather than "find" at the beginning of each script execution command.</p>
</blockquote>
<p>If you used the command line above, the results of the scan will be found in the file named "ipp-survey.txt" in the starting directory.</p>
<p class="sectionHeading">Basic Operation on Linux:</p>
<p>To run this script on a Linux machine you will need the standard Gnu AWK, find, sort, uniq and xargs utilities that are normally present on your Linux system. Use the following command line:</p>
<p>$find src_dir -iregex ".+\.[ch]p*" | xargs ./ipp-fn-survey.awk | sort | uniq &gt;ipp-survey.txt</p>
<p>where "src_dir" is the root of the directory you wish to scan source for names of IPP functions -- simplest way to do this is to copy this AWK file to the "src_dir" and type:</p>
<p>$find . -regextype posix-awk -iregex ".+\.[ch]p*" | xargs ./ipp-fn-survey.awk | sort | uniq &gt;ipp-survey.txt</p>
<blockquote>
<p>Note: GAWK on some Linux systems may not honor IGNORECASE -- resulting in a few false finds. Also, make sure the "executable" bits are set properly on the AWK script.</p>
</blockquote>
<p>If you used the command line above, the results of the scan will be found in the file named "ipp-survey.txt" in the starting directory.</p>
<blockquote>
<p>On some Linux systems you may not have gawk but awk installed on your system. The first line of the ipp-fun-survey.awk file references /usr/bin/gawk as the script interpreter. If your system instead only contains /usr/bin/awk you need to change that first line. To determine which application is on your system type "which gawk" at a command prompt. If nothing is returned type "which awk" at the command line. If your system only contains awk, or the application is located someplace other than /usr/bin, you will have to edit the first line of the ipp-fn-survey.awk script.</p>
</blockquote>
<p class="sectionHeading">Terms and Conditions</p>
<p>This script will not reveal any source code or parameter names, only the names of the IPP functions referenced in the source code that it scans.</p>
<blockquote>
<p><strong>Note</strong> that this script is being provided under <a href="http://software.intel.com/sites/products/documentation/EULA/Intel_SW_Dev_Products_EULA.pdf"><strong>the terms and conditions of the Intel IPP EULA.</strong></a> Please <em>insure you agree to those terms</em> before using the script to provide us with a list of the Intel IPP primitives you are using.</p>
</blockquote>
<p>If you are able to run this script (or something similar) on your application source code and generate a list of IPP functions that you would like to share with us, please reply to this posting (using the private option, if you prefer) with some information about your company and your application, as well as the list of Intel IPP functions created by the script or an email address you may use to contact you directly. Your input is very valuable for the prioritization of future optimizations within the Intel IPP library.</p> ]]></description>
      <link>http://software.intel.com/en-us/articles/a-tool-for-listing-ipp-apis-used-by-your-application/</link>
      <pubDate>Tue, 19 Oct 2010 00:00:00 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/a-tool-for-listing-ipp-apis-used-by-your-application/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/a-tool-for-listing-ipp-apis-used-by-your-application/</guid>
      <category>Intel® Integrated Performance Primitives Knowledge Base</category>
    </item>
    <item>
      <title>Understanding SIMD Optimization Layers and Dispatching in the Intel® IPP 7.0 Library</title>
      <description><![CDATA[ <p>This article describes the Intel® Integrated Performance Primitives (Intel® IPP) optimization layers present in the 7.0 version of the library. The article titled <a target="_blank" href="http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-intel-ipp-understanding-cpu-optimized-code-used-in-intel-ipp/"><em>Understanding CPU Dispatching in the Intel® IPP Library</em></a> describes the same features for previous versions of the library (5.3 thru 6.1).</p>
<blockquote>
<p><strong>IMPORTANT!</strong> <em>The minimum SIMD instruction levels supported by version 7.0 of the Intel IPP library has changed!</em> Applications built with this version of the library require that processors must support at least the Intel® Streaming SIMD Extensions 2 (Intel® SSE2) instruction set when built for Intel IA-32 processors (ia32) and the Intel® Streaming SIMD Extensions 3 (Intel® SSE3) instruction set when built for Intel® 64 processors (intel64). The non-optimized layers of the library (px on ia32 and mx on intel64) have been removed; the w7 and m7 optimization layers are now the <em>default</em> optimization layers.</p>
</blockquote>
<p>The standard distribution of the Intel IPP library contains multiple, functionally-identical, SIMD-specific, optimized libraries (or layers) that are automatically “dispatched” at run-time. The “dispatcher” directs your calls to the appropriate optimized library layer based on SIMD capabilities discovered during library initialization. This is done to maximize each function’s use of the runtime processor's underlying SIMD instructions and other architecture-specific features.</p>
<blockquote>
<p>Note: you can build custom processor-specific libraries that do not require the dispatcher, but that is outside the scope of this article. Please read this <a href="http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-intel-ipp-intel-ipp-linkage-models-quick-reference-guide/">IPP linkage models article</a> for information on how to build custom versions of the IPP library.</p>
</blockquote>
<p>Dispatching selects the Intel IPP optimized library layer that corresponds to the runtime CPU's SIMD instruction set. For example, on a Windows installation, the <em>$(IPPROOT)\..\redist\intel64\ipp</em> directory contains a file named <em >ippiu8-7.0.dll</em> which contains version ‘7.0’ of the optimized image processing libraries for processors that support the Intel SSE3 instructions on 64-bit processors; ‘ippi’ denotes the image processing domain, ‘u8’ denotes the SSSE3 instructions set for 64-bit processors and ‘7.0’ denotes the library’s version number.</p>
<p>In the general case, the “dispatcher” identifies the run-time processor only once, at library initialization time, and sets up a variable internal to the library that directs your calls to the SIMD-specific functions that match the runtime processor. For example, <em>ippsCopy_8u()</em>, has multiple implementations stored in the library, with each version optimized to a specific SIMD instruction set. The <em>u8_ippsCopy_8u()</em> version of <em>ippsCopy_8u()</em> is called by the dispatcher when running on an Intel® Core 2 Duo® processor in 64-bit addressing mode, because <em>u8_ippsCopy_8u()</em> is optimized for the SSSE3 instruction set architecture supported by that processor in 64-bit addressing mode.</p>
<blockquote>
<p>Note: IPP architectures generally correspond to SIMD (MMX, SSE, AES, etc.) instructions sets, with some minor variations (see the p8 and y8 optimization layers).</p>
</blockquote>
<p><b>Initializing the IPP Dispatcher</b></p>
<p>Identifying the runtime processor and initializing the dispatcher should be the first action you take with the Intel IPP library. If you are using the standard dynamic link library this process is handled automatically when the Intel IPP shared library is initialized. If you are using a static library you must perform this step manually. <a href="http://software.intel.com/en-us/articles/ipp-dispatcher-control-functions-ippinit-functions/">See this article on the ipp*Init*() functions</a> for more information on how to do this.</p>
<p>Because the minimum SIMD instruction set is SSE2 on IA-32 and SSE3 on Intel 64 processors it is recommended that you <em>ALWAYS</em> call the the <code>ippInit()</code> function before making any other calls to the Intel IPP library. This advice applies regardless of whether you are linking against the static or dynamic form of the library (even though the dynamic library will also perform this call). <br /><br />Calling the <code>ippInit()</code> function with the shared libraries (DLL and SO) will generate an error message to a dialog box or error console if the <code>ippInit()</code> function detects that the runtime CPU is not supported by the Intel IPP library. Calling the <code>ippInit()</code> function in the static versions of the library will not generate a console or dialog message. Both versions of the <code>ippInit()</code> function will return an error code when a non-supported CPU is detected.</p>
<blockquote>
<p>It is important that you call the <code>ippInit()</code> function at the beginning of your application to insure that the processor on which your application is running will support the Intel IPP library. If the <code>ippInit()</code> function returns an error code you should close your application gracefully in order to avoid an unexpected termination of your application by an <em>invalid instruction fault</em> because your application is running on an unsupported processor.</p>
</blockquote>
<p>The following table lists the SIMD architecture codes supported by version 7.0 of the Intel IPP library.</p>
<table width="700" cellpadding="0" cellspacing="0" border="1">
<tbody>
<tr>
<td width="114"><strong>Platform</strong></td>
<td width="84" ><strong>Architecture</strong></td>
<td width="238"><strong>SIMD Requirements</strong></td>
<td width="163"><strong>Processor / µarchitecture</strong></td>
<td width="100"><strong>Notes</strong></td>
</tr>
<tr>
<td>IA-32</td>
<td >w7</td>
<td>SSE2</td>
<td>P4, Xeon, Centrino</td>
<td>SSE2 default</td>
</tr>
<tr>
<td></td>
<td >v8</td>
<td>Supplemental SSE3</td>
<td>Core 2, Xeon® 5100, Atom</td>
<td></td>
</tr>
<tr>
<td></td>
<td >s8</td>
<td>Supplemental SSE3 (<a href="http://software.intel.com/en-us/articles/new-atom-support/">compiled for Atom</a>)</td>
<td>Atom</td>
<td></td>
</tr>
<tr>
<td></td>
<td >p8</td>
<td>SSE4.1, SSE4.2 and AES-NI</td>
<td>Penryn, Nehalem, Westmere</td>
<td>see next section</td>
</tr>
<tr>
<td></td>
<td >g9</td>
<td><a href="http://www.intel.com/software/avx">AVX</a></td>
<td>Sandy Bridge µarchitecture</td>
<td></td>
</tr>
<tr>
<td></td>
<td ></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Intel® 64 (EM64T)</td>
<td >m7</td>
<td>SSE3</td>
<td>Prescott</td>
<td>SSE3 default</td>
</tr>
<tr>
<td></td>
<td >u8</td>
<td>Supplemental SSE3</td>
<td>Core 2, Xeon® 5100, Atom</td>
<td></td>
</tr>
<tr>
<td></td>
<td >n8</td>
<td>Supplemental SSE3 (<a href="http://software.intel.com/en-us/articles/new-atom-support/">compiled for Atom</a>)</td>
<td>Atom</td>
<td></td>
</tr>
<tr>
<td></td>
<td >y8</td>
<td>SSE4.1, SSE4.2, AES-NI</td>
<td>Penryn, Nehalem, Westmere</td>
<td>see next section</td>
</tr>
<tr>
<td></td>
<td >e9</td>
<td><a href="http://www.intel.com/software/avx">AVX</a></td>
<td>Sandy Bridge µarchitecture</td>
<td></td>
</tr>
</tbody>
</table>
<p><br />For non-Intel based processors support, please read <a target="_blank" href="http://software.intel.com/en-us/articles/use-ipp-on-amd-processor/"><em>Use Intel® IPP on Intel or Compatible AMD* Processors</em></a>.</p>
<p>If you compare this dispatch table above to the <a target="_blank" href="http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-intel-ipp-understanding-cpu-optimized-code-used-in-intel-ipp/">5.3 thru 6.1 dispatch table</a> you will note that the Intel SSE3 optimization layer (t7) has been removed from the 32-bit edition (ia32) of the library. 32-bit applications built with the 7.0 version of the library that execute on an SSE3 processor will automatically use the Intel SSE2 optimization layer (w7). In most cases, the impact of this change is minor, since the performance difference between the Intel SSE3 (t7) and Intel SSE2 (w7) optimization layers in the Intel IPP library is minimal. Processors that support the Intel SSSE3 instruction set (v8 and s8 optimization layers) are not affected by this change. (Note: this change does not impact applications built using the 64-bit edition of the library, which now uses the Intel SSE3 optimization layer (m7) as its default path.)</p>
<p><b>P8/Y8 Internal Run-Time Dispatcher</b></p>
<p>Within the 32-bit p8 and equivalent 64-bit y8 architectures there is an additional "runtime dispatcher," a mini-dispatcher. The Nehalem and Westmere processor microarchitectures add additional SIMD instructions beyond those defined by SSE4.1. The Nehalem processor microarchitecture added SSE4.2 SIMD instructions and the Westmere processor microarchitecture added Inte® AES-NI.</p>
<p>Creating two separate optimization layers within the IPP library for the small set of instructions added by SSE4.2 and AES-NI would be very space inefficient, so they are bundled into the SSE4.1 library (p8/y8) as minor variants to that optimization layer. When you call a function that includes, for example, AES-NI optimizations, an additional jump directs your call to the AES-NI version within the p8/y8 library if your runtime processor supports these instructions. Because the enhancements affect the optimization of only a small number of Intel IPP functions, this additional overhead occurs infrequently and only when your application is executing on a p8/y8 architecture processor that supports these extra instructions.</p>
<p><b>S8/N8 (Atom) Dispatch</b></p>
<p>Unlike preceding versions of the library, the 7.0 version of the Intel IPP library <em>does</em> include Atom-optimized variants of the library within all formats (static and dynamic) of the library. For this reason, the Linux distribution of the 7.0 version of the Intel IPP library no longer includes a separate Atom-specific version of the library, since Atom-specific optimizations have been fully merged into all formats of the standard library files. <br /><br />Please read <a href="http://software.intel.com/en-us/articles/new-atom-support/"><em>Intel® Atom™ Processors Support in the Intel® Integrated Performance Primitives (Intel® IPP) Library</em></a> for more information regarding Atom optimizations in the IPP library.</p>
<p><strong>Processor Architecture Table</strong></p>
<p><span >The following table was copied from an <a target="_blank" href="http://software.intel.com/en-us/articles/performance-tools-for-software-developers-intel-compiler-options-for-sse-generation-and-processor-specific-optimizations/" >Intel Compiler Pro options article</a> describing some compiler architecture options. It contains a list of Intel processors showing which processors support which SIMD instructions. For the latest table please refer to the original article; it gets updated on a regular basis. Please note that the behavior of the Intel Compiler SIMD dispatcher described in <a target="_blank" href="http://software.intel.com/en-us/articles/performance-tools-for-software-developers-intel-compiler-options-for-sse-generation-and-processor-specific-optimizations/" >that article</a> does not apply to the Intel IPP library.</span></p>
<blockquote>The Intel IPP library dispatching mechanism behaves differently than that found in the Intel Compiler products, and may also behave differently than other Intel library products.</blockquote>
<p>Additional information regarding dispatching and how it relates to <a target="_blank" href="http://software.intel.com/en-us/articles/use-ipp-on-amd-processor/">non-Intel processors can be found here</a>. How to identify your specific processor is <a target="_blank" href="http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-intel-ipp-is-there-any-function-to-detect-processor-type/">described here</a>. To correlate a processor family name with an Intel CPU brand name, use the following web site: <a target="_blank" href="http://ark.intel.com/">ark.intel.com</a>.</p>
<p><b><b>SSE</b>4.2</b><br />Intel® Core™ i7 processors<br />Intel® Core™ i5 processors<br />Intel® Core™ i3 processors<br />Intel® Xeon® 55XX series</p>
<p><b><b>SSE</b>4.1<br /></b>Intel® Xeon® 74XX series<br />Quad-Core Intel® Xeon 54XX, 33XX series<br />Dual-Core Intel® Xeon 52XX, 31XX series<br />Intel® Core™ 2 Extreme 9XXX series<br />Intel® Core™ 2 Quad 9XXX series<br />Intel® Core™ 2 Duo 8XXX series<br />Intel® Core™ 2 Duo E7200</p>
<p><b><b>SSSE</b>3</b><br />Quad-Core Intel® Xeon® 73XX, 53XX, 32XX series<br />Dual-Core Intel® Xeon® 72XX, 53XX, 51XX, 30XX series<br />In tel® Core™ 2 Extreme 7XXX, 6XXX series<br />Intel® Core™ 2 Quad 6XXX series<br />Intel® Core™ 2 Duo 7XXX (except E7200), 6XXX, 5XXX, 4XXX series<br />Intel® Core™ 2 Solo 2XXX series<br />Intel® Pentium® dual-core processor E2XXX, T23XX series</p>
<p><b><b>SSE</b>3</b><br />Dual-Core Intel® Xeon® 70XX, 71XX, 50XX Series<br />Dual-Core Intel® Xeon® processor (ULV and LV) 1.66, 2.0, 2.16<br />Dual-Core Intel® Xeon® 2.8<br />Intel® Xeon® processors with SSE3 instruction set support<br />Intel® Core™ Duo<br />Intel® Core™ Solo<br />Intel® Pentium® dual-core processor T21XX, T20XX series<br />Intel® Pentium® processor Extreme Edition<br />Intel® Pentium® D<br />Intel® Pentium® 4 processors with SSE3 instruction set support</p>
<p><b><b>SSE</b>2</b><br />Intel® Xeon® processors<br />Intel® Pentium® 4 processors<br />Intel® Pentium® M</p>
<p><b>IA32</b><br />Intel® Pentium® III Processor<br />Intel® Pentium® II Processor<br />Intel® Pentium® Processor</p>
<p>
<table cellpadding="5" cellspacing="0" rules="none" border="1">
<tbody>
<tr>
<th align="left" valign="middle" >Optimization Notice</th>
</tr>
<tr bgcolor="#ccecff">
<td>
<p>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.</p>
<p align="right">Notice revision #20110804</p>
</td>
</tr>
</tbody>
</table>
</p>
<br />*Other names and brands may be claimed as the property of others. ]]></description>
      <link>http://software.intel.com/en-us/articles/understanding-simd-optimization-layers-and-dispatching-in-the-intel-ipp-70-library/</link>
      <pubDate>Mon, 04 Oct 2010 09:00:00 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/understanding-simd-optimization-layers-and-dispatching-in-the-intel-ipp-70-library/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/understanding-simd-optimization-layers-and-dispatching-in-the-intel-ipp-70-library/</guid>
      <category>Intel® Integrated Performance Primitives Knowledge Base</category>
    </item>
    <item>
      <title>Accelerate Your Application via IPP Image Processing in Parallel Studio - C code vs. IPP Resize</title>
      <description><![CDATA[ <p align="left"><strong>Summary</strong><br />Intel®<strong> </strong>Parallel Studio 2011 release recently. IPP as one key component of Intel®<strong> </strong>Parallel Composer provide user a easy and faster way to accelarate digital application. This article shows how to employ IPP image processing function to develop parallel ready application and provide a sample to shows the performance difference between IPP and general C code on resizing image, which is wide-used functionality in image processing field. Test show that the IPP function can run 44x faster than corresponding C code. If enabling parallel, the speed up will high 50x on Core 2 Quad 2.66GHz machine. <br /><br /><a href="http://software.intel.com/file/29998"><strong>Attached</strong></a> is the sample project, one Parallel Composer 2011 project in MicroSoft Visual Studio 2005 IDE. <br />Some developers may install Intel Parallel Composer with Microsoft Visual Studio 2010. <a href="http://software.intel.com/file/32831"><strong>Here</strong></a> is the project. <br /><b><br />How to build the Sample</b></p>
<p>1. Build system requirement</p>
<p>Software:<br />•   <a href="http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-intel-ipp-for-windows-compiling-and-linking-with-microsoft-visual-c-and-intel-c-compilers/#10#10">Intel Parallel Studio 2011 and Microsoft* Visual Studio 2005 and later</a><br />•   (optional)  install static ipp library separately from http://software.intel.com/en-us/articles/intel-ipp-static-libraries/ <b></b></p>
<p>Hardware:  The latest dual-core/Quad Core machine with Windows xp/Windows Vista/Windows 7</p>
<p>2. Download and Unzip the Resize_Image_PS_VS2005.zip to a directory, let's name &lt;WorkDIR&gt;</p>
<p>3. Go to &lt;WorkDIR&gt; and double click the Resize Image.sln.  The msvc2005 IDE will prompt automatically.</p>
<p>4. From the <b>main toolbar</b> select <b>Project&gt;&gt;</b> <b>Intel Parallel Composer 2011 »</b> <b>Select Build Component.</b></p>
<p>(or right-click the Project in Solution Explorer) , check <b>Use IPP. </b>click OK<b></b></p>
<p>5. Then build the application, from the <b>main toolbar</b> select<strong> Build &gt;&gt; Build solution<br /></strong><br />Please see the build details in<strong>  </strong><a href="http://software.intel.com/en-us/articles/use-intel-ipp-in-intel-parallel-composer/"><strong>Use Intel IPP in Intel® Parallel Composer</strong></a></p>
<p><b>How to run the application</b> </p>
<p>1. Run the application<br />From the <strong>main toolbar</strong>, select <b>Debug</b> &gt;&gt;<strong> Start Without Debugging. </strong>The application windows start, Click Open File, Select LennaC1.bmp <br /><strong><img src="http://software.intel.com/file/29994" alt="ReadLenna.JPG" title="ReadLenna.JPG" /></strong></p>
<p>2. click menu "Process =&gt; Resize image" to Resize the image. <br /> Enter the zoom factor in horizontal (x) and vertical (y) directory in Resize dialog box.  Click OK  <img src="http://software.intel.com/file/29995" alt="Process.JPG" title="Process.JPG" /></p>
<p>3: Click lennC1.bmp and repeat step 2 again, make sure click button USE_IPP. Then get the below image  <strong><img src="http://software.intel.com/file/29997" alt="result1.JPG" title="result1.JPG" /></strong></p>
<p><b>IPP Function Adoption: <br /></b>Assume the sample is the application we want to improve the performance via IPP function.  <br />1.  Find the c code resize image function in RESIZE.cpp</p>
<p>unsigned long C_Code_Resize(unsigned char * src, int srcWidth, int srcHeight,   int srcStep, unsigned char* dst, int dstWidth, int dstHeight, int dstStep, double m_zoom_x, double m_zoom_y, int interpolation)</p>
<p> It is called by function ProcessImage(CSampleDoc *pSrc) in ippiAddC.cpp<br /><br />2. Check ipp manual ippiman.pdf and find the function ippiResizeSqrPixel have same functionality.  Then replace the C function with IPP function.   <br />Declare a similiar function in RESIZE.cpp<br />unsigned long IPP_Resize( void* src, int srcWidth, int srcHeight,int srcStep,  void* dst,  int dstWidth, int dstHeight, int dstStep, double m_nzoom_x, double m_nzoom_y, int interpolation)</p>
<p align="left"> And call it in ProcessImage(CSampleDoc *pSrc) in ippiAddC.cpp instead of call C_Code_Resize().  (In order to compare the performance, we keep the c function call here.)</p>
<p> if (m_USE_IPP)<br />{<br />             ippStaticInit();<br />       //---- perform IPP Funtion Code to rotate a image  -----//<br />         run_time = IPP_Resize(pSrc-&gt;DataPtr(),pSrc-&gt;Width(),pSrc-&gt;Height(),pSrc-&gt;Step(),(Ipp8u*)pDst-&gt;DataPtr(),        pDst-&gt;Width(),pDst-&gt;Height(),pDst-&gt;Step(),m_zoom_x,m_zoom_y,m_Interpolation);<br />}<br />else{         //---- perform C Code to rotate a image  -----//<br />         run_time = C_Code_Resize((unsigned char *)pSrc-&gt;DataPtr(),pSrc-&gt;Width(),<br />         pSrc-&gt;Height(),pSrc-&gt;Step(), (unsigned char *)pDst-&gt;DataPtr(), pDst-&gt;Width(),pDst-&gt;Height(),pDst-&gt;Step(),m_zoom_x,m_zoom_y,m_Interpolation);<br />}     <br /><br />3. Write the IPP code to replace the C code.  The table show the original C code and the IPP code </p>
<p>
<table width="588" cellpadding="0" cellspacing="0" border="1">
<tbody>
<tr>
<td width="284" valign="top">
<p>Tthe C code</p>
</td>
<td width="304" valign="top">
<p>The IPP code</p>
</td>
</tr>
<tr>
<td width="284" valign="top">
<p>unsigned long C_Code_Resize(unsigned char * src, int srcWidth, int srcHeight,int srcStep, unsigned char* dst, int dstWidth, int dstHeight, int dstStep, double m_zoom_x, double m_zoom_y, int interpolation)</p>
<p align="left">{//---------- Perform 1 order linear ---<br />     //define record time variable<br />     unsigned long start_clock,stop_clock;    start_clock = RUNTIME;</p>
<p align="left">     const unsigned char *tmpSrc;<br />    unsigned char *tmpRef;<br />    int width = srcWidth;<br />    int height = srcHeight;<br />    double xInv = 1.0 /  m_zoom_x;<br />    double yInv = 1.0 /  m_zoom_y;</p>
<p align="left">    int colInd, rowInd;<br />    int i, j, xSrc0, xSrc1, ySrc0, ySrc1, wdroi, hdroi;<br />    int idxl, idyt, icol, jrow;<br />    double row, col;<br />    double y1, y2, y3, y4, v, v1, v2, tempV,tempV2;</p>
<p align="left">     idxl=0;<br />     idyt=0; <br />    wdroi = dstWidth;<br />    hdroi = dstHeight;</p>
<p align="left">     tmpSrc = src;<br />for(int kloop=0;kloop&lt;LOOP;kloop++) </p>
<p align="left">{  <br />  tmpRef = dst ;<br />    for (j = 0, jrow = idyt; j &lt; hdroi; j++, jrow++) {         row = (jrow + 0.5) * yInv - 0.5;</p>
<p align="left">        rowInd = (int)floor(row);<br />        ySrc0 = ts_iGetCoord_vs(rowInd, rowInd,  0, srcHeight, srcHeight);<br />        ySrc1 = ts_iGetCoord_vs(rowInd, rowInd + 1, 0, srcHeight, srcHeight);<br />        for (i = 0, icol = idxl; i &lt; wdroi; i++, icol++) { <br />            col = (icol + 0.5) * xInv - 0.5;<br />            colInd = (int)floor(col);<br />            xSrc0 = ts_iGetCoord_vs(colInd, colInd,   0, srcWidth, srcWidth);<br />            xSrc1 = ts_iGetCoord_vs(colInd, colInd + 1, 0, srcWidth, srcWidth);<br />            y1 = (double)tmpSrc[ySrc0 * srcStep + xSrc0];<br />            y2 = (double)tmpSrc[ySrc0 * srcStep + xSrc1];<br />            y3 = (double)tmpSrc[ySrc1 * srcStep + xSrc0];<br />            y4 = (double)tmpSrc[ySrc1 * srcStep + xSrc1];  <br /> ts_iLinearCalcSP_vs(col + 0.5, colInd + 0.5, colInd + 1.5, y1, y2, &amp;v1);            ts_iLinearCalcSP_vs(col + 0.5, colInd + 0.5, colInd + 1.5, y3, y4, &amp;v2);<br />ts_iLinearCalcSP_vs(row + 0.5, rowInd + 0.5, rowInd + 1.5, v1, v2, &amp;v);<br />              //(ts_isaturate_vs(v);<br />            tempV = (int)(v + EXP + 0.5);             tmpRef[i] =(unsigned char)((tempV &gt; 255) ? 255 : (tempV &lt; 0) ? 0 : tempV);<br />        }<br />        tmpRef += dstStep;<br />  }  <br />}</p>
<p align="left">     stop_clock = RUNTIME;</p>
<p align="left">     int mhz;</p>
<p align="left">    ippGetCpuFreqMhz(&amp;mhz);</p>
<p align="left">     return (stop_clock - start_clock)/mhz/LOOP;</p>
<p>}</p>
</td>
<td width="304" valign="top">
<p align="left">unsigned long IPP_Resize(void* src, int srcWidth, int srcHeight,int srcStep,  void* dst,  int dstWidth, int dstHeight, int dstStep,   double m_nzoom_x, double m_nzoom_y, int interpolation)</p>
<p align="left">  {</p>
<p align="left">      //   define record time variable<br />    unsigned long start_clock,stop_clock;     start_clock= RUNTIME;</p>
<p align="left"> // define IPP function parameter</p>
<p align="left">     IppiRect srcRoi = {0,0, srcWidth, srcHeight};</p>
<p align="left">     IppiRect dstRoi={0,0, dstWidth,dstHeight};</p>
<p align="left"> </p>
<p align="left">     IppiSize srcSize = {srcWidth, srcHeight};</p>
<p align="left">    IppiSize dstSize = {dstWidth, dstHeight};</p>
<p align="left"> </p>
<p align="left">     int BufferSize;</p>
<p align="left">     ippiResizeGetBufSize(srcRoi, dstRoi, 1, interpolation, &amp;BufferSize);</p>
<p align="left">     Ipp8u* pBuffer=ippsMalloc_8u(BufferSize);</p>
<p align="left"> <br /><br />     for(int i=0;i&lt;LOOP;i++)    </p>
<p align="left">     //---------- Perform IPP function:ippiResizeSqrPixel_8u_C1R  -------------------------------------------//</p>
<p align="left">     ippiResizeSqrPixel_8u_C1R((Ipp8u*)src, srcSize, srcStep, srcRoi, (Ipp8u*)dst, dstStep, dstRoi, m_nzoom_x,m_nzoom_y,0, 0, interpolation, pBuffer);</p>
<p align="left">    ippsFree(pBuffer);<br />    stop_clock = RUNTIME;<br />      int mhz;<br />    ippGetCpuFreqMhz(&amp;mhz);<br />     return (stop_clock - start_clock)/mhz/LOOP;</p>
</td>
</tr>
</tbody>
</table>
</p>
<p> </p>
<p><b>Performance Gain</b> </p>
<p>On one test machine (core 2 Quad 2.66GHz), as the result image show that the performance gain is 15654/353=<strong>44x</strong>.</p>
<p>The test is linking serial IPP static library.  As the ippiResize is threaded in dynamic library and threaded IPP static library. If enable the multithread, the performance gain will be more than <strong>50x</strong> (depends on the core numbers and image size).<br /><br /><strong>Conclusion<br /></strong>Intel® Parallel Studio 2011 provide developer a first suit of tool for easy developing parallel application on multi-core platform. IPP is part of key component of Intel® Parallel Studio. It provide over thousands highly-optimizated functions that offer the support for for developing high performance digital media application. This article describes a brief way to adopt IPP function instead of source code via Parallel Studio Project and gain over<strong> 40x</strong> performance speed up outright.  </p>
<p>
<table cellpadding="5" cellspacing="0" rules="none" border="1">
<tbody>
<tr>
<th align="left" valign="middle" >Optimization Notice</th>
</tr>
<tr bgcolor="#ccecff">
<td>
<p>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.</p>
<p align="right">Notice revision #20110804</p>
</td>
</tr>
</tbody>
</table>
</p> ]]></description>
      <link>http://software.intel.com/en-us/articles/accelerate-your-application-via-ipp-image-processing-in-parallel-studio-c-code-vs-ipp-resize/</link>
      <pubDate>Sun, 29 Aug 2010 09:00:00 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/accelerate-your-application-via-ipp-image-processing-in-parallel-studio-c-code-vs-ipp-resize/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/accelerate-your-application-via-ipp-image-processing-in-parallel-studio-c-code-vs-ipp-resize/</guid>
      <category>Intel® Integrated Performance Primitives Knowledge Base</category>
      <category>Intel® Parallel Composer Knowledge Base</category>
    </item>
    <item>
      <title>Selecting the Intel® Integrated Performance Primitives (Intel® IPP) libraries needed by your application</title>
      <description><![CDATA[ <p class="fmbody" >The library filenames have been changed in version 7.0 of the Intel IPP library to be simpler and consistent with industry de facto library naming standards.<br /><br />The following table lists the Intel IPP library domains and the names of the relevant header and library files that belong to each domain, organized by linking method (static versus dynamic). See the text following this table for additional notes.</p>
<table width="701" cellpadding="3" cellspacing="0" border="1" >
<colgroup width="200" valign="middle" ></colgroup><colgroup width="100" span="5" valign="middle" ></colgroup>
<tbody>
<tr>
<td><b>Domain</b></td>
<td><b>Header File</b></td>
<td><b>Dynamic Linking<br />7.0 library</b></td>
<td><b>Dynamic Linking<br />6.1 library</b></td>
<td><b>Static Linking<br />7.0 library</b></td>
<td><b>Static Linking<br />6.1 library</b></td>
</tr>
<tr>
<td>Audio Coding</td>
<td>ippac.h</td>
<td>ippac.lib</td>
<td>ippac.lib</td>
<td>ippac_l.lib<br />ippac_t.lib</td>
<td>ippacmerged.lib<br />ippacmerged_t.lib</td>
</tr>
<tr>
<td>Color Conversion</td>
<td>ippcc.h</td>
<td>ippcc.lib</td>
<td>ippcc.lib</td>
<td>ippcc_l.lib <br />ippcc_t.lib</td>
<td>ippccmerged.lib <br />ippccmerged_t.lib</td>
</tr>
<tr>
<td>String Operation</td>
<td>ippch.h</td>
<td>ippch.lib</td>
<td>ippch.lib</td>
<td>ippch_l.lib <br />ippch_t.lib</td>
<td>ippchmerged.lib <br />ippchmerged_t.lib</td>
</tr>
<tr>
<td>Cryptography</td>
<td>ippcp.h</td>
<td>ippcp.lib</td>
<td>ippcp.lib</td>
<td>ippcp_l.lib <br />ippcp_t.lib</td>
<td>ippcpmerged.lib <br />ippcpmerged_t.lib</td>
</tr>
<tr>
<td>Computer Vision</td>
<td>ippcv.h</td>
<td>ippcv.lib</td>
<td>ippcv.lib</td>
<td>ippcv_l.lib <br />ippcv_t.lib</td>
<td>ippcvmerged.lib <br />ippcvmerged_t.lib</td>
</tr>
<tr>
<td>Data Compression</td>
<td>ippdc.h</td>
<td>ippdc.lib</td>
<td>ippdc.lib</td>
<td>ippdc_l.lib <br />ippdc_t.lib</td>
<td>ippdcmerged.lib <br />ippdcmerged_t.lib</td>
</tr>
<tr>
<td>Data Integrity</td>
<td>ippdi.h</td>
<td>ippdi.lib</td>
<td>ippdi.lib</td>
<td>ippdi_l.lib <br />ippdic_t.lib</td>
<td>ippdimerged.lib <br />ippdicmerged_t.lib</td>
</tr>
<tr>
<td>Image Processing</td>
<td>ippi.h</td>
<td>ippi.lib</td>
<td>ippi.lib</td>
<td>ippac_l.lib <br />ippac_t.lib</td>
<td>ippacmerged.lib <br />ippacmerged_t.lib</td>
</tr>
<tr>
<td>Image Compression</td>
<td>ippj.h</td>
<td>ippj.lib</td>
<td>ippj.lib</td>
<td>ippj_l.lib <br />ippj_t.lib</td>
<td>ippjmerged.lib <br />ippjmerged_t.lib</td>
</tr>
<tr>
<td>Realistic Rendering <br />and 3D Data Processing</td>
<td>ippr.h</td>
<td>ippr.lib</td>
<td>ippr.lib</td>
<td>ippr_l.lib <br />ippr_t.lib</td>
<td>ipprmerged.lib <br />ipprmerged_t.lib</td>
</tr>
<tr>
<td>Small Matrix Operations</td>
<td>ippm.h&lt;</td>
<td>ippam.lib</td>
<td>ippam.lib</td>
<td>ippm_l.lib <br />ippm_t.lib</td>
<td>ippmmerged.lib <br />ippmmerged_t.lib</td>
</tr>
<tr>
<td>Signal Processing</td>
<td>ipps.h</td>
<td>ippas.lib</td>
<td>ippas.lib</td>
<td>ipps_l.lib <br />ipps_t.lib</td>
<td>ippsmerged.lib <br />ippsmerged_t.lib</td>
</tr>
<tr>
<td>Speech Coding</td>
<td>ippsc.h</td>
<td>ippsc.lib</td>
<td>ippsc.lib</td>
<td>ippsc_l.lib <br />ippsc_t.lib</td>
<td>ippscmerged.lib <br />ippscmerged_t.lib</td>
</tr>
<tr>
<td>Video Coding</td>
<td>ippvc.h</td>
<td>ippvc.lib</td>
<td>ippvc.lib</td>
<td>ippvc_l.lib <br />ippvc_t.lib</td>
<td>ippvcmerged.lib <br />ippvcmerged_t.lib</td>
</tr>
<tr>
<td>Vector Math</td>
<td>ippvm.h</td>
<td>ippvm.lib</td>
<td>ippvm.lib</td>
<td>ippvm_l.lib <br />ippvm_t.lib</td>
<td>ippvmmerged.lib <br />ippvmmerged_t.lib</td>
</tr>
<tr>
<td>Generated (SPIRAL) Functions</td>
<td>ippgen.h</td>
<td>ippgen.lib</td>
<td>ippgen.lib</td>
<td>ippgen_l.lib <br />ippgen_t.lib</td>
<td>ippgenmerged.lib <br />ippgenmerged_t.lib</td>
</tr>
<tr>
<td>Core Functions</td>
<td>ippcore.h</td>
<td>ippcore.lib</td>
<td>ippcore.lib</td>
<td>ippcore_l.lib <br />ippcore_t.lib</td>
<td>ippcoremerged.lib <br />ippcoremerged_t.lib</td>
</tr>
</tbody>
</table>
<p><br />The names in the table above are for the Windows version of the library. Linux library filenames are similar but begin with the prefix "lib" and end with a ".a" suffix if they are static link libraries and ".so" if they are shared libraries (dynamic link).<br /><br />The 7.0 static libraries that end in an "_l" are single-threaded libraries; those that end in an "_t" are multi-threaded libraries. The 7.0 dynamic link libraries are only available in a multi-threaded format. There is no difference in naming between 64-bit and 32-bit in the 7.0 library.</p>
<p>The 6.1 library 64-bit names include an "em64t" suffix, this is not the case for the 7.0 library. The 6.1 threaded static library names end with an "_t" suffix; unlike the 7.0 library, the 6.1 single-threaded static libraries do not include a special suffix. In the 6.1 static library there is a third library component file that is common to both single-threaded and multi-threaded variants of the static library: the "ipp[*]emerged" file; this file is not listed in the table above, but must be included as part of the link line when linking either form of the 6.1 static library. The 6.1 dynamic link libraries are only available in a multi-threaded format. <br /><br />Use the static libraries to build a custom dynamic link library.</p> ]]></description>
      <link>http://software.intel.com/en-us/articles/selecting-the-intelr-ipp-libraries-needed-by-your-application/</link>
      <pubDate>Sat, 21 Aug 2010 08:00:00 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/selecting-the-intelr-ipp-libraries-needed-by-your-application/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/selecting-the-intelr-ipp-libraries-needed-by-your-application/</guid>
      <category>Intel® Integrated Performance Primitives Knowledge Base</category>
    </item>
    <item>
      <title>IPP 7.0 Beta - Selecting the Intel(R) IPP Libraries Needed by Your Application</title>
      <description><![CDATA[ <p class="FM_Body">The library filenames have been changed In version 7.0 of the IPP library to be simpler and consistent with industry de facto library naming standards.<br /><br />The following table lists the IPP library domains and the names of the relevant header files and library files that belong to each domain, organized according to the linking method to be used with the named library files.</p>
<p>
<table align="center" cellpadding="0" cellspacing="0" border="1">
<colgroup width="200" align="left" valign="middle"></colgroup><colgroup width="110" align="center" span="3" valign="middle"></colgroup>
<tbody>
<tr>
<td><b>Domain</b></td>
<td><b>Header File</b></td>
<td><b>Dynamic Linking</b></td>
<td><b>Static Linking</b></td>
</tr>
<tr>
<td>Audio Coding</td>
<td>ippac.h</td>
<td>ippac.lib</td>
<td>ippac_l.lib<br />ippac_t.lib</td>
</tr>
<tr>
<td>Color Conversion</td>
<td>ippcc.h</td>
<td>ippcc.lib</td>
<td>ippcc_l.lib <br />ippcc_t.lib</td>
</tr>
<tr>
<td>String Operation</td>
<td>ippch.h</td>
<td>ippch.lib</td>
<td>ippch_l.lib <br />ippch_t.lib</td>
</tr>
<tr>
<td>Cryptography</td>
<td>ippcp.h</td>
<td>ippcp.lib</td>
<td>ippcp_l.lib <br />ippcp_t.lib</td>
</tr>
<tr>
<td>Computer Vision</td>
<td>ippcv.h</td>
<td>ippcv.lib</td>
<td>ippcv_l.lib <br />ippcv_t.lib</td>
</tr>
<tr>
<td>Data Compression</td>
<td>ippdc.h</td>
<td>ippdc.lib</td>
<td>ippdc_l.lib <br />ippdc_t.lib</td>
</tr>
<tr>
<td>Data Integrity</td>
<td>ippdi.h</td>
<td>ippdi.lib</td>
<td>ippdi_l.lib <br />ippdic_t.lib</td>
</tr>
<tr>
<td>Image Processing</td>
<td>ippi.h</td>
<td>ippi.lib</td>
<td>ippac_l.lib <br />ippac_t.lib</td>
</tr>
<tr>
<td>Image Compression</td>
<td>ippj.h</td>
<td>ippj.lib</td>
<td>ippj_l.lib <br />ippj_t.lib</td>
</tr>
<tr>
<td>Realistic Rendering <br />and 3D Data Processing</td>
<td>ippr.h</td>
<td>ippr.lib</td>
<td>ippr_l.lib <br />ippr_t.lib</td>
</tr>
<tr>
<td>Small Matrix Operations</td>
<td>ippm.h</td>
<td>ippam.lib</td>
<td>ippm_l.lib <br />ippm_t.lib</td>
</tr>
<tr>
<td>Signal Processing</td>
<td>ipps.h</td>
<td>ippas.lib</td>
<td>ipps_l.lib <br />ipps_t.lib</td>
</tr>
<tr>
<td>Speech Coding</td>
<td>ippsc.h</td>
<td>ippsc.lib</td>
<td>ippsc_l.lib <br />ippsc_t.lib</td>
</tr>
<tr>
<td>Video Coding</td>
<td>ippvc.h</td>
<td>ippvc.lib</td>
<td>ippvc_l.lib <br />ippvc_t.lib</td>
</tr>
<tr>
<td>Vector Math</td>
<td>ippvm.h</td>
<td>ippvm.lib</td>
<td>ippvm_l.lib <br />ippvm_t.lib</td>
</tr>
<tr>
<td>Generated Functions</td>
<td>ippgen.h</td>
<td>ippgen.lib</td>
<td>ippgen_l.lib <br />ippgen_t.lib</td>
</tr>
<tr>
<td>Core Functions</td>
<td>ippcore.h</td>
<td>ippcore.lib</td>
<td>ippcore_l.lib <br />ippcore_t.lib</td>
</tr>
</tbody>
</table>
<br />The names in the table above are for the Windows version of the library. Linux library filenames are similar but begin with the prefix "lib" and end with a ".a" suffix if they are static link libraries and ".so" if they are shared libraries (dynamic link).<br /><br />Static libraries that end in an "_l" are single-threaded libraries. Those that end in an "_t" are multi-threaded libraries. The dynamic link libraries are only available in a multi-threaded format.<br /><br />Use the static libraries to build a custom dynamic link library.<br /><br />To download and get more information about the IPP 7.0 Beta visit the <a target="_blank" href="http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-intel-ipp-70-beta-program-homepage/" title="IPP 7.0 Beta registration and download">IPP 7.0 beta program home page</a>.</p> ]]></description>
      <link>http://software.intel.com/en-us/articles/ipp-70-beta-selecting-the-intelr-ipp-libraries-needed-by-your-application/</link>
      <pubDate>Thu, 10 Jun 2010 21:00:00 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/ipp-70-beta-selecting-the-intelr-ipp-libraries-needed-by-your-application/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/ipp-70-beta-selecting-the-intelr-ipp-libraries-needed-by-your-application/</guid>
      <category>Intel® Parallel Studio Home</category>
      <category>Intel® IPP</category>
      <category>Intel® C++ Compiler for Linux* Knowledge Base</category>
      <category>Intel® C++ Compiler for Mac OS X* Knowledge Base</category>
      <category>Intel® C++ Compiler for Windows* Knowledge Base</category>
      <category>Intel® Integrated Performance Primitives Knowledge Base</category>
      <category>Intel® Parallel Composer Knowledge Base</category>
    </item>
    <item>
      <title>Intel® IPP 7.0 Library Getting Started</title>
      <description><![CDATA[ <p>Please see the following links for the latest information regarding the Intel® Integrated Performance Primitives (Intel® IPP) library:</p>
<ul>
<li><a href="http://software.intel.com/en-us/intel-ipp">Intel® IPP Main Product Page</a> </li>
<li><a href="http://software.intel.com/en-us/intel-ipp"></a><a href="http://software.intel.com/en-us/articles/intel-ipp-70-library-release-notes/">Intel® IPP 7.0 Library Release Notes</a> </li>
<li><a href="http://software.intel.com/en-us/articles/intel-ipp-70-library-release-notes/"></a><a href="http://software.intel.com/en-us/articles/intel-ipp-70-library-install-guide/">Intel® IPP 7.0 Library Installation Guide</a> </li>
<li><a href="http://software.intel.com/en-us/articles/intel-ipp-70-library-install-guide/"></a><a href="http://software.intel.com/en-us/articles/intel-ipp-70-library-system-requirements/">Intel® IPP 7.0 Library System Requirements</a> </li>
<li><a href="http://software.intel.com/en-us/articles/intel-ipp-70-library-getting-started/">Intel® IPP 7.0 Library Getting Started</a> </li>
<li><a href="http://software.intel.com/en-us/articles/intel-ipp-70-library-bug-fixes/">Intel® IPP 7.0 Library Bug Fixes</a></li>
</ul>
<p>Links to <a href="http://software.intel.com/en-us/intel-ipp"><i>documentation, help, and code samples</i></a> can be found on the main <a href="http://software.intel.com/en-us/intel-ipp"><i>Intel IPP product page</i></a>. For technical support visit the <a href="http://software.intel.com/en-us/forums/intel-integrated-performance-primitives/"><i>Intel IPP technical support forum</i></a> and review the articles in the <a href="http://software.intel.com/en-us/articles/intel-ipp-kb/all/1/"><i>Intel IPP knowledgebase</i></a>.</p>
<p>Please <a href="https://registrationcenter.intel.com/"><i>register your product</i></a> using your preferred email address. This helps Intel recognize you as a valued customer in the support forum and insures that you will be notified of product updates. You can read <a href="http://www.intel.com/sites/sitewide/en_US/privacy/privacy.htm?iid=ftr+privacy"><i>Intel's Online Privacy Notice Summary</i></a> if you have any questions regarding the use of your email address for software product registration.</p>
<p><a href="http://software.intel.com/en-us/articles/how-to-build-ipp-application/"><em>How to Build an IPP Application</em></a> provides an introduction to compiling, linking and deploying Intel IPP applications.</p>
<p><b class="sectionHeading">Intel IPP and Intel Parallel Studio and/or Intel Composer</b></p>
<blockquote>
<p>The instructions in this article are intended for users of the stand-alone version of the Intel IPP library, or for those developers who wish to use their own makefiles or need to customize their Visual Studio solution files for building Intel IPP applications.</p>
</blockquote>
<p>If your Intel IPP library was installed as a component of an Intel "suite product" (such as Intel Parallel Studio and Intel Composer) that has been "integrated" into Visual Studio, you may be able to ignore the environment configuration instructions on this page. Instead, please use the configuration tools that were added into Visual Studio for enabling the use of the Intel IPP library within that environment.</p>
<p>Regardless, the following information may be useful to review as it will help you understand how the library is organized on your development system and may provide hints regarding the best way to configure your development system for building an Intel IPP application.</p>
<p><b class="sectionHeading">Environment Variables</b></p>
<p>A script (batch file on Windows, shell script on other platforms) located in the ...\ipp\bin directory can be used to set the IPPROOT, LIB, INCLUDE and any required system-specific environment variables to point to the appropriate IPP library directories. Use of this script is an optional, but convenient, means by which to configure your development system for compiling and linking with the IPP library.</p>
<p>You run the script with a single input that specifies the primary processor architecture of interest. For example, <i>ippvars.bat ia32</i> configures the environment variables for compiling and linking a 32-bit IPP application. Likewise, <i>ippvars.bat intel64</i> configures your development environment to build 64-bit IPP applications.</p>
<blockquote>
<p>Note: in the text that follows, <em>&lt;arch&gt;</em> refers to the primary processor architecture: <i>ia32</i> or <i>intel64, </i>and <em>&lt;IPPROOT&gt;</em> refers to the IPP installation directory. Additionally, '\' and '/' are used interchangeably as directory separators.</p>
</blockquote>
<p>An alternate architecture-specific script file is located in the &lt;IPPROOT&gt;\bin\&lt;arch&gt; directory that can be run without any input parameters. It calls the ippvars script mentioned above with the appropriate architecture as an input parameter.</p>
<p>Once defined, you can reference the IPPROOT variable within your makefiles and/or project files to locate the header and library files necessary to compile and link applications using the Intel IPP library.</p>
<blockquote>
<p>Before running the build scripts provided with the IPP sample applications you must first be sure to set the IPPROOT environment variable to point to the IPP installation directory on your system. IPPROOT must point to that directory which contains the IPP bin, lib, include and tools directories. The sample build scripts will reference the IPPROOT environment variable in order to locate the IPP library and any additional tools required.</p>
</blockquote>
<p>On a Windows system the following batch files are available to configure the environment for building IPP applications:</p>
<p >&lt;IPPROOT&gt;\bin\ippvars.bat  &lt;arch&gt;</p>
<ul>
</ul>
<p>or</p>
<p >IA-32 Intel® Architecture:  &lt;IPPROOT&gt;\bin\ia32\ippvars_ia32.bat<br />Intel® 64 Architecture:  &lt;IPPROOT&gt;\bin\intel64\ippvars_intel64.bat</p>
<ul>
</ul>
<p>On a Linux system the following shell scripts are available to configure the environment for building IPP applications:</p>
<p >&lt;IPPROOT&gt;/bin/ippvars.sh  &lt;arch&gt;</p>
<ul>
</ul>
<p>or</p>
<p >IA-32 Intel® Architecture:  &lt;IPPROOT&gt;/bin/ia32/ippvars32.sh<br />Intel® 64 Architecture:  &lt;IPPROOT&gt;/bin/intel64/ippvarsintel64.sh<br />Intel® Atom™ Processor:  &lt;IPPROOT&gt;/bin/lp32/ippvars32.sh</p>
<ul>
</ul>
<p><b class="sectionHeading">Include Files</b></p>
<p>The Intel IPP functions and structures are defined within several header files in the &lt;IPPROOT&gt;\include directory. The "ipp.h" header file includes all of these. For forward compatibility it is best to include only the ipp.h header file.</p>
<p><b class="sectionHeading">Calling Intel IPP Functions</b></p>
<p>The dynamic library dispatcher and merged static library mechanisms (described below) are designed to make the process of calling an Intel IPP functions as simple as calling any C function. Multiple SIMD-optimized versions of each function are concealed behind a single entry point.</p>
<p>See the following knowledgebase articles for more information on linking with the Intel IPP library:</p>
<p ><a href="http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-intel-ipp-intel-ipp-linkage-models-quick-reference-guide/"><i>Intel® IPP Linkage Models - Quick Reference Guide</i></a><i><br /></i><a href="http://software.intel.com/en-us/articles/simplified-link-instructions-for-the-ipp-library/"><i>Simplified Link Instructions for the IPP Library</i></a></p>
<p>And review these articles for information regarding the IPP dispatching mechanism:</p>
<p ><a href="http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-intel-ipp-understanding-cpu-optimized-code-used-in-intel-ipp/"><i>Understanding CPU Dispatching in the Intel® IPP Library</i></a><i><br /></i><a href="http://software.intel.com/en-us/articles/ipp-dispatcher-control-functions-ippinit-functions/"><i>IPP Dispatcher Control Functions - ipp*Init*() Functions</i></a></p>
<p><b class="sectionHeading">Using the Intel IPP Dynamic (Shared) Libraries</b></p>
<p>The Intel IPP library includes "stub" static library files that link to the correct entry points and automatically load the appropriate Intel IPP dynamic (shared) libraries at run time. To use the IPP dynamic libraries you must link with the library files located in the &lt;IPPROOT&gt;\lib\&lt;arch&gt;\ directory.</p>
<p>At run time the dynamic libraries will automatically detect the CPU type and load the correct processor-specific library files. The processor-specific dynamic libraries include tags like w7, v8 and p8 within their names. The only requirements necessary to use the dynamic libraries, once you have linked against the corresponding "stub" static libraries, is to insure that the shared libraries are located in the system path.</p>
<blockquote>
<p>Note: the environment scripts described above, in the <i>Environment Variables</i> section, will correctly locate your dynamic library files in the appropriate system path.</p>
</blockquote>
<p>On a Linux system be sure the Intel IPP shared libraries are part of the system variable LD_LIBRARY_PATH. For example, if the shared libraries are located in the &lt;IPPROOT&gt;/../redist/ia32/ipp folder, then the following command line should be entered:</p>
<p >export LD_LIBRARY_PATH=$IPPROOT/../redist/ia32/ipp/sharedlib:$LD_LIBRARY_PATH</p>
<p><strong class="sectionHeading">Multi-threading (Multi-Core) Support</strong></p>
<p>Intel IPP 7.0 uses the Intel OpenMP library to implement multi-threading within the library to support multiple hardware threads or cores. In some cases you can use OpenMP environment variables and APIs to control the OpenMP threading behavior within the IPP library. For detailed information regarding OpenMP and the Intel IPP library, please refer to the IPP reference manuals and the following knowledgebase articles:</p>
<p ><a href="http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-intel-ipp-threading-openmp-faq/"><i>Intel® IPP - Threading / OpenMP* FAQ</i></a><i><br /></i><a href="http://software.intel.com/en-us/articles/openmp-and-the-intel-ipp-library/"><i>OpenMP and the Intel® IPP Library</i></a></p>
<blockquote>
<p>Note: You must include the appropriate OpenMP shared-library file in your PATH. There are known incompatibilities between various versions of the OpenMP libraries. If you encounter problems, make sure that there is only one version of OpenMP located in your PATH environment variable.</p>
</blockquote>
<p>Please read the following knowledgebase articles for information regarding the IPP library processor codes:</p>
<p ><a href="http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-intel-ipp-understanding-cpu-optimized-code-used-in-intel-ipp/"><i>Understanding CPU Dispatching in the Intel® IPP Library</i></a><i><br /></i><a href="http://software.intel.com/en-us/articles/ipp-dispatcher-control-functions-ippinit-functions/"><i>IPP Dispatcher Control Functions - ipp*Init*() Functions</i></a></p>
<p><b class="sectionHeading">Building a Custom Dynamic (Shared) Library</b></p>
<p>Please see the following knowledgebase article and the IPP documentation for information on building a custom dynamic library:</p>
<p ><a href="http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-intel-ipp-intel-ipp-linkage-models-quick-reference-guide/"><i>Intel® IPP Linkage Models - Quick Reference Guide</i></a></p>
<p><b class="sectionHeading">Using the Intel IPP Performance Benchmark Tool</b></p>
<p>The Intel IPP library includes a tool named "perfsys" to evaluate the performance of each Intel IPP function. <br />For more details on running perfsys please review the readme.htm file located in the &lt;IPPROOT&gt;\tools\&lt;arch&gt;\perfsys directory.</p>
<b></b> ]]></description>
      <link>http://software.intel.com/en-us/articles/intel-ipp-70-library-getting-started/</link>
      <pubDate>Mon, 07 Jun 2010 21:00:00 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/intel-ipp-70-library-getting-started/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/intel-ipp-70-library-getting-started/</guid>
      <category>Intel® IPP</category>
      <category>Intel® Integrated Performance Primitives Knowledge Base</category>
    </item>
  </channel></rss>
