Questions and Answers from the Intel® Integrated Performance Primitives Webinar on October 26, 2010

The following Q&A session is the result of a webinar titled "Super Charge Applications with: Intel® Integrated Performance Primitives A Component of Intel® Parallel Studio" presented on October 26, 2010 by Walt Shands of Intel Corporation.

You can download and view a recording of the webinar as well as a PDF file of the slides.

Q: Does the Intel® Integrated Performance Primitives (Intel® IPP) library support non-Intel processors?
A: 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 Understanding CPU Dispatching in the Intel IPP for more information.
   
Q: What happens when I run my Intel IPP application on an AMD* CPU or other non-Intel CPU?
A: 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 Use Intel® IPP on Compatible AMD* Processors.
   
Q: 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?
A: 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 Intel® Atom™ Processors support in the Intel® Integrated Performance Primitives (Intel® IPP) Library for more information.
   
Q: 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?
A: 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 Understanding SIMD Optimization Layers and Dispatching in the Intel® IPP 7.0 Library for more information.
   
Q: Which compilers are supported by the Intel IPP library?
A: 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 Intel IPP ibrary system requirements KB article for more information.
   
Q: Which version of the Intel IPP library is included with Intel Parallel Studio 2011?
A: 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 Intel Compiler Pro products and as part of the Intel Composer bundles.
   
Q: Are Microsoft* Visual Studio solution and/or project files included with the Intel IPP library?
A: 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 free samples can be downloaded directly from the Intel IPP web site.
   
Q: Can I use Intel IPP functions from my C# or VB.Net application?
A: Yes, wrappers are included in the Intel IPP samples illustrating how to call the Intel IPP functions from within the Microsoft .NET environment.
   
Q: Is the Intel IPP library multi-threaded?
A: 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 "ThreadedFunctionsList.txt" 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 OpenMP and the Intel® IPP for more information about the multi-threaded implementation of the library.
   
Q: Does Intel IPP 7.0 still use the Intel OpenMP library for multi-threading? Does it utilize Intel Cilk Plus or Intel TBB?
A: Version 7.0 of the Intel IPP continues to use the Intel OpenMP library to implement threading within the low-level primitives. However, those high-level samples and libraries (such as the data compression libraries and UIC image processing class library) that incorporate multi-threading outside of the Intel IPP functions 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.

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 Intel® Parallel Building Blocks web pages.
   
Q: Can we choose how many threads are used by the Intel IPP libary and assign which CPU core will execute the Intel IPP functions?
A: 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 Control OpenMP Thread Affinity with the ippSetAffinity() Function 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 Intel Compiler documentation.
   
Q: How do I tell which library file is required by the linker? For example if I am using: ippsInterpolateC_NR_16s(...)?
A: 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 <ipp.h>" 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 Simplified Link Instructions for the IPP Library for more information.

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 "Selecting the Intel IPP libraries needed by your application" for more information.
   
Q: Any plans to support GPU rendering with Larrabee?
A: 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.
   
Q: 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?
A: Yes, the DMIP sample is part of the Intel IPP version 7.0 release that is included with Intel Parallel Studio 2011. You must download the Intel IPP samples to obtain the DMIP sample. DMIP is only available on the Intel IPP for Windows platform; other operating systems are not supported by DMIP.
   
Q: Any plans to support gaming consoles in the future?
A: 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 Intel® IPP 7.0 Library System Requirements page for more information on validated platforms.
   
For more complete information about compiler optimizations, see our Optimization Notice.