<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated on Sat, 11 Feb 2012 19:14:37 -0800 -->
<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/compatibility/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/compatibility/</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>IPP_zlib Change the Default Compression Level</title>
      <description><![CDATA[ <p>IPP_zlib.lib is high-level data compression libraries, which is compatible with de-facto standard zlib (<a href="http://www.zlib.net/">www.zlib.net</a>). Starting the version Intel® IPP 7.0 sample, we change the IPP_zlib "default" compression ratio to align with zlib library "default" compression level.  Now we have new compression levels correlation table as below: </p>
<p>
<table width="333" cellpadding="0" cellspacing="0" border="0">
<tbody>
<tr>
<td width="167" valign="top">
<p align="center"><b>zlib </b></p>
</td>
<td width="167" valign="top">
<p align="center"><b>ipp_zlib </b></p>
</td>
</tr>
<tr>
<td width="167" valign="top">
<p align="center">1</p>
</td>
<td width="167" valign="top">
<p align="center">fast</p>
</td>
</tr>
<tr>
<td width="167" valign="top">
<p align="center">2</p>
</td>
<td width="167" valign="top">
<p align="center">linked to fast</p>
</td>
</tr>
<tr>
<td width="167" valign="top">
<p align="center">3</p>
</td>
<td width="167" valign="top">
<p align="center">linked to fast</p>
</td>
</tr>
<tr>
<td width="167" valign="top">
<p align="center">4</p>
</td>
<td width="167" valign="top">
<p align="center">average</p>
</td>
</tr>
<tr>
<td width="167" valign="top">
<p align="center">5</p>
</td>
<td width="167" valign="top">
<p align="center">linked to average</p>
</td>
</tr>
<tr>
<td width="167" valign="top">
<p align="center">6</p>
</td>
<td width="167" valign="top">
<p align="center"><b>default </b></p>
</td>
</tr>
<tr>
<td width="167" valign="top">
<p align="center">7</p>
</td>
<td width="167" valign="top">
<p align="center">linked to <b>default </b></p>
</td>
</tr>
<tr>
<td width="167" valign="top">
<p align="center">8</p>
</td>
<td width="167" valign="top">
<p align="center">linked to best</p>
</td>
</tr>
<tr>
<td width="167" valign="top">
<p align="center">9</p>
</td>
<td width="167" valign="top">
<p align="center">best</p>
</td>
</tr>
</tbody>
</table>
</p>
<p>While in previous release, IPP_zlib use the level 5 as default. Some users may notice that the previous version have higher speed, but less compression level. So in order to align with zlib (www.zlib.net), Intel® IPP 7.0 provide compression ratio for each IPP_zlib compression level not less than it is in zlib.</p>
<p>Additionally, Intel® IPP 7.0 also improved the encoding performance of ipp_zlib with new default compression level. And new high-level data compression libraries (bzip2, gzip and lzo) are supported Intel® IPP 7.0.</p> ]]></description>
      <link>http://software.intel.com/en-us/articles/ipp_zlib-change-the-default-compression-level-1/</link>
      <pubDate>Fri, 16 Dec 2011 08:00:00 -0800</pubDate>
      <comments>http://software.intel.com/en-us/articles/ipp_zlib-change-the-default-compression-level-1/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/ipp_zlib-change-the-default-compression-level-1/</guid>
      <category>Intel® Integrated Performance Primitives Knowledge Base</category>
    </item>
    <item>
      <title>Intel IPP ippsResamplePolyphase function source download</title>
      <description><![CDATA[ <p>The speech recognition functions (ippSR domain) are not part of IPP 7.0 release. Check <a href="http://software.intel.com/en-us/articles/intel-ipp-70-library-release-notes/">the release notes</a> for some details. The source code of<strong> ippsResamplePolyphase</strong> functions in the ippSR domain is available for downloading from Intel Registration Center: <br />      <br />      1)Get <a href="http://registrationcenter.intel.com/irc_nas/2223/ipp-resample-07-21-2011.zip"><strong>ippsResamplePolyphase source from here </strong></a><br />     <br />      2)Unzip the package with the password "resample"<br />     <br />      3)Check the "readme.txt" file on the software requirements and follow the instructions in the file to build the source code.<br /><br />A simple test program is also included in the package to demonstrate the usage of the functions.<br /><br />Other functions in ippSR domain are supported in the IPP 6.1 product. Please use IPP 6.1 if they are required for the application.</p> ]]></description>
      <link>http://software.intel.com/en-us/articles/ippsresamplepolyphase-source-download/</link>
      <pubDate>Fri, 09 Dec 2011 08:00:00 -0800</pubDate>
      <comments>http://software.intel.com/en-us/articles/ippsresamplepolyphase-source-download/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/ippsresamplepolyphase-source-download/</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>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>OpenMP static library has been deprecated since Intel® IPP 7.0</title>
      <description><![CDATA[ <br />OpenMP static library (libomp5*.lib on Windows* and libomp5*.a on Linux) has been deprecated since Intel® IPP 7.0.<br />In the figure shown below the different versions of the static OpenMP libraries are shown for a Windows* installation of Intel® Parallel Studio.<br /><br /><img height="542" width="645" src="http://software.intel.com/file/30129" alt="PS_lib_ia32.JPG" title="PS_lib_ia32.JPG" /><br />
<div id="art_pre_template"><br /><br /><br />  <strong>We recommend you to use the dynamic version of the OpenMP library instead of the static version.</strong>  <br /><br />The dynamic OpenMP library is located in Parallel Studio 2011\Composer\compiler\lib\  Folder.   For e.g: the ia32 dynamic OpenMP library is located in Parallel Studio 2011\Composer\compiler\lib\ia32 folder in a Windows* installation as shown in Figure below.<br /><br /><img height="509" width="645" src="http://software.intel.com/file/30130" alt="PS_dll_ia32.JPG" title="PS_dll_ia32.JPG" /></div> ]]></description>
      <link>http://software.intel.com/en-us/articles/openmp-static-library-has-been-deprecated-since-intel-ipp-70/</link>
      <pubDate>Thu, 02 Sep 2010 09:00:00 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/openmp-static-library-has-been-deprecated-since-intel-ipp-70/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/openmp-static-library-has-been-deprecated-since-intel-ipp-70/</guid>
      <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>New Directory Structure and Library Naming Scheme for Intel® IPP 7.0 Library</title>
      <description><![CDATA[ <p><span class="sectionHeading">Directory Stucture Layout Changes<br /></span><br />The Intel® IPP library is available as a standalone product or as a component in Intel® Composer. A variety of Intel software development "suite" products include Intel Composer, including <a target="_blank" href="http://www.intel.com/software/products/parallelstudio" title="Intel Parallel Studio">Intel® Parallel Studio</a>. With the release of Intel IPP 7.0, a new directory structure has been implemented to simplify integration of the Intel IPP standalone products with other Intel software development products. This new directory structure also applies to other Intel software development products, such as the Intel Compiler, <a href="http://software.intel.com/en-us/articles/a-new-directory-hierarchy-in-intel-mkl-package/">Intel MKL</a>, Intel TBB, etc.<br /> </p>
<blockquote>
<div>Note: the library's directory layout changes impact both Windows* and Linux* developers. The examples shown here are for a Windows system.</div>
</blockquote>
<br />Following is a summary of key changes to the Intel IPP 7.0 directory layout: 
<p> </p>
<ol>
<li>Directories formerly designated as "<strong>em64t</strong>" are now designated by the "<strong>intel64</strong>" tag. </li>
<li>Intel IPP shared libraries (*. dll and *.so) have been relocated to a "<strong>redist</strong>" directory (see diagram below).</li>
<li>The <strong>OpenMP* libraries</strong> and other Intel Compiler redistributable libraries (included with the Intel IPP library) are now located in a common compiler <strong>"redist</strong>" directory (see diagram below)<strong>. </strong><em>Note: the static edition of the Intel OpenMP library has been deprecated with this release of the IPP library and should not be used for new projects, please use the shared version of the library.</em></li>
<li>IPP documentation has been relocated to a common directory.</li>
<li>Multiple "<strong>bin</strong>" directories contain utilities to support the development process, such as scripts to set the IPP environment variables.</li>
<li>The Intel IPP "<strong>lib</strong>" directory contains only linkable objects, including the serial static library files, threaded static library files and dynamic stup library files.</li>
<li>A new "<strong>interface</strong>" directory has been introduced with this release. It includes high-level applications and/or libraries that utilize the IPP library. Source and pre-built binaries can be found in these directories and are ready to use in your application. </li>
</ol>
<p>The following diagram compares the 6.1 directory structure to the 7.0 directory structure:<br /><br /><img src="http://software.intel.com/file/29876" alt="Integrated%20Directory%20Structure%3B%206.1%20-%3E%207.0%20Layout%20Comparison" title="Integrated Directory Structure" /></p>
<blockquote>
<div>Note: the "<strong>Program Files (x86)</strong>" name shown above indicates installation on a 64-bit Windows system. Installation on a 32-bit Windows system alway occurs in the "<strong>Program Files</strong>" directory.</div>
</blockquote>
<br />
<blockquote>
<div>Note: when installed as part of the Parallel Studio product, the top-level directory containing Intel Composer components (such as the Intel IPP library) includes one additional level and is named: "<strong>C:\Program Files\Intel\Parallel Studio xxxx\Composer\</strong>" rather than: "<strong>C:\Program Files\Intel\ComposerXE-xxxx\</strong>" as shown in the diagram above.</div>
</blockquote>
<br /><img src="http://software.intel.com/file/29879" alt="IPP%20Directory%20Layout" title="IPP Directory Layout" /> <br /><span class="sectionHeading">Interfaces Directory<br /></span><br />The new "interfaces" directory contains a collection of popular high-level applications or libraries that have been "enabled" by application of the IPP library. These ready to use modules are functionally equivalent to the popular applications from which they are derived. In most cases they can be used as drop-in replacements for the non-IPP version of the library or application, giving you immediate access to the acceleration features of the IPP library.<br /><br /><img src="http://software.intel.com/file/29878" alt="Interfaces%20Directory" title="Interfaces Directory" /><br /><br />
<p> </p>
<p><strong class="sectionHeading">Library Filename Changes</strong><br /><br />Library filenames have also been changed in version 7.0 of the Intel IPP library. The <strong>merged/merged_t</strong> and <strong>emerged</strong> static library components have been combined into a single set of files for the serial static library and another set for the threaded static library files. Library filenames ending in an "_l" are single-threaded static libraries and those that end in an "_t" are multi-threaded static libraries. Libraries without postfixes in the name are shared object import libraries. Please see <a target="_blank" href="http://software.intel.com/en-us/articles/ipp-70-beta-selecting-the-intelr-ipp-libraries-needed-by-your-application/"><strong>Intel IPP 7.0 - Selecting the Intel(R) IPP Libraries Needed by Your Application</strong> </a>for more details.<br /><br />For example, the following 6.1 link command line:<br /><br />ippccemerged.lib ippccmerged.lib ippjemerged.lib ippjmerged.lib ippiemerged.lib ippimerged.lib ippsemerged.lib ippsmerged.lib ippcorel.lib <br /><br />now becomes:<br /><br />ippcc_l.lib ippj_l.lib ippi_l.lib ipps_l.libippcore_l.lib<br /><br />when using the Intel IPP 7.0 library.<br /><br />See also this KB article: <a href="http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-intel-ipp-intel-ipp-linkage-models-quick-reference-guide/">Intel® IPP linkage models - quick reference guide</a>.</p>
<p><img src="http://software.intel.com/file/29877" alt="New%20Library%20Filenames%20and%20Organization" title="New Library Filenames and Organization" /></p> ]]></description>
      <link>http://software.intel.com/en-us/articles/new-directory-structure-and-library-naming-in-ipp/</link>
      <pubDate>Wed, 16 Jun 2010 21:00:00 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/new-directory-structure-and-library-naming-in-ipp/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/new-directory-structure-and-library-naming-in-ipp/</guid>
      <category>Intel® Integrated Performance Primitives Knowledge Base</category>
    </item>
    <item>
      <title>Intel® IPP 6.1 Library Getting Started </title>
      <description><![CDATA[ <p>Please see the following links for the latest information regarding the 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/articles/intel-ipp-61-library-release-notes/">Intel IPP 6.1 Library Release Notes</a></li>
<li><a href="http://software.intel.com/en-us/articles/intel-ipp-61-library-installation-guide/">Intel IPP 6.1 Library Installation Guide</a></li>
<li><a href="http://software.intel.com/en-us/articles/intel-ipp-61-library-system-requirements/">Intel IPP 6.1 Library System Requirements</a></li>
<li><a href="http://software.intel.com/en-us/articles/intel-ipp-61-library-readme/">Intel IPP 6.1 Library Getting Started</a></li>
<li><a href="http://software.intel.com/en-us/articles/intel-ipp-library-61-fixes-list/">Intel IPP 6.1 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>Environment Variables</b></p>
<p>Each platform includes a script (batch file on Windows, shell script on other platforms) in the &lt;install-dir&gt;\tools\env directory that sets the IPPROOT, LIB, INCLUDE and some system-specific environment variables to point to the appropriate IPP install directories. Use of this script is a convenient, but optional, means by which to configure your development system for compiling and linking with the IPP library.</p>
<blockquote>
<p>Before running the build scripts provided with any sample IPP applications you must first set the IPPROOT environment variable to point to the IPP installation directory on your system. IPPROOT needs to be configured to point to that directory which contains the bin, lib, include and tools directories. The build scripts will reference the IPPROOT environment variable in order to locate the IPP library and additional scripts.</p>
</blockquote>
<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>
<p>On a Windows system the following batch files are available to configure the environment for building IPP applications:</p>
<ul>
<li>IA-32 Intel® Architecture: $(IPPROOT)\tools\env\ippenv.bat </li>
<li>Intel® 64 (Intel® EM64T) Architecture: $(IPPROOT)\tools\env\ippenvem64t.bat </li>
<li>Intel® Itanium® Architecture: $(IPPROOT)\tools\env\ippenv64.bat</li>
</ul>
<p >On a Linux system the following shell scripts are available to configure the environment for building IPP applications:</p>
<ul >
<li >IA-32 Intel® Architecture: ${IPPROOT}/tools/env/ippvars32.sh</li>
<li >Intel® 64 (Intel® EM64T) Architecture: ${IPPROOT}/tools/env/ippvarsem64t.sh</li>
<li >Intel® Itanium® Architecture: ${IPPROOT}/tools/env/ippvars64.sh</li>
<li >Intel® Atom™ Processor: ${IPPROOT}/tools/env/ippvars32.sh</li>
</ul>
<p><b>Include Files</b></p>
<p>The Intel IPP functions and structures are defined within several header files in the $(IPPROOT)\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>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>Refer to the documentation for complete descriptions of the Intel IPP functions.</p>
<p>See the following KB 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 read 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>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 $(IPPROOT)\stublib 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 suffixes like px, t7, w7, etc. in their names. The only requirements necessary to use the dynamic libraries, once you have linked against the "stub" static libraries, is to insure that they are located in the appropriate system path(s).</p>
<blockquote>
<p>Note: the environment scripts described above, in the <i>Environment Variables</i> section, will correctly located your dynamic library files in the appropriate system path(s).</p>
</blockquote>
<p>On a Linux system be sure the Intel IPP shared libraries are included in the system variable LD_LIBRARY_PATH. For example, if the libraries are located in the /opt/intel/ipp/6.1.x.xxx/ia32/sharedlib folder, then the following command line should be entered:</p>
<p>export LD_LIBRARY_PATH=/opt/intel/ipp/6.1.x.xxx/ia32/sharedlib:$LD_LIBRARY_PATH</p>
<p>Intel IPP 6.0 and later uses OpenMP to implement it's internal threading. You can use OpenMP environment variables and APIs to control the OpenMP threading behavior. For more information regarding OpenMP and the Intel IPP library, please refer to the following KB 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 libguide.so (Linux) or libiomp5.dll (Windows) file in your PATH. There are known incompatibilities with other versions of these dynamic libraries. If you encounter problems, make sure that there is only one version located in your PATH.</p>
</blockquote>
<p><span >Please read the following KB articles for information regarding the IPP library processor codes:</span></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><span ><b>Building a Custom Dynamic (Shared) Library</b></span></p>
<p><span >Please see the following KB article and the IPP documentation for information on building a custom dynamic library:</span></p>
<p><span ><span ><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></span></span></p>
<p><span ><b>Using the Intel IPP Performance Benchmark Tool</b></span></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 $(IPPROOT)\tools\perfsys directory.</p> ]]></description>
      <link>http://software.intel.com/en-us/articles/intel-ipp-61-library-readme/</link>
      <pubDate>Mon, 08 Mar 2010 21:00:00 -0800</pubDate>
      <comments>http://software.intel.com/en-us/articles/intel-ipp-61-library-readme/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/intel-ipp-61-library-readme/</guid>
      <category>Intel® IPP</category>
      <category>Intel® Integrated Performance Primitives Knowledge Base</category>
    </item>
    <item>
      <title>Intel® IPP Library 6.1 Fixes List</title>
      <description><![CDATA[ <form name="art_landing_page" id="posts-filter">
<p><b>Intel® IPP Library 6.1 Fixes List</b></p>
</form>
<p>The tables below <span >summarize</span> specific customer issues or feature requests that have been addressed by the indicated product releases. Some items span multiple architectures and/or operating systems and some relate only to a single architecture or operating system.</p>
<p><em>NOTE: The issues, defects, bug reports, and feature requests summarized below represent specific issues with specific test cases. An item listed here does not imply that it necessarily applies to your application(s). If your situation does not match the specific test case you may not have experienced the error or problem associated with that update. It is not possible to describe the details of every issue and its specific test case in these tables.</em></p>
<blockquote>
<p>Providing a complete description of each item in the list below is impractical. For that reason we ask that you post a message on the <a target="_blank" href="http://software.intel.com/en-us/forums/intel-integrated-performance-primitives/">IPP user forum</a> and reference this page and the "DPD" number of interest if you have further questions regarding the information in these tables. A DPD number with more information has a link.</p>
</blockquote>
<p>These tables are updated regularly to correct errors and omissions.</p>
<p><em>NOTE: The bugs listed below are for both the IPP library and the IPP sample code. Always upgrade the IPP library and sample code at the same time. </em></p>
<h4><br />IPP v6.1 update 6 (30 Jul 2010)</h4>
<p><span >DPD200155165        UMC simple_player app does not work with Windows Aero interface.<br />DPD200154198        Data Compression error in ZLIB (deflate.c) when source buffer size &gt;=48K.<br />DPD200154900        Data compression error with deflate() under certain variable block size conditions.<br />DPD200153276        Change alignment in H.264 UMC decoder to DECLALIGN macros insted of __ICL alignment.<br />DPD200087211        Documentation: Example 9-4 ippiFilterColumn() needs to include border information.<br />DPD200154874        Documentation: ippsFIR() descriptions are misleading or incorrect in description of "numIter" parameter.<br />DPD200186071        Documentation: Correct example 6-1 using ippiRGBToYUV() -- wrong ROI size: should be {3,3} not {9,3).<br /></span></p>
<h4><br />IPP v6.1 update 5 (9 Apr 2010)</h4>
<p><span >DPD200150333        Output image has small corruption on top edge when applying WarpAffine with dst roi size (1920 x 240).<br />DPD200150883        Delphi sample code error on loading file name (sample has been updated).<br />DPD200089782        JPEG grayscale lossless compresion distortion.<br />DPD200150199        Error in DIB_PAD_BYTES in UIC picnic sample.<br /><a href="http://software.intel.com/en-us/forums/showthread.php?t=72577&amp;o=a&amp;s=lr">DPD200151794</a>        Corrected results for the ippGetNumCoresOnDie() function on multi-core processors.<br /><a href="http://software.intel.com/en-us/articles/ipp-zlib-compression-error/">DPD200151952</a>        IPP-zlib compress generates spurious compressed data that cannot be decompressed.<br />DPD200089070        UMC H264EncoderFrameList_InsertFrame() fails allocating 15MB frame buffer, returns null pointer.<br />DPD200092946        Picnic sample application produces invalid JPEG 2000 files when saving in lossless format.<br />DPD200187089        ippiRGBToGray_8u_AC4C1R and ippiRGBToGray_8u_C3C1R translate RGB(255,255,255) to 254.<br />      <br /></span></p>
<h4>IPP v6.1 update 4 (10 Feb 2010)</h4>
<p><span ><a href="http://software.intel.com/en-us/forums/showthread.php?t=72208&amp;o=d&amp;s=lr">DPD200149498</a>        Memory leak in H.264 UMC sample code with resolution change on same instance of decoder.<br />DPD200150122        IPP_BZIP2 data corruption -- data sensitive and isolated to a 3mb fragment of a specific binary file.<br /><a href="http://software.intel.com/en-us/forums/showthread.php?t=72572&amp;o=d&amp;s=lr">DPD200149570</a>        IPP samples redistribution file and EULA updated for clarification.<br />DPD200087613        ippsFilterNoiseDetect* "ascending noise detection" problem fixed. PESQ was increased by ~0.01.<br />DPD200148808        Cryptography function ippsECCPComparePoint* contains a misprint: "equial" should be "equal."<br /></span></p>
<h4><br />IPP v6.1 update 3 (26 Nov 2009)</h4>
<p><span >DPD200140668        ippiResizeSqrPixel_8u_C1R has differing results depending on CPU (rounding error problem)<br />DPD200134986        DFT performance optimization for lengths 8*n, 16*n, 13*n, p*n (p&gt;50)<br />DPD200084751        Correct ippiColorToGray_8u_C3C1R rounding errors<br />DPD200086319        ippiSegmentWatershed_8u16u should use the value IPP_MAX_16U for border pixels but uses 8u instead<br />DPD200084408        Problem with IPP linking in kernel mode for Intel64 (em64t red zone in ring0 and interrupts)<br />DPD200087170        ippiCopy_8u_C1R performance on v8 architecture (v8 code slower in Core 2 Duo than t7 and w7)<br />DPD200141560        Feature request: BZIP2 with ipp_ prefixes<br /><br /></span></p>
<h4>IPP v6.1 update 2 (18 Oct 2009)</h4>
<p><span ><a href="http://software.intel.com/en-us/forums/showthread.php?t=69755">DPD200084538</a>        UIC sample picnic.exe (64 bits) cannot be started<br /><a href="http://software.intel.com/en-us/forums/showthread.php?t=68104">DPD200085298</a>        Linking problem on 64-bit Mac OS X with IPP fuctions<br />DPD200084177        Image artifacts in jpeg2000 image<br />DPD200140266        DMIP crashes when reusing graphs<br />DPD200140194        BWT error<br /><a href="http://software.intel.com/en-us/forums/intel-integrated-performance-primitives/topic/69755/">DPD200138989</a>        Running application in debug causes heap corruption at the end of functions that use UIC classes<br />DPD200133386        mp3 encoder produces fuzzy results with 8k sampleing rate PCM<br />DPD200136808        IPP C# wrapper bugs<br />DPD200134685        ippiAbs_32f_AC4IR failed with 300x300<br />DPD200134689        C++ sample ippi.hpp missing ippiCopy_16u_C1R<br />DPD200134691        Remove description of ippiGrayDilateBorder/ippiGrayErodeBorder<br />DPD200132032        ROI is reversed in ippiResizeSqrPixel_x_P<br />DPD200132261        Fix the jpegview makefile for OpenMP from MS VC.NET 2005<br />DPD200128941        Small destination block size optimization<br />DPD200132721        Crypto sample error: add -lguide -lpthread in build_ssl_ipp.sh<br />DPD200133648        ippiSwapChannels_8u_C41R crashes with small image width<br />DPD200133653        OverFlow in 10-bit DCT ippiDCT8x8Inv_16s_C11()<br />DPD200134288        Bug in WarpBilinearBack function with NN interpolation<br />DPD200134697        Problem with ippiFilterGaussBorder_32f_C1R<br />DPD200133374        Correction to custom DLL section of the User Guide<br />DPD200133665        Document: Output for example 12-27 in ippsman.pdf is incorrect<br /><a href="http://software.intel.com/en-us/articles/jpeg-bug-fix-details/">DPD200134755</a>        Incorrect decoding for IPP MJPEG sample in UMC<br /><a href="http://software.intel.com/en-us/articles/jpeg-bug-fix-details/">DPD200130124</a>        JPEG color conversion functions<br />DPD200133693        Line 741 of umc_frame_constuctor.cpp<br />DPD200134726        Document error: ippiMirror returns ippStsSizeErr<br /><a href="http://software.intel.com/en-us/articles/jpeg-bug-fix-details/">DPD200134712</a>        Distored JPEG output<br />DPD200134959        Unexpected result with ippiColorToGray with integer inputs<br />DPD200134967        UMC::ColorSparceConversion YUY2-&gt;YV12 error<br />        <br /></span></p>
<h4>IPP v6.1 update 1 (02 Jul 2009)</h4>
<p><span >DPD200133747        ippiForegroundGaussian does not produce expected results<br /><a href="http://software.intel.com/en-us/forums/intel-integrated-performance-primitives/topic/69755/">DPD200134979</a>        ResizeSqrPixel function crash when size&lt;=6<br /><a href="http://software.intel.com/en-us/forums/intel-integrated-performance-primitives/topic/69755/">DPD200133708</a>        ippiResizeSqrPixel_8u_C1R performance issue<br />DPD200132114        ippiQualityIndex_16u32f_C3R() error<br />DPD200131846        Inconsistent use of const specifier for some IPP functions<br />DPD200133631        Improve scripts to display clear error message<br />DPD200131102        No explanation of nonpic libs (linux) in documentation<br />DPD200134358        NHM (Intel Nehalem microarchitecture) function optimizations<br />DPD200133920        ippsFIRSparse is slower than using SSE compiler intrinsics<br />DPD200134752        Incorrect conversion of RGB to Gray<br />DPD200134693        redist.txt missing ipp*merged_t.lib<br />DPD200134748        Redistribute and document libmmds.lib<br />DPD200134969        Gather interface for accumlulating AAD for AES-GCM<br />DPD200136077        Sample build problem: file not found: libiomp5.dylib<br />DPD200082620        G711 bug in PLC<br />DPD200134973        UMC::ColorSpaceConversion YUY2 -&gt; YV12 error<br />DPD200134862        Bug in umc_video_processing.cpp<br />DPD200134779        ippsCIS_32fc_All does not work<br />DPD200134356        IPP ZLIB fails to compress image after gzrewind<br />DPD200134270        ippiNormDiff_L1_8u_C1R error<br />DPD200133638        ippsNorm_L1_16s32f bug<br />DPD200132645        MPEG4 decoding problem<br />DPD200132341        Makefile error for UMC<br />DPD200131704        Resize function error<br />DPD200131142        ippiUndistortRadial function gives wrong results<br />DPD200130292        Performance issue for ippsAccCovarianceMatrix_32f64f_D2<br />DPD200130035        Add notes for ippiDCTQuantInv8x8LS_JPEG_16s16u functions<br />DPD200133943        Improve MPEG2Mux<br />DPD200133939        IppiCrossCorrValid_NormLevel_8u32f<br />DPD200130294        Performance issue for IPP String processing function on EM64T systems<br />DPD200134815        ippsResamplePolyphase_32f performance issue<br />DPD200134750        Internal function cpMul_BNU_FullSize does not obey the IPF software conventions<br />DPD200134716        ippiCrossCorrFull_NormLevel gives unexpected results<br />DPD200134707        Crash inside ippiInterpolateAverage16x16_8u_C1IR<br />DPD200133569        Intermediate computational errors<br />DPD200129130        Wiener filter MaskSize error<br />DPD200129122        2D media filter performance<br />DPD200134399        Incorrect Redist.txt file<br />DPD200134254        Modify IPP ZLIB sample to get better performance<br />DPD200128923        Watershed segmentation for 32 bit float images added<br />DPD200134378        Crypto sample does not work with latest OpenSSL package<br />DPD200133670        Problems encoding 16u_C1 jpeg2000<br />DPD200130345        Add destructive versions of ippsNthMaxElement_32f_I<br /></span></p>
<h4><br />IPP v6.1 (25 Apr 2009)<br /></h4>
<p><span >DPD200134199        Feature request: Improve the UMC sample code buiding script<br />DPD200134679        V-plane Corrupted when input 640x480 YUV422 into encoder<br />DPD200134370        Bug in 'ippiRGBToYCbCr_8u_C3R'<br />DPD200134362        ippiTrueDistanceTransform_8u32f_C1R caps the maximum distance value at 1000.0<br /><a href="http://software.intel.com/en-us/articles/jpeg-bug-fix-details/">DPD200134360</a>        ippiDecodeHuffman8x8_Direct_JPEG_1u163_C1 reads beyond input data<br />DPD200134387        Cannot use libipp_z.a and libipp_bzip2.a at the same time<br />DPD200134597        Error in color conversion function 'ippiRGBToYCbCr420_8u_C3P3R' for 'u8' variant<br /><a href="http://software.intel.com/en-us/articles/jpeg-bug-fix-details/">DPD200134372</a>        Read error in 'ippiDCTQuantInv8x8To2x2LS_JPEG_16s8u_C1R' for JPEG decoding<br />DPD200134341        'ippiCompColorKey_8u_C4R' does not work correctly for some ROI widths<br />DPD200134447        Remove ippStaticInitBest() from Getting_started.htm<br />DPD200134092        IPP-Crypto- support to RSA_SSA1.5 nor RSA_PKCSv1.5<br />DPD200133906        ippiCrossCorrValid_NormLevel_32f_C1R on EM64T system<br /><a href="http://software.intel.com/en-us/articles/jpeg-bug-fix-details/">DPD200134376</a>        Bug in colors for planar destinations at lower resolution option in 'JPEGView'<br />DPD200134386        Issue with ippiTrueDistanceTransform_8u32f_C1R function<br />DPD200133691        A number of UMC MPEG-4 decoder issues (IPP v. 5.2)<br />DPD200134366        Missing build64.sh file from data compression sample<br />DPD200133646        ippsRandomRunform_8u does not produce the upper border value<br /><a href="http://software.intel.com/en-us/articles/jpeg-bug-fix-details/">DPD200133366</a>        Resolution not saved in jpeg<br />DPD200134179        ippGetStatusString crash in C# sample code<br />DPD200133821        USC_EC delay issues<br />DPD200134368        Bug in the state of CABAC in that mode<br />DPD200133819        Add pixel aspect ratio as a configuration parameter<br />DPD200134284        Add info about RTI removal to the release notes<br />DPD200133689        A number of issues for the H.264 UMC decoder<br />DPD200134397        H264 encoder problem after running many hours<br /><a href="http://software.intel.com/en-us/forums/showthread.php?t=73437&amp;o=d&amp;s=lr">DPD200134487</a>        UMC H264 parser memory leak</span></p> ]]></description>
      <link>http://software.intel.com/en-us/articles/intel-ipp-library-61-fixes-list/</link>
      <pubDate>Thu, 04 Feb 2010 08:00:00 -0800</pubDate>
      <comments>http://software.intel.com/en-us/articles/intel-ipp-library-61-fixes-list/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/intel-ipp-library-61-fixes-list/</guid>
      <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>C# support in Intel IPP</title>
      <description><![CDATA[ <p>Check out the Intel® Integrated Performance Primitives (Intel® IPP)  C# support sample  ( Download it from <a href="http://www.intel.com/software/products/ipp/samples.htm">Intel IPP Sample Page</a>), it is included in part of Intel IPP samples for Windows.  The sample is located in Intel IPP sample directory <strong><em>\ipp-samples\language-interface\dotnet-cpp</em></strong><br /><br />It demonstrates how to use Intel IPP when developing applications in the Microsoft C# environment. Includes wrapper classes to support Intel IPP string manipulations, image, signal processing, color conversion, cryptography, data compression, JPEG, matrix and vector math, etc.<br /><br />Additionally, there is a complete <a target="_blank" href="http://software.intel.com/en-us/articles/using-intel-math-kernel-library-and-intel-integrated-performance-primitives-in-the-microsoft-net-framework/">white paper </a>to address C# support in Intel® Performance Libraires including Intel IPP and Intel® Math Kernel Library ( Intel MKL), please visit <a target="_blank" href="http://software.intel.com/en-us/articles/using-intel-math-kernel-library-and-intel-integrated-performance-primitives-in-the-microsoft-net-framework/">here</a> for more reference.</p>
  ]]></description>
      <link>http://software.intel.com/en-us/articles/c-support-in-intel-ipp/</link>
      <pubDate>Thu, 28 Jan 2010 00:00:00 -0800</pubDate>
      <comments>http://software.intel.com/en-us/articles/c-support-in-intel-ipp/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/c-support-in-intel-ipp/</guid>
      <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>
  </channel></rss>
