<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated on Thu, 24 May 2012 15:40:31 -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/tips-and-techniques/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/tips-and-techniques/</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>How to Side-by-Side Install the Intel IPP 7.0 Library on Windows</title>
      <description><![CDATA[ <p>This article describes the key steps you should be familiar with if you are doing a side-by-side install of the Intel® IPP Library, version 7.0 for Microsoft* Windows* on your development system. In other words, if you wish to install multiple versions of the Intel IPP 7.0 library on your development system, these instructions may be useful to you.</p>
<blockquote>If you have not yet installed a copy of the 7.0 Intel IPP library on your development system please read <i><a href="http://software.intel.com/en-us/articles/how-to-install-the-intel-ipp-70-library-on-windows/">How to Install the Intel IPP 7.0 Library on Windows</a></i>.</blockquote>
<p>With release 7.0 of the Intel IPP library the location and layout of the Intel IPP library files on your development system were changed. Rather than being installed as a standalone product within the "\Program Files\Intel\IPP" directory, the Intel IPP library files are now installed as part of the Intel Composer XE product. This was done to provide closer integration with Microsoft Visual Studio, the Intel C/C++ Compiler and other Intel performance library products (such as Intel MKL and Intel TBB).</p>
<p>The following screen shots are the result of installing Intel IPP 7.0.4 on a Microsoft Windows 64 Server 2008 system that had a prior installation of Intel IPP version 7.0.3 already in place (or an Intel Composer XE, Intel Parallel Studio XE or any other <a href="http://software.intel.com/en-us/articles/windows-tool-suites/">Intel Tool Suite for Windows</a> product that contains the Intel IPP library). The details may vary depending on the specific version of the 7.0 library product (either standalone or as part of a tool suite) you already have installed on your development system – <em>these instructions assume a previous version of the Intel IPP 7.0 standalone library product has already been installed on the target system</em>.</p>
<blockquote>
<p>Note: if you have only pre-7.0 versions of the Intel IPP library installed on your system (e.g., version 6.1, 5.3, etc.) the following instructions do not apply; you can consider your initial installation of the 7.0 library to be a "clean install" of the Intel IPP library and should review <i><a href="http://software.intel.com/en-us/articles/how-to-install-the-intel-ipp-70-library-on-windows/">How to Install the Intel IPP 7.0 Library on Windows</a></i>.</p>
</blockquote>
<p>Not every step in the process is shown below, only those steps that are considered of significance are provided.</p>
<p class="sectionHeading">Upgrade vs. Side-by-Side Installation</p>
<p>If you already have a 7.0 version of the Intel IPP library installed on your Windows development system, after you start the installer and answer any questions about extracting and licensing, you will see a dialog box similar to that shown below.</p>
<p>Choose the <strong><span >SECOND OPTION</span></strong> in the dialog box below (<em>I want to install this update separate [sic] from the existing version</em>).</p>
<p><img src="http://software.intel.com/file/36139" alt="ipp-7-install-update-1.png" title="ipp-7-install-update-1.png" /></p>
<p>If you choose the first option (<em>I want to apply this update to the existing version</em>) shown above you will <span >upgrade</span> your copy of the Intel IPP library. This means that the previous version of the library will be overwritten with the version you are now installing.</p>
<p>Choosing the second option (<em>I want to install this update separate [sic] from the existing version</em>) means you want to perform a <span >side-by-side</span> installation of the Intel IPP library. In other words, the existing copy of the Intel IPP library, that is already installed on your system, will remain in place and a second copy will be installed in a new location on your development system.</p>
<p>Obviously, you cannot build an application using both copies of the library at the same time, your build scripts (makefiles) and/or project files will need to be adjusted to specify which copy of the library you should be linking against ("default" or "side-by-side").</p>
<h2 class="sectionHeading">Complete the Side-by-Side Installation</h2>
<p>Choose "Custom Installation" in order to see the screens that follow.</p>
<p><img src="http://software.intel.com/file/36103" alt="ipp-7-install-update-2.png" title="ipp-7-install-update-2.png" /></p>
<p>Notice the name of the directory into which the Intel IPP library components will be installed. In a "default" installation the <em>.x.yyy</em> part of the directory name (<em>.4.196</em> in this example) would not be part of the directory name.</p>
<p>The convention followed by the installer and the Visual Studio integration tools is that the "unadorned" install directory (the directory with just "ComposerXE-2011" in the name) is the "default" installation directory. Files stored here are the "default" files and will be overwritten if an upgrade installation was chosen.</p>
<p>Any directory that includes a name that has been "adorned" by version-specific details (such as "ComposerXE-2011.4.196" as shown below) is considered to be an optional "side-by-side" directory and will not be overwritten by any future upgrade installs.</p>
<p><img src="http://software.intel.com/file/36102" alt="ipp-7-install-update-3.png" title="ipp-7-install-update-3.png" /></p>
<p>Be sure the components you wish to install on your development system include a <strong>green '+' sign</strong>, as shown below.</p>
<blockquote>
<p>The test system used to obtain these screen shots did not have Microsoft Visual Studio installed. That is why the Visual Studio integration steps are grayed out in the following dialog box.</p>
</blockquote>
<p><img src="http://software.intel.com/file/36101" alt="ipp-7-install-update-4.png" title="ipp-7-install-update-4.png" /></p>
<p>On a Windows 64 system the Intel IPP library (and other Intel Composer XE components) will be installed in the "\<strong>Program Files (x86)</strong>\Intel\…" directory, regardless of whether you are installing the 32-bit or the 64-bit version of the Intel IPP library. On a 32-bit Windows system the installer will place files in the "\<strong>Program Files</strong>\Intel\…" directory.</p>
<p><img src="http://software.intel.com/file/36100" alt="ipp-7-install-update-5.png" title="ipp-7-install-update-5.png" /></p>
<p>Following a successful installation it is important to note that the Windows "Start Menu" does not contain an "Intel IPP Library" product shortcut. Instead, you will find Intel IPP product documentation and other shortcuts under the "Intel Parallel Studio XE 2011" program group, as indicated by the closing installation dialog box shown below (Intel IPP is a component of Intel Composer, which is a component of Intel Parallel Studio).</p>
<p><img src="http://software.intel.com/file/36098" alt="ipp-7-install-update-7.png" title="ipp-7-install-update-7.png" /></p>
<p>Using Windows File Explorer, you can see that the The Intel IPP 7.0 library "side-by-side" binaries are located within the "adorned" Intel Composer XE 2011 directory (see the image below). Notice that the original "default" installation is still present on the development system and is identified by the "unadorned" Intel Composer XE 2011 directory.</p>
<p>Unlike prior versions of the product, the Intel IPP library files are no longer located in a dedicated directory structure. This will impact how you specify your IPPROOT environment variable, if you use this mechanism to locate the library within your project files or build scripts, and where you will find any shared library components (such as the Intel OpenMP library files and the Intel Compiler C runtime library files) that your application might require.</p>
<p><img src="http://software.intel.com/file/36097" alt="ipp-7-install-update-8.png" title="ipp-7-install-update-8.png" /></p> ]]></description>
      <link>http://software.intel.com/en-us/articles/how-to-side-by-side-install-the-intel-ipp-70-library-on-windows/</link>
      <pubDate>Mon, 09 May 2011 00:00:00 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/how-to-side-by-side-install-the-intel-ipp-70-library-on-windows/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/how-to-side-by-side-install-the-intel-ipp-70-library-on-windows/</guid>
      <category>Intel® Integrated Performance Primitives Knowledge Base</category>
    </item>
    <item>
      <title>Installation PATH Pollution</title>
      <description><![CDATA[ <p>After installing the Intel® Composer XE package or the Intel® Parallel Studio XE package or the standalone Intel® IPP library you may find all sorts of new variables added to your system environment and/or appended to your existing environment variables, especially the system PATH environment variable. This is particularly troublesome if you installed both the 32-bit and the 64-bit versions of the tools on a 64-bit Windows development system.</p>
<p>What to do!?</p>
<p>The biggest problems, in this case, are modifications to the PATH environment variable. In particular, if you installed both the 32-bit and the 64-bit shared libraries (DLLs) that comprise the Intel IPP library, the Intel TBB library, the Intel MKL library and the Intel Compiler common library components you'll find both are now part of your PATH specification. In most cases you probably want to have just one architecture (32-bit or 64-bit) referenced in your default path.</p>
<blockquote>
<p>Sometimes the PATH modifications result in such a long PATH variable definition that it causes strange behavior when you try to run the Intel® Parallel Studio XE "Command Prompt" scripts from the Windows start menu (or the Microsoft Visual Studio "Command Prompt" scripts). It isn't always obvious that you are having trouble with these, but you may experience incomplete system configuration after running these scripts.</p>
</blockquote>
<p>Following is the net PATH that resulted from installing Intel® Composer XE update 2 on my system. From a DOS (cmd.exe) prompt I typed the command "path" and piped it through the old UNIX "tr" command to make it easier to read:</p>
<divree></divree>
<divree></divree>
<divree></divree>
<divree></divree>&gt; path | tr ;= \n<br />PATH<br />C:\Program Files (x86)\Intel\ComposerXE-2011\redist\intel64\tbb\vc10<br />C:\Program Files (x86)\Intel\ComposerXE-2011\redist\ia32\tbb\vc10<br />C:\Program Files (x86)\Intel\ComposerXE-2011\redist\intel64\ipp<br />C:\Program Files (x86)\Intel\ComposerXE-2011\redist\ia32\ipp<br />C:\Program Files (x86)\Intel\ComposerXE-2011\redist\intel64\mkl<br />C:\Program Files (x86)\Intel\ComposerXE-2011\redist\ia32\mkl<br />C:\Program Files (x86)\Intel\ComposerXE-2011\redist\intel64\compiler<br />C:\Program Files (x86)\Intel\ComposerXE-2011\redist\ia32\compiler<br />C:\Program Files (x86)\Intel\ComposerXE-2011\compiler\lib<br />C:\Windows\system32<br />C:\Windows<br />C:\Windows\System32\Wbem<br />C:\Windows\System32\WindowsPowerShell\v1.0\<br />C:\Program Files\ThinkPad\Bluetooth Software\<br />C:\Program Files\ThinkPad\Bluetooth Software\syswow64<br />C:\Program Files\TortoiseSVN\bin<br />C:\Program Files\Intel\WiFi\bin\<br />C:\Program Files\Common Files\Intel\WirelessCommon\<br />C:\Program Files\Common Files\Microsoft Shared\Windows Live<br />C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live<br />C:\Program Files (x86)\Windows Live\Shared<br />C:\Program Files\Intel\DMIX<br />C:\Program Files (x86)\QuickTime\QTSystem\<br />C:\Program Files (x86)\GnuWin32\bin<br />C:\Program Files (x86)\UnxUtils\bin<br />C:\Program Files (x86)\UnxUtils\usr\local\wbin<br />C:\PROGRA~2\strawberry\perl\bin<br />C:\Program Files (x86)\SysInternals<br />C:\Program Files (x86)\Windows Resource Kits\Tools\
<divre></divre>
<divre></divre>
<divre></divre>
<pre></pre>
<p>
<blockquote>You can get a Windows version of the UNIX "tr" utility by installing the "<a target="_blank" href="http://gnuwin32.sourceforge.net/packages.html">GnuWin32 CoreUtils</a>" on your system.</blockquote>
<p>It's easy to see what the installation added to my system PATH variable, all those extra directories at the beginning. If you're like me, you may have several editions of the libraries installed on your system (I work with the Intel® IPP library, so I'll use it as an example) and I really don't want my PATH setup this way. Instead, I prefer to specify these variable using one of the "Command Prompt" scripts that are installed by Composer XE and/or Microsoft Visual Studio and then amend my build environment using the supplied ippvars.bat file supplied in the %ipproot%\bin directory. (See the <em><a href="http://software.intel.com/en-us/articles/intel-ipp-70-library-getting-started/">getting started guide</a></em> for more info.)</p>
<p>These extra directories are included in the PATH environment to make it easier to locate the library DLL files at run time. So they are convenient if you are building an application that will use the standard distribution DLL files. You can still have some default directories placed in your PATH, but I recommend they be defined in your user's PATH, not the system PATH. This way, they'll be defined at the end of the PATH environment and any scripts you run will normally override the defaults by inserting additional definitions at the front of the PATH.</p>
<p>So, find the "System Properties" page on your system (there are multiple ways to get there, precise instructions vary as a function of the version of Windows you are using) and click the "Environment Variables.." button at the bottom of that dialog box, as shown below on a Windows 7 system:</p>
<p><img src="http://software.intel.com/file/35138"  /></p>
<p>From here, find the system PATH environment variable and remove all those extra directories that were inserted at the beginning of your PATH, which is the PATH environment variable definition located in the lower scroll box labeled "System variables":</p>
<p><img src="http://software.intel.com/file/35140"  /></p>
<p>Put the ones you want to keep, as part of your default build environment, in the PATH environment variable defined in the upper scroll box, labeled "User variables for &lt;%USERNAME%&gt;" – as shown above. And only insert the ones you want to use as your default, for example, only the 32-bit or only the 64-bit defintions, not both. Then, when you save the changes and open a new DOS prompt (cmd.exe) you'll see something more like the following:</p>
<divre></divre>
<divre></divre>
<divre></divre>
<divre></divre>&gt; path | tr ;= \n<br />PATH<br />C:\Windows\system32<br />C:\Windows<br />C:\Windows\System32\Wbem<br />C:\Windows\System32\WindowsPowerShell\v1.0\<br />C:\Program Files\ThinkPad\Bluetooth Software\<br />C:\Program Files\ThinkPad\Bluetooth Software\syswow64<br />C:\Program Files\TortoiseSVN\bin<br />C:\Program Files\Intel\WiFi\bin\<br />C:\Program Files\Common Files\Intel\WirelessCommon\<br />C:\Program Files\Common Files\Microsoft Shared\Windows Live<br />C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live<br />C:\Program Files (x86)\Windows Live\Shared<br />C:\Program Files\Intel\DMIX<br />C:\Program Files (x86)\QuickTime\QTSystem\<br />C:\Program Files (x86)\GnuWin32\bin<br />C:\Program Files (x86)\UnxUtils\bin<br />C:\Program Files (x86)\UnxUtils\usr\local\wbin<br />C:\PROGRA~2\strawberry\perl\bin<br />C:\Program Files (x86)\SysInternals<br />C:\Program Files (x86)\Windows Resource Kits\Tools\<br />C:\Program Files (x86)\Intel\ComposerXE-2011\\redist\intel64\tbb\vc10<br />C:\Program Files (x86)\Intel\ComposerXE-2011\\redist\intel64\ipp<br />C:\Program Files (x86)\Intel\ComposerXE-2011\\redist\intel64\mkl<br />C:\Program Files (x86)\Intel\ComposerXE-2011\\redist\intel64\compiler<br />C:\Program Files (x86)\Intel\ComposerXE-2011\\redist\intel64\compiler\lib
<divre></divre>
<divre></divre>
<divre></divre>
<pre></pre>
</p>
<p><br />You may not see the changes in all application until you logout and log back into Windows.</p> ]]></description>
      <link>http://software.intel.com/en-us/articles/installation-path-pollution-ipp-composer/</link>
      <pubDate>Thu, 31 Mar 2011 00:00:00 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/installation-path-pollution-ipp-composer/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/installation-path-pollution-ipp-composer/</guid>
      <category>Intel® Integrated Performance Primitives Knowledge Base</category>
    </item>
    <item>
      <title>Introduction to Linking with the Intel© IPP 7.0 Library</title>
      <description><![CDATA[ <p>There are two ways to link the Intel IPP library with your application: static and dynamic. Within the static solution there are two additional options: linking with the single-threaded static library or with the multi-threaded static library. There are probably an equal number of pros and cons for choosing between dynamic and static linking, this article serves only to illustrate the basic information you need to know regarding how to link, not which approach is "better<em>."</em></p>
<blockquote>
<p>The following instructions assume you have already configured your development system's environment to compile and link applications that will use the Intel IPP library. Please see the <a href="http://software.intel.com/en-us/articles/intel-ipp-70-library-getting-started/"><em>Intel® IPP 7.0 Library Getting Started</em></a> guide For more information on setting up your environment. <em>This KB article only applies to version 7.0 of the Intel IPP library.</em></p>
</blockquote>
<h2>Dynamic Linking</h2>
<p>The default linkage model used by most of the Intel IPP samples is dynamic (aka linking with shared objects). Dynamic linking against the <em>prebuilt</em> Intel IPP dynamic libraries involves linking with a "stub library" (Windows) or directly with the shared library objects (Linux). The dynamic linking method described here is "implicit linking," meaning that the libraries will be automatically loaded by the operating system at application run-time. (<em>Ignore these instructions if you intend to use "explicit dynamic linking, in which case you probably already know all this and don't need to be reading this article.</em>)</p>
<p>When you link against dynamic libraries the linker's search for external Intel IPP function names (e.g., the names of the Intel IPP function you are calling from within your application) is satisfied without actually including the Intel IPP function code in your application. In this case, the functions you are calling reside within the dynamic link library (DLL) or shared object (SO) files that you must distribute along with your application executable(s).</p>
<p>You can build and distribute a custom shared library (built from the Intel IPP static libraries) or you can distribute the prebuilt shared libraries that are provided with the Intel IPP library. Custom shared libraries are generally much smaller than the prebuilt shared libraries, because you can limit the number of functions included in the shared library file to only those required by your application. If you distribute the standard prebuilt shared libraries you will be including many functions that your application will never use; doing this does not impact the functionality or performance of your application (ignoring memory and/or paging requirements for the larger dynamic library), but it may substantially increase the number and size of the files you distribute to your customer(s).</p>
<p>The instructions for dynamic linking that follow assume you will use the default prebuilt shared library files with your application.</p>
<blockquote>
<p>Note: the prebuilt dynamic libraries are multi-threaded using the Intel OpenMP threading library. If this threading technique is incompatible with your application or runtime environment you should use the single-threaded static libraries. If your application requires a dynamic library, you can build a custom dynamic library from the single-threaded static libraries. Please read this <a href="http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-intel-ipp-threading-openmp-faq/">Intel IPP FAQ regarding threading and the OpenMP library</a> for more information.</p>
</blockquote>
<h3><span >Windows Dynamic Linking</span></h3>
<p>With the release of Intel IPP 7.0 the method by which you specify linkage dependencies has been significantly simplified. All that is required is to include the ipp.h header file in your source files (only those source files that reference Intel IPP functions or data structures need to include the ipp.h header file) and then define a special preprocessor label that will automatically instruct the linker as to which library files need to be linked against your application. In summary:</p>
<blockquote>
<p>#include "ipp.h"</p>
</blockquote>
<p>goes in your source files that reference Intel IPP functions and data structures and:</p>
<blockquote>
<p>/D_IPP_PARALLEL_DYNAMIC</p>
</blockquote>
<p>needs to be part of your compiler command line.</p>
<p>This technique works with either the MIcrosoft* Visual Studio* compiler (including the Visual Studio Express compiler) or with the Intel compiler. If you inspect the Intel IPP header files you'll see how this works. It uses a special "#pragma comment( lib, "libfilename" )" feature of these compilers. More information regarding this special pragma can be found here: <a target="_blank" href="http://msdn.microsoft.com/en-us/library/7f0aews7(v=vs.71).aspx">http://msdn.microsoft.com/en-us/library/7f0aews7(v=vs.71).aspx</a>.</p>
<h3><span >Linux Dynamic Linking</span></h3>
<p>Unfortunately, dynamic linking on the Linux platform requires slightly more effort than the Windows solution shown above. You must determine the names of the libraries you need to link against and include them in your link list. This article, <a href="http://software.intel.com/en-us/articles/selecting-the-intelr-ipp-libraries-needed-by-your-application/"><em>Selecting the Intel® Integrated Performance Primitives (Intel® IPP) libraries needed by your application</em></a>, can help you identify which library files you depend upon, if you know which domains the functions you are using belong to.</p>
<p>Once you've assembled the list of libraries (or domains) specify the names of the library files that correspond to those names and include the core library at the end of that list. For example, assume your application requires functions from the audio coding and the signal processing domains. Your link list would look like this:</p>
<blockquote>
<p>-lippac –lipps –lippcore</p>
</blockquote>
<p>The ippcore library is normally located last in the link list. If you inspect the makefiles distributed with the <a href="http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-samples-license-agreement/">Intel IPP samples</a> you will typically find this list defined as follows:</p>
<blockquote>
<p>IPPLIB = -lippac -lipps –lippcore</p>
</blockquote>
<p>with subsequent references to the macro $(IPPLIB) within the makefile.</p>
<blockquote>
<p>Note that the simplest way to determine which Intel IPP libraries your domain may be dependent upon is to inspect the #pragma definitions used in the include files to direct the Windows* linker (for example, the image compression domain – ippj.h – depends on the image processing and signal processing domains, as well as the core library). These pragma statements are included in the Linux* include files even though they are only used by the Windows* build environments. Not every function within a given domain is dependent upon the other domain libraries listed in the pragma lists!</p>
</blockquote>
<h2>Static Linking</h2>
<p>Static linking requires that you choose between one of two static library solutions: the single-threaded or the multi-threaded static library. Which library you choose to link against depends upon the needs of your application and your runtime environment. If you choose the multi-threaded static library you should understand that you will also need to include the <a href="http://software.intel.com/en-us/articles/openmp-and-the-intel-ipp-library/">Intel OpenMP library</a> with your application.</p>
<p>Working with static libraries is generally much simpler than dynamic libraries. When you link against an Intel IPP static library the function code is included as part of your application executable. So you only need to distribute your application executable(s) and, optionally, the Intel OpenMP dynamic library if you are using the multi-threaded static library.</p>
<blockquote>
<p>Note that when using static linking only the code required by those functions that you call from within your application are included with your executable. In other words, if you call ten Intel IPP functions from within your application then only the code for those ten functions (and any additional functions those ten functions reference) will be included in the final executable. The entire Intel IPP library is <em>not</em> included with your application when you link statically, only those functions that your application requires.</p>
</blockquote>
<p>Because the multi-threaded static libraries depend on the Intel OpenMP library, you will also have to link against that library. You can use either the dynamic edition of the Intel Intel OpenMP library or the static edition, regardless of the fact that you are linking against a static version of the Intel IPP library. Linking against the dynamic Intel OpenMP library is shown below, since this is the recommended solution. Likewise, linking statically against the Intel IPP library does not require that you also link statically against other system libraries, such as the C runtime library.</p>
<p>Keep in mind that when you link against the dynamic version of the Intel OpenMP library you will need to distribute that library file along with your executable to your customer(s). Linking statically with the Intel OpenMP library eliminates that requirement but presents the possibility of a resource conflict with other OpenMP libraries that may be used by other applications on the customer's runtime system.</p>
<h3><span >Windows Static Linking</span></h3>
<p>As above, the release of Intel IPP 7.0 simplifies the method by which you specify linkage dependencies on a Windows system. All that is required is to include the ipp.h header file in your source files and define the appropriate preprocessor label that specifies which static library option will be linked against your application. In summary:</p>
<blockquote>
<p>#include "ipp.h"</p>
</blockquote>
<p>goes in your source files that reference Intel IPP functions and data structures and either:</p>
<blockquote>
<p>/D_IPP_PARALLEL_STATIC</p>
</blockquote>
<p>or:</p>
<blockquote>
<p>/D_IPP_SEQUENTIAL_STATIC</p>
</blockquote>
<p>needs to be part of your compiler command line.</p>
<p>This technique works with either the MIcrosoft* Visual Studio* compiler (including the Visual Studio Express compiler) or with the Intel compiler. If you inspect the Intel IPP header files you'll see how it works. This technique uses a special "#pragma comment( lib, "libfilename" )" feature of these compilers. More information regarding this special pragma can be found here: <a target="_blank" href="http://msdn.microsoft.com/en-us/library/7f0aews7(v=vs.71).aspx">http://msdn.microsoft.com/en-us/library/7f0aews7(v=vs.71).aspx</a>.</p>
<p>The "_IPP_PARALLEL_STATIC" preprocessor label indicates that you want to use the multi-threaded static library. And using the "_IPP_SEQUENTIAL_STATIC" preprocessor label means that you wish to use the single-threaded static library.</p>
<h3><span >Linux Static Linking</span></h3>
<p>Static linking on the Linux platform requires slightly more effort than the Windows solution shown above but is simpler than the Linux dynamic linking solution. Unlike the Linux dynamic linking process, you do not need to determine the names of the libraries against which you need to link before including them in your link list. Instead, you can simply list all the Intel IPP static libraries in your link list and let the linker do the work for you.</p>
<p>If you want to use the multi-threaded libraries your link list macro definition in your makefile should look something like this:</p>
<blockquote>
<p>IPPLIB = -lippac_t -lippdc_t -lippcc_t -lippcv_t -lippj_t -lippdi_t -lippch_t -lippm_t -lippr_t -lippsc_t -lippvm_t -lippvc_t -lippi_t -lipps_t -lippcore_t -liomp5 -lpthread</p>
</blockquote>
<p>If you use the single-threaded libraries, your link list macro definition in your makefile should look something like this:</p>
<blockquote>
<p>IPPLIB = -lippac_l -lippdc_l -lippcc_l -lippcv_l -lippj_l -lippdi_l -lippch_l -lippm_l -lippr_l -lippsc_l -lippvm_l -lippvc_l -lippi_l -lipps_l -lippcore_l</p>
</blockquote>
<p>The ippcore library is always located last in the link list of Intel IPP library files, due to the default single-pass nature of the standard Linux linker. The lists shown above should take care of any inter-library dependencies. however, if you have interdependencies between libraries that cause link errors you may need to use the <em>-(</em> and -<em>)</em> options (or equivalent <em>--start-group</em> and <em>--end-group</em> options) around the list of libraries you are linking against to force the linker into multi-pass behavior, at the expense of slightly reduced linker performance. Or, you can repeat the name of a library on the link list to resolve circular dependencies, without resorting to the <em>-(</em> and <em>-)</em> options; by listing a library file a second time after the library or object code files that depends on that key library. The <em>nm</em> and/or <em>ldd</em> commands can be used to help determine external references and dependencies.</p>
<h2>Additional Information</h2>
<p><a target="_blank" href="http://software.intel.com/en-us/articles/performance-tools-for-software-developers-using-intel-ipp-threaded-static-libraries/">Using Intel® IPP Threaded Static Libraries</a><br /><a target="_blank" href="http://software.intel.com/en-us/articles/building-a-windows-application-using-intel-ipp/">Building a Windows* Application Using Intel® IPP</a><br /><a target="_blank" 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/">Compiling and Linking with Microsoft* Visual C++* and Intel® C++ Compiler</a><br /><a target="_blank" href="http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-intel-ipp-for-windows-lnk2001-unresolved-external-symbol-_ipp/">Error LNK2001: Unresolved External Symbol _ipp*</a><br /><a target="_blank" href="http://software.intel.com/en-us/articles/how-to-build-ipp-application/">How to Build an Intel IPP Application</a><br /><a target="_blank" href="http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-intel-ipp-intel-ipp-linkage-models-quick-reference-guide/">Intel® IPP - Intel® IPP Linkage Models - Quick Reference Guide</a> <br /><a target="_blank" href="http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-intel-ipp-library-dependencies-by-domain/">Intel® IPP- Library Dependencies by Domain</a> <br /><a target="_blank" href="http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-intel-ipp-threading-openmp-faq/">Intel® IPP - Threading / OpenMP* FAQ</a></p> ]]></description>
      <link>http://software.intel.com/en-us/articles/introduction-to-linking-with-intel-ipp-70-library/</link>
      <pubDate>Fri, 18 Feb 2011 00:00:00 -0800</pubDate>
      <comments>http://software.intel.com/en-us/articles/introduction-to-linking-with-intel-ipp-70-library/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/introduction-to-linking-with-intel-ipp-70-library/</guid>
      <category>Intel® Integrated Performance Primitives Knowledge Base</category>
    </item>
    <item>
      <title>How to find active speech level (audio level) using Intel® IPP function?</title>
      <description><![CDATA[ <p>Using the following piece of code, one can find audio level.</p>
<pre name="code" class="cpp">{
      Ipp32f tmpMinS,tmpMaxS;

      Ipp32f m_PeakAmpdB;

       ippsMinMax_32f(fileData, sizeSamples, &amp;tmpMinS, &amp;tmpMaxS);

      Ipp32f maxAbsSample = IPP_MAX(fabs(tmpMinS),fabs(tmpMaxS));

      if(maxAbsSample &gt; 0) {

            m_PeakAmpdB = 20.f * log10(maxAbsSample / 32768.f);

      } else {

      m_PeakAmpdB = -91.f;

      }

}

</pre>
<p><br />In this code, Amp(dB) = 20 lg(S/N), where S- random signal, N - noise. If S=1 then Amp(dB) = 20 lg(1/N) = -91 – this is silence.</p> ]]></description>
      <link>http://software.intel.com/en-us/articles/how-to-find-active-speech-level-audio-level-using-intel-ipp-function/</link>
      <pubDate>Sun, 23 Jan 2011 10:30:00 -0800</pubDate>
      <comments>http://software.intel.com/en-us/articles/how-to-find-active-speech-level-audio-level-using-intel-ipp-function/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/how-to-find-active-speech-level-audio-level-using-intel-ipp-function/</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® Software Development Tool Suites for Intel® Atom™ Processor Knowledge Base</category>
      <category>Intel® Integrated Performance Primitives Knowledge Base</category>
      <category>Intel® Parallel Composer Knowledge Base</category>
    </item>
    <item>
      <title>Using Intel® IPP threaded static libraries</title>
      <description><![CDATA[ <!--CTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dt-->
<table cellpadding="0" cellspacing="15" border="0">
<tbody>
<tr>
<td class="bodycopy">
<ul>
<li><a href="http://software.intel.com#1"><span ><span >Which version of Intel IPP begins to support threaded static libraries?</span></span></a></li>
<li><a href="http://software.intel.com#2"><span ><span >What is the advantage of using threaded static libraries?</span></span></a></li>
<li><a href="http://software.intel.com#3"><span ><span >How can I link with threaded static libraries?</span></span></a></li>
<li><a href="http://software.intel.com#4"><span ><span >How can I build Custom DLLs using threaded static libraries?</span></span></a></li>
<li><span ><a href="http://software.intel.com#4"><span ><span ><span >How can I control threading behavior in the threaded static libraries?</span></span></span></a></span></li>
</ul>
<p><strong><a name="1"></a><strong>Which version of Intel IPP begins to support threaded static libraries?</strong></strong></p>
<p>Intel® Integrated Performance Primitives (Intel® IPP) V5.3 Update 1 release introduced new threaded static libraries, which supports additional threading optimization in the static library. In the previous releases, multi-threading optimization is only supported in the dynamic libraries. <br /><br /><a name="2"></a><strong>What is the advantage of using threaded static libraries?</strong></p>
<p>Many applications use only a few Intel® IPP functions. Users can choose to link with threaded static libraries with the benefits of a small footprint from static linkage and threading optimization for multi-core processors. Users can also choose to build a <strong>customized DLL ( Please see \ipp-samples\advanced-usage\linkage\customso or customdll)</strong> from threaded static libraries. The customized DLL contains only the Intel IPP functions used in the users’ application. <br /><br /><a name="3"></a><strong><span ><span >How can I link with threaded static libraries?</span></span></strong></p>
<p><span lang="EN-US" >The Intel® IPP provides merged threaded static libraries <strong>"ipp*_t" (</strong>previous version named as "ipp*merged_t") in the <strong >lib</strong> directory. To statically link with threaded static libraries with CPU dispatch, users need to add  <strong>"ipp*_t"(</strong>previously as "*emerged", "*merged_t", " ippcorel_t"), and " <strong >libiomp5*</strong>" into linking command. If the application is not compiled with Intel Compiler, users also need to include additional Intel Compiler runtime libraries. Here are the runtime libraries needed for different platforms: <br /></span></p>
<p class="MsoNormal" ><strong ><span lang="EN-US" ><br />Windows*: span&gt;</span></strong></p>
<p class="MsoNormal" ><span lang="EN-US" >IA32 application: <strong >libircmt.lib libmmt.lib svml_dispmt.lib</strong></span></p>
<p class="MsoNormal" ><span lang="EN-US" >Intel 64 application: <strong >libircmt.lib libmmt.lib svml_dispmt.lib</strong></span></p>
<p class="MsoNormal" ><span lang="EN-US" >IA64 application: <strong >libircmt.lib libmmt.lib</strong></span></p>
<p class="MsoNormal" ><strong ><span lang="EN-US" >Linux*:</span></strong></p>
<p class="MsoNormal" ><span lang="EN-US" >IA32 application: <strong >libimf.a libsvml.a libirc.a</strong></span></p>
<p class="MsoNormal" ><span lang="EN-US" >Intel 64 application: <strong >libimf.a libsvml.a libirc.a</strong></span></p>
<p class="MsoNormal" ><span lang="EN-US" >IA64 application: <strong >libimf.a libirc.a</strong></span></p>
<p class="MsoNormal" ><strong ><span lang="EN-US" >Mac OS*:</span></strong></p>
<p class="MsoNormal" ><span lang="EN-US" >IA32 application: <strong >libimf.a libsvml.a libirc.a</strong></span></p>
<p class="MsoNormal" ><span lang="EN-US" >Intel 64 application: <strong >libimf.a libsvml.a libirc.a</strong></span></p>
<p class="MsoNormal" > </p>
<p class="MsoNormal" ><span lang="EN-US" >The following are some linkage examples for threaded static libraries: <br /></span></p>
<p class="MsoNormal" ><strong ><span lang="EN-US" ><br />&gt;icl myapp.c ipps_t.lib ippcore_t.lib libiomp5md.lib<sup>+  <br /></sup></span></strong><span lang="EN-US" >Linking with Intel IPP signal processing libraries for Windows*, and with Intel C++ Compiler. </span></p>
<p class="MsoNormal" > </p>
<p class="MsoNormal" ><strong ><span lang="EN-US" >&gt;cl myapp.c  ippi_t.lib ipps_t.lib ippcore_t.lib libiomp5md.lib<sup>+</sup> libircmt.lib libmmt.lib svml_dispmt.lib</span></strong></p>
<p class="MsoNormal" ><span lang="EN-US" >Linking with Intel IPP image processing and signal processing libraries for Windows*, and with</span><span lang="EN-US" >Microsoft* Visual C++*.NET</span><span lang="EN-US" >Compiler.</span></p>
<p class="MsoNormal" > </p>
<p class="MsoNormal" ><span lang="EN-US" >&gt; <strong >gcc myapp.c  libipp_t.a libippcore_t.a  libimf.a libsvml.a libirc.a -liomp5<sup>+</sup> -lpthread </strong></span></p>
<p class="MsoNormal" ><span lang="EN-US" >Linking with Intel IPP image processing libraries for Linux*, and with</span><span lang="EN-US" >GCC Compiler.<br /></span></p>
<p><span ><span ><strong>    <br /><sup>+</sup> :</strong><sup> </sup>It is recommended to use dynamic Intel OpenMP threading library libiomp5md.lib(libiomp5md.dll) / libiomp5.so<br />instead of the static one : libiomp5mt.lib/libiomp5.a.<strong> See more information in </strong><a s_oid="http://software.intel.com/en-us/articles/openmp-support-change/" s_oidt="0" target="_blank" href="http://software.intel.com/en-us/articles/openmp-support-change/"><strong>OpenMP Run-time Libraries Changed since Intel IPP 6.0 and Intel ...</strong></a><br /><br /><a name="4"></a><strong>How can I build Custom DLLs using threaded static libraries? <br /></strong></span><br /></span>Download the updated <a href="http://downloadcenter.intel.com/detail_desc.aspx?ProductID=574&amp;DwnldID=15516&amp;agr=N">Building Custom DLLs Sample</a> code. This sample can help users to create a new DLL that contains all the desired Intel® IPP functions from threaded static libraries <br /><br /><strong><span ><a name="5"></a><span >How can I control threading behavior in the threaded static libraries? <br /></span><br /></span></strong>Intel IPP implements multi-threading optimization with OpenMP* directives. Users can choose either OpenMP* environment variables (e.g OMP_NUM_THREADS) or Intel IPP threading APIs to control the threading behavior. Please refer to <a href="http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-intel-ipp-threading-openmp-faq">IPP Threading/OpenMP* FAQ</a> page for further information.</p>
<p><strong>Operating System:</strong></p>
<table cellpadding="0" cellspacing="0" border="0">
<tbody>
<tr>
<td class="xs">Red Hat* Linux, Windows* XP Professional x64 Edition, Mac OS*, SUSE* Linux 9.1, Windows* XP Starter Edition, Windows* XP Professional</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<table cellpadding="0" cellspacing="0" border="0">
<tbody>
<tr>
<td><img height="5" width="388" src="http://software.intel.com/file/6324" /></td>
</tr>
<tr>
<td height="10"> </td>
</tr>
</tbody>
</table> ]]></description>
      <link>http://software.intel.com/en-us/articles/performance-tools-for-software-developers-using-intel-ipp-threaded-static-libraries/</link>
      <pubDate>Sat, 08 Jan 2011 05:00:00 -0800</pubDate>
      <comments>http://software.intel.com/en-us/articles/performance-tools-for-software-developers-using-intel-ipp-threaded-static-libraries/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/performance-tools-for-software-developers-using-intel-ipp-threaded-static-libraries/</guid>
      <category>Intel® Integrated Performance Primitives Knowledge Base</category>
    </item>
    <item>
      <title>How to select different update of Intel® Composer XE 2011 for Linux* and Mac OS* X</title>
      <description><![CDATA[ <strong>Reference Number</strong> : dpd200194608, dpd200160631<br /><br /><strong>Version</strong> : 2011 (Compiler 12.0)<br /><br /><strong>Product</strong> : Intel Composer XE <br /><br /><strong>Operating System</strong> : Linux, Mac OS X<br /><br /><strong><br />Problem Description</strong> :  When an Intel Composer XE update is installed, the scripts <strong>compilervars.sh [.csh]</strong> in the bin directories of previously installed compilers no longer set the environment for the corresponding compiler or update, but set the environment for the most recent update instead. This applies to all components of Intel Composer XE that may be present: C/C++ and Fortran Compilers; Intel Debugger; Intel Threading Building Blocks; Intel Math Kernel Library and Intel Performance Primitives.<br /><br /><br /><strong>Workaround:</strong> <br />
<div id="art_pre_template">To select a compiler update other than the latest, please use the script <strong>compilervars_arch.sh [.csh] </strong>from the bin directory of the desired compiler version. Similarly, for other components of Intel Composer XE, use the scripts idbvars.sh, tbbvars.sh, mklvars.sh and ippvars.sh from the bin directory of the desired version, as needed.<br /><br /><strong>Resolution Status:<br /></strong>The issue has been fixed in Composer XE update #4.  To select a specific version, use the compilervars.[c]sh script from the version-specific directory.  For example, after installing update #4 on a system where update #3 was already installed:<br /><br />&gt; source /opt/intel/composerxe-2011.3.174/bin/compilervars.sh intel64  &lt;&lt;&lt;=== update #3<br /><br />&gt; ifort -V<br />Intel(R) Fortran Intel(R) 64 Compiler XE for applications running on Intel(R) 64, Version 12.0.3.174 Build 20110309<br /><br />&gt; source /opt/intel/composerxe-2011.4.191/bin/compilervars.sh intel64 &lt;&lt;&lt;== update #4<br /><br />&gt; ifort -V<br />Intel(R) Fortran Intel(R) 64 Compiler XE for applications running on Intel(R) 64, Version 12.0.4.191 Build 20110427<br /><br />As before, the script from the generic, non-version specific directory will initialize for the most recent update:<br /><br />&gt; source /opt/intel/composerxe-2011/bin/compilervars.sh intel64  &lt;&lt;&lt;=== non-version specific (most recent update)<br />&gt; ifort -V<br />Intel(R) Fortran Intel(R) 64 Compiler XE for applications running on Intel(R) 64, Version 12.0.4.191 Build 20110427<br /><br /><br /><br /><br /><br /><em>[DISCLAIMER: The information on this web site is intended for hardware system manufacturers and software developers. Intel does not warrant the accuracy, completeness or utility of any information on this site. Intel may make changes to the information or the site at any time without notice. Intel makes no commitment to update the information at this site. ALL INFORMATION PROVIDED ON THIS WEBSITE IS PROVIDED "as is" without any express, implied, or statutory warranty of any kind including but not limited to warranties of merchantability, non-infringement of intellectual property, or fitness for any particular purpose. Independent companies manufacture the third-party products that are mentioned on this site. Intel is not responsible for the quality or performance of third-party products and makes no representation or warranty regarding such products. The third-party supplier remains solely responsible for the design, manufacture, sale and functionality of its products. Intel and the Intel logo are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries. *Other names and brands may be claimed as the property of others.]<br /></em></div> ]]></description>
      <link>http://software.intel.com/en-us/articles/how-to-select-different-update-of-intel-composer-xe-2011-for-linux-and-mac-os-x/</link>
      <pubDate>Mon, 06 Dec 2010 08:00:00 -0800</pubDate>
      <comments>http://software.intel.com/en-us/articles/how-to-select-different-update-of-intel-composer-xe-2011-for-linux-and-mac-os-x/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/how-to-select-different-update-of-intel-composer-xe-2011-for-linux-and-mac-os-x/</guid>
      <category>Intel® C++ Compiler for Linux* Knowledge Base</category>
      <category>Intel® C++ Compiler for Mac OS X* Knowledge Base</category>
      <category>Intel® Fortran Compiler for Linux* Knowledge Base</category>
      <category>Intel® Fortran Compiler for Mac OS X* Knowledge Base</category>
      <category>Intel® Integrated Performance Primitives Knowledge Base</category>
      <category>Intel® Math Kernel Library Knowledge Base</category>
      <category>Intel® Threading Building Blocks Knowledge Base</category>
    </item>
    <item>
      <title>Questions and Answers from the Intel® Integrated Performance Primitives Webinar on October 26, 2010</title>
      <description><![CDATA[ <p>The following Q&amp;A session is the result of a webinar titled "<em>Super Charge Applications with: Intel® Integrated Performance Primitives A Component of Intel® Parallel Studio</em>" presented on October 26, 2010 by Walt Shands of Intel Corporation.</p>
<p>You can download and view <a target="_blank" href="http://software.intel.com/file/31673">a recording of the webinar </a>as well as <a target="_blank" href="http://software.intel.com/file/31671">a PDF file of the slides.</a></p>
<table cellpadding="3" cellspacing="3" border="0" >
<colgroup cellpadding="3" border="0" width="20" valign="top" ></colgroup><colgroup cellpadding="3" border="0" valign="middle" ></colgroup>
<tbody>
<tr>
<td>Q:</td>
<td>Does the Intel® Integrated Performance Primitives (Intel® IPP) library support non-Intel processors?</td>
</tr>
<tr>
<td>A:</td>
<td>Yes, the library initialization code determines which optimization to execute by evaluating the SIMD instructions supported by the processor and then "dispatching" to the appropriate optimization layer when calls to the library functions are made from your application. See <em><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/">Understanding CPU Dispatching in the Intel IPP</a> </em>for more information.</td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td>Q:</td>
<td>What happens when I run my Intel IPP application on an AMD* CPU or other non-Intel CPU?</td>
</tr>
<tr>
<td>A:</td>
<td>The Intel IPP library is optimized for use with Intel and compatible processors. Applications built with the Intel IPP library will execute on Intel processors and compatible AMD* processors, in 32-bit (IA-32) or 64-bit (Intel 64) addressing/register mode. For more information please see the article titled <em><a target="_blank" href="http://software.intel.com/en-us/articles/use-ipp-on-amd-processor/">Use Intel® IPP on Compatible AMD* Processors</a></em>.</td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td>Q:</td>
<td>I am using the Intel Atom processor, E6xx series; does Intel Parallel Studio 2011 work with this processor or must I move to the embedded solution?</td>
</tr>
<tr>
<td>A:</td>
<td>One of the key changes in the 7.0 release of the Intel IPP library is more complete support for Atom-specific optimizations within the standard library distribution. An Atom-specific optimization is included in both the static AND dynamic libraries in the 7.0 version of the library for all operating systems supported by the library. The 7.0 version of the library is included in Intel Parallel Studio 2011. Please read <em><a target="_blank" href="http://software.intel.com/en-us/articles/new-atom-support/">Intel® Atom™ Processors support in the Intel® Integrated Performance Primitives (Intel® IPP) Library</a></em> for more information.</td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td>Q:</td>
<td>When coding for the Intel Atom processor via the Intel IPP library, will my Intel IPP code port and scale for use with an Intel Core i7 processor?</td>
</tr>
<tr>
<td>A:</td>
<td>Yes, if you use the standard Intel IPP "dispatched model" libraries your code will run properly on either an Intel Atom processor or Intel Core i7 processor -- the only situation where this does not work is when you build using a non-dispatched application, but this is something you would choose to do, not the default case... Please read the article titled <em><a target="_blank" href="http://software.intel.com/en-us/articles/understanding-simd-optimization-layers-and-dispatching-in-the-intel-ipp-70-library/">Understanding SIMD Optimization Layers and Dispatching in the Intel® IPP 7.0 Library</a></em> for more information.</td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td>Q:</td>
<td>Which compilers are supported by the Intel IPP library?</td>
</tr>
<tr>
<td>A:</td>
<td>You are not required to use the Intel compiler to build your Intel IPP applications. On the Windows platform any compiler compatible with code generated by the Microsoft* Visual Studio* C/C++ compiler should work (including the Intel® C/C++ Compiler for Windows*). On Linux platforms you can use either gcc or the Intel C/C++ Compiler for Linux*. See this <em><a target="_blank" href="http://software.intel.com/en-us/articles/intel-ipp-70-library-system-requirements/">Intel IPP ibrary system requirements KB article</a></em> for more information.</td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td>Q:</td>
<td>Which version of the Intel IPP library is included with Intel Parallel Studio 2011?</td>
</tr>
<tr>
<td>A:</td>
<td>The initial release of Intel Parallel Studio 2011 contains the first release of the Intel IPP library 7.0 for Windows (v7.0.0). Subsequent releases of the Intel Parallel Studio product (specifically, the Intel Composer bundle) may include updates to this initial release. These article links will take you to tables showing which version of the Intel IPP library is included in the <a target="_blank" href="http://software.intel.com/en-us/articles/which-version-of-ipp--mkl--tbb-is-installed-with-intel-compiler-professional-edition/">Intel Compiler Pro products</a> and as part of the <a target="_blank" href="http://software.intel.com/en-us/articles/which-version-of-the-intel-ipp-intel-mkl-and-intel-tbb-libraries-are-included-in-the-intel-composer-bundles/">Intel Composer bundles</a>.</td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td>Q:</td>
<td>Are Microsoft* Visual Studio solution and/or project files included with the Intel IPP library?</td>
</tr>
<tr>
<td>A:</td>
<td>Most of the Intel IPP sample files for Windows include a solution file that is compatible with Visual Studio 2005, 2008 or 2010. If a solution or project file is not provided there is normally a batch file and/or makefile that can be used to build the sample from the Windows command-line. In some cases you will find both a solution file and a batch/makefile. Please refer to each particular sample’s readme.htm file which contain information on how to build the sample. The <a target="_blank" href="http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-samples-license-agreement/">free samples can be downloaded</a> directly from the <a target="_blank" href="http://www.intel.com/software/products/ipp">Intel IPP web site</a>.</td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td>Q:</td>
<td>Can I use Intel IPP functions from my C# or VB.Net application?</td>
</tr>
<tr>
<td>A:</td>
<td>Yes, wrappers are included in the <a target="_blank" href="http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-samples-license-agreement/">Intel IPP samples</a> illustrating how to call the Intel IPP functions from within the Microsoft .NET environment.</td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td>Q:</td>
<td>Is the Intel IPP library multi-threaded?</td>
</tr>
<tr>
<td>A:</td>
<td>Yes, approximately 15-20% of the functions within the multi-threaded variants of the library are threaded with using Intel OpenMP threading API for use on multi-core processors. You may find full list of threaded IPP functions in "<a target="_blank" href="http://software.intel.com/en-us/articles/threading-and-intel-integrated-performance-primitives/">ThreadedFunctionsList.txt</a>" file which is included in documentation section of IPP install package.  The library is provided in a multi-threaded dynamic-link format, a multi-threaded static-link format and a single-threaded static-link format. All variants of the library are thread-safe. Please read <a target="_blank" href="http://software.intel.com/en-us/articles/openmp-and-the-intel-ipp-library/"><em>OpenMP and the Intel® IPP</em> </a>for more information about the multi-threaded implementation of the library.</td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td>Q:</td>
<td>Does Intel IPP 7.0 still use the Intel OpenMP library for multi-threading? Does it utilize Intel Cilk Plus or Intel TBB?</td>
</tr>
<tr>
<td>A:</td>
<td>Version 7.0 of the Intel IPP continues to use the Intel OpenMP library to implement threading within the low-level primitives. However, those <a target="_blank" href="http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-samples-license-agreement/">high-level samples and libraries</a> (such as the data compression libraries and UIC image processing class library) that incorporate multi-threading <em>outside of the Intel IPP functions</em> use a variety of threading techniques. In these cases they may use the Intel OpenMP library, native threading or some other threading mechanism to implement multi-threading within the high-level application. In addition, the Intel IPP Unified Image Codecs high-level sample in Intel IPP v 7.0 use OpenMP for threading in JPEG and JPEG2000 codecs , and uses the Intel TBB for threading in JPEG-XR codec.<br /><br />We continue to evaluate other parallel development models including Intel® Cilk™ Plus, Intel® Threading Building Blocks (Intel® TBB) and Intel® Array Building Blocks (Intel® ArBB) to see how these threading techniques can be integrated into future releaes of the Intel IPP library. For more information about these threading techniques please see the <a target="_blank" href="http://software.intel.com/en-us/articles/intel-parallel-building-blocks/">Intel® Parallel Building Blocks </a>web pages.</td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td>Q:</td>
<td>Can we choose how many threads are used by the Intel IPP libary and assign which CPU core will execute the Intel IPP functions?</td>
</tr>
<tr>
<td>A:</td>
<td>Yes, you can control the number of threads used by the Intel IPP library via the ippSetNumThreads() function call. Additionally, you can control, at a coarse level, how multiple hardware threads are assigned to available cores and Intel Hyper-Threads via the ippSetAffinity() function. Please read <a target="_blank" href="http://software.intel.com/en-us/articles/control-openmp-thread-affinity-with-ippsetaffinity-function/">Control OpenMP Thread Affinity with the ippSetAffinity() Function</a> for more information. If you wish to implement finer control over thread affinity you need to employ the Intel OpenMP library API, which is described within the <a target="_blank" href="http://www.intel.com/software/products/compilers">Intel Compiler documentation</a>.</td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td>Q:</td>
<td>How do I tell which library file is required by the linker? For example if I am using: ippsInterpolateC_NR_16s(...)?</td>
</tr>
<tr>
<td>A:</td>
<td>When using Intel Parallel Studio, within the Microsoft Visual Studio development environment, the selection of the library file is automatic. All that is required is that you assert "Use IPP" in the configuration dialog box and "#include &lt;ipp.h&gt;" within your application source file. The ipp.h header file will direct the linker to the correct library file for linking. If you wish to setup your project file manually, please read <em><a target="_blank" href="http://software.intel.com/en-us/articles/simplified-link-instructions-for-the-ipp-library/">Simplified Link Instructions for the IPP Library</a></em> for more information.<br /><br />The IPP functions are contained within the library that contains the prefix of the header file in which the function is declared. For example, the ippsCopy_8u function is declared in the ipps.h file, so you will need to link with the ipps.lib library (for dynamic linkage). Check this article "<a target="_blank" href="http://software.intel.com/en-us/articles/selecting-the-intelr-ipp-libraries-needed-by-your-application/">Selecting the Intel IPP libraries needed by your application</a>" for more information.</td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td>Q:</td>
<td>Any plans to support GPU rendering with Larrabee?</td>
</tr>
<tr>
<td>A:</td>
<td>At the ISC’10 conference, in June 2010, Intel announced the Intel MIC Architecture to be the new direction for many-core computing. As a result the Larrabee project is no longer targeting discrete graphics. We may include support for GPU rendering as part of the Intel IPP library in future editions of the IPP library, including GEN-based graphics in the upcoming processor codenamed Sandy Bridge; however, no such support is part of version 7.0 of the library.</td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td>Q:</td>
<td>Some time ago I read about Deferred Mode Image Processing in the Intel IPP, is DMIP included in the latest release? If so, for which platforms?</td>
</tr>
<tr>
<td>A:</td>
<td>Yes, the DMIP sample is part of the Intel IPP version 7.0 release that is included with Intel Parallel Studio 2011. You must <a target="_blank" href="http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-samples-license-agreement/">download the Intel IPP samples</a> to obtain the DMIP sample. DMIP is only available on the Intel IPP for Windows platform; other operating systems are not supported by DMIP.</td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td>Q:</td>
<td>Any plans to support gaming consoles in the future?</td>
</tr>
<tr>
<td>A:</td>
<td>The Intel IPP library only supports Intel processors and compatible processors and platforms. If your gaming console is based on an Intel or compatible processor and the operating system for the gaming console is compatible with one of those supported by the Intel IPP library, then you might be able to use the Intel IPP library with an application built for a gaming console. Please note that no gaming consoles are validated platforms for the Intel IPP library. See the <em><a target="_blank" href="http://software.intel.com/en-us/articles/intel-ipp-70-library-system-requirements/">Intel® IPP 7.0 Library System Requirements</a></em> page for more information on validated platforms.</td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
</tbody>
</table> ]]></description>
      <link>http://software.intel.com/en-us/articles/questions-and-answers-from-the-intel-integrated-performance-primitives-webinar-on-october-26-2010/</link>
      <pubDate>Mon, 25 Oct 2010 06:00:00 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/questions-and-answers-from-the-intel-integrated-performance-primitives-webinar-on-october-26-2010/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/questions-and-answers-from-the-intel-integrated-performance-primitives-webinar-on-october-26-2010/</guid>
      <category>Intel® IPP</category>
      <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>How to call Intel® AVX based code with Intel® IPP version 6.1</title>
      <description><![CDATA[ <br />
<div id="art_pre_template">Intel® AVX optimized code is available in the 64-bit version of the Intel® IPP 6.1 library.<br />Intel® IPP library version 7.0 contains both 32 and 64 bits versions of Intel® AVX code.<br /><br />Intel® Advanced Vector Extensions (Intel® AVX) is a 256-bit SIMD instruction set designed to provide even higher <span >performance for applications that are floating-point intensive. The first implementation of Intel® AVX optimized code was provided in Intel® IPP library version 6.1 update 1. Within the 6.1 and 7.0 versions of the IPP library, approximately 270 functions have been hand-optimized with new Intel® AVX instructions. Please, see the list of these functions in <a href="http://software.intel.com/en-us/articles/intel-ipp-functions-optimized-for-intel-avx-intel-advanced-vector-extensions/">Intel® IPP Functions Optimized for Intel® Advanced Vector Extensions (Intel® AVX) article.</a><br /></span><b><span ><br /></span></b></div>
<div id="art_pre_template"><b><span >We have received many requests asking “how to call AVX code into IPP 6.1 and all latest updates of this version.” <br />So, the main purpose of this article is to tell how to do this.<br /><br /><strong>First, please make sure you have right hardware and OS, which support Intel® AVX code.</strong> <br /><br />ippGetCpuFeatures() provides information regarding the features of the processor used in your computer system. 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>Mask the value returned by <i>ippGetCpuFeatures()</i> with <em>ippCPUID_AVX (0x0100</em>) to determine if the Intel AVX SIMD instructions are supported by your processor (ippGetCpuFeatures() &amp; ippCPUID_AVX is TRUE).</p>
<p>Additionally, to determine if your operating system also supports the Intel AVX instructions, mask the returned value from <i>ippGetCpuFeatures()</i> with <i>ippAVX_ENABLEDBYOS </i>(0x0200).<br /><br />
<table frame="hsides" cellpadding="4" rules="all" border="1">
<tbody>
<tr>
<td headers="d129969e137 " width="NaN%" valign="top" class="cellrowborder">256</td>
<td headers="d129969e139 " width="NaN%" valign="top" class="cellrowborder">
<p>ippCPUID_AVX</p>
</td>
<td headers="d129969e141 " width="NaN%" valign="top" class="cellrowborder">The processor supports Intel<sup>®</sup> Advanced Vector Extensions (Intel<sup>®</sup> AVX) instruction set</td>
<td headers="d129969e143 " width="NaN%" valign="top" class="row-nocellborder">8</td>
</tr>
<tr>
<td headers="d129969e137 " width="NaN%" valign="top" class="cellrowborder">512</td>
<td headers="d129969e139 " width="NaN%" valign="top" class="cellrowborder">
<p>ippAVX_ENABLEDBYOS</p>
</td>
<td headers="d129969e141 " width="NaN%" valign="top" class="cellrowborder">The operating system supports Intel<sup>®</sup> AVX</td>
<td headers="d129969e143 " width="NaN%" valign="top" class="row-nocellborder">9</td>
</tr>
</tbody>
</table>
<br />Please notes, the AVX require both processor and OS supported.  The AVX code may not enabled if only the processor type is  matched.  </p>
</span></b></div>
<div id="art_pre_template"><b><span >Second, <b>Before calling the first IPP function, <span >you have to make 2 successive calls of the following functions one after another :</span><br /></b><br /><b>ippEnableCpu(ippCpuAVX); <br />ippInit(); <br /></b><br />In the case of if you call only one of these functions, the AVX code is not be enabled.<br /><br />These calls are needed as for static and as well as for dynamic linking modes with dispatching.<br /><br /></span></b></div>
<div id="art_pre_template"><b><span >Also, it should be noted that in the case you need to create Single-Processor executable to run your application on AVX-based CPU only (aka Static Linking for One Processor), then you can do the following steps: <br /></span><br /></b></div>
<div id="art_pre_template"><b><span >1. Add the files ipp*merged.lib to your project and its source tree. <br />2. Create the header file which contains the list of functions for AVX dispatching ( in the current implementation, IPP doesn’t       contain such list of functions for AVX dispatching) :<br />Go to the &lt;IPPROOT&gt;\tools\staticlib\ directory and create a new header file by copying, say, ipp_y8.h to ipp_e9.h and then     edit this new ipp_e9.h file by replacing all “y8” prefixes by “e9” into the name of the functions. Please, pay attention that       this list of functions has to be aligned with the list of functions pointed in Intel® IPP Functions <a href="http://software.intel.com/en-us/articles/intel-ipp-functions-optimized-for-intel-avx-intel-advanced-vector-extensions/">Optimized for Intel®         Advanced Vector Extensions (Intel® AVX)</a> article.<br />3. ipp_e9.h header file must be included before the other Intel IPP header files.<br />4. Add the file ipp\lib\ippcorel.lib to your project and its source tree.<br />5. Include Intel IPP header file(s) as normal, after the above conversion header.<br />6. Call Intel IPP functions normally from your application.<br /></span><br /></b></div>
<div id="art_pre_template"><b><span ><b>PS:</b><br />Starting version 7.0 AVX code is supported in the usual way - nothing special should be done in the case of dynamic linking (corresponding functions will be called through IPP dispatching mechanism); for the static linking, before calling any IPP function – <b>call ippInit().</b><br /></span><br /></b></div>
<div id="art_pre_template"><b><br /></b></div>
<div id="art_pre_template"><b>More information about Intel(R) AVX is available at:<br /><span >http://software.intel.com/en-us/avx/ .<br />http://software.intel.com/en-us/articles/intel-avx-optimization-in-intel-mkl-v103/<br />http://software.intel.com/en-us/articles/how-to-compile-for-intel-avx/</span><br /><br /></b></div>
<div id="art_pre_template"><b><br /></b></div>
<div id="art_pre_template"><b><br /></b></div>
<p>
<table align="center" frame="box" width="85%" cellpadding="5" cellspacing="0" rules="all" border="1">
<tbody>
<tr>
<th align="left" valign="middle" >Optimization Notice </th>
</tr>
<tr bgcolor="#ccecff">
<td>
<p>The Intel® Integrated Performance Primitives (Intel® IPP) library contains functions that are more highly optimized for Intel microprocessors than for other microprocessors. While the functions in the Intel® IPP library offer optimizations for both Intel and Intel-compatible microprocessors, depending on your code and other factors, you will likely get extra performance on Intel microprocessors.</p>
<p>While the paragraph above describes the basic optimization approach for the Intel® IPP library as a whole, the library may or may not be optimized to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include Intel® Streaming SIMD Extensions 2 (Intel® SSE2), Intel® Streaming SIMD Extensions 3 (Intel® SSE3), and Supplemental Streaming SIMD Extensions 3 (Intel® 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.</p>
<p>Intel recommends that you evaluate other library products to determine which best meets your requirements.</p>
</td>
</tr>
</tbody>
</table>
</p> ]]></description>
      <link>http://software.intel.com/en-us/articles/How-to-call-AVX-based-code-in-IPP-v-6-1/</link>
      <pubDate>Mon, 11 Oct 2010 00:00:00 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/How-to-call-AVX-based-code-in-IPP-v-6-1/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/How-to-call-AVX-based-code-in-IPP-v-6-1/</guid>
      <category>Intel® AVX</category>
      <category>Intel® Integrated Performance Primitives Knowledge Base</category>
      <category>Server Developer Community</category>
    </item>
    <item>
      <title>Use Intel IPP in Intel® Parallel Studio</title>
      <description><![CDATA[ <p>Intel® IPP is part of Intel® Parallel Studio.  Once you install Parallel Studio, IPP will be installed as one component of Intel® Parallel Composer automatically.  (See detials in <a href="http://software.intel.com/en-us/articles/new-directory-structure-and-library-naming-in-ipp/">the IPP library layout in Parallel Studio</a>.) This privodes us a easy way to use IPP in Parallel Studio.  This article describes how to develop IPP application in Intel® Parallel Studio in two steps. <br /><br /><b>Preparation</b> <br />Create a Visual C++ project for your application <br />or <br />There are ready IPP samples (Microsoft Visual Studio 2005 Project) located in the Parallel Studio install directory <br />For example, enter C:\Program Files\Intel\Parallel Studio 2011\Composer\Samples\en_US\IPP\ipp-samples-string\ipp-samples\string-processing\ippgrep. Double click ippgrep.sln. The MSVC solution will be open in Visual Studio 2005/2008/2010.  <br /><br />Then from the <b>Menu » Project </b> (or right-click the Project in Solution Explorer) select<b> Intel Parallel Composer 2011 »</b> <b>Using Intel C++ .... .</b> The project will be converted to Intel Composer project. <br /><br /><b>Use IPP In  Intel® Parallel Composer<br />Step 1</b>. <b>write IPP code <br /></b>include IPP header file and call IPP function in your code <img src="http://software.intel.com/file/19468" alt="build1.JPG" title="build1.JPG" width="878" height="518" /></p>
<p><b>Step 2</b> . <b>Link IPP library in your application<br /></b>From the <b>Menu &gt;&gt; project </b> (or right-click the Project in Solution Explorer) select<b> Intel Parallel Composer 2011 »</b> <b>Select Build Components, Check the box Use IPP. </b>The setting will link IPP dynamic library atomatically.  If your application is build sucessfully, you can run the exe. <br /> <img src="http://software.intel.com/file/29926" alt="Composer_2011_ipp_2005.JPG" title="Composer_2011_ipp_2005.JPG" /></p>
<p><b> Note<br /></b>1. If you'd like link the IPP static library, please download and install IPP static library first.  See Download IPP Static Libraries for Intel Parallel Studio.  <br />2. If you'd like link the IPP library and set IPP library path manually,  you may follow the steps on <a href="http://software.intel.com/en-us/articles/compiling-and-linking-ipp-applications-with-intel-c-compilers/">Compiling and Linking Intel® IPP with latest Intel® C++ Compilers</a> <br />3. If you run into any IPP issues, please refer to the KB <a href="http://software.intel.com/en-us/articles/how-to-build-ipp-application/"><b>How to Build an Intel IPP Application </b></a>=&gt; <b>Troubleshooting - Compile and Linking Errors</b> or report your issue to <a href="http://software.intel.com/en-us/forums/intel-integrated-performance-primitives/"><b>IPP forum</b></a>.</p> ]]></description>
      <link>http://software.intel.com/en-us/articles/use-intel-ipp-in-intel-parallel-composer/</link>
      <pubDate>Wed, 01 Sep 2010 21:00:00 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/use-intel-ipp-in-intel-parallel-composer/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/use-intel-ipp-in-intel-parallel-composer/</guid>
      <category>Intel® Integrated Performance Primitives Knowledge Base</category>
      <category>Intel® Parallel Composer Knowledge Base</category>
    </item>
  </channel></rss>
