A while back I published a table showing the approximate number of functions that exist in the IPP library, sorted into the domains or categories into which those functions belong (see 12,000 IPP Functions! Where to begin? (part 1) and (part 2) posts). The table is reproduced below:
| IPP Domain | IPP Header File | "adorned" count | "unadorned" count |
| core | ippcore.h | 24 | 24 |
| audio coding | ippac.h | 194 | 110 |
| color conversion | ippcc.h | 484 | 163 |
| string processing | ippch.h | 90 | 47 |
| cryptography | ippcp.h | 562 | 501 |
| computer vision | ippcv.h | 617 | 145 |
| data compression | ippdc.h | 140 | 129 |
| data integrity | ippdi.h | 41 | 41 |
| image processing | ippi.h | 3487 | 248 |
| image compression | ippj.h | 235 | 152 |
| matrix arithmetic | ippm.h | 788 | 33 |
| realistic rendering | ippr.h | 51 | 37 |
| signal processing | ipps.h | 3265 | 434 |
| speech coding | ippsc.h | 435 | 236 |
| speech recognition | ippsr.h | 644 | 176 |
| video coding | ippvc.h | 479 | 325 |
| vector arithmetic | ippvm.h | 391 | 53 |
| 11,927 | 2,854 |
For reference, the "adorned" function list is the raw count of functions found in the library (this table applies to version 6.1.4 of the IPP library). The "unadorned" list represents, in essence, the core set of functions, irrespective of the types of data operations available for that function. So "unadorned" functions represent variations on a theme; they are the variations of the input and output data types that are available for these functions.
That table contains an overwhelming number of functions! Let's look at a real application and illustrate just how many IPP functions it does take to use IPP in an application.
One of the most popular free IPP samples is an adaptation of the IJG library, an open-source product developed by the Independent JPEG Group (IJG). The IJG has developed a popular JPEG library that is used by many applications to compress and decompress JPEG images. The IJG library sample that is part of the free IPP samples has been adapted to use the IPP library, for significantly faster performance.
How many IPP functions were required to make this adaptation? Here's the complete list of "unadorned" functions:
ippiBGRToY_JPEG_8u_C3C1R()
ippiBGRToYCbCr_JPEG_8u_C3P3R()
ippiCMYKToYCCK_JPEG_8u_C4P4R()
ippiDCTQuantFwd8x8LS_JPEG_8u16s_C1R()
ippiDCTQuantInv8x8LS_JPEG_16s8u_C1R()
ippiDecodeHuffman8x8_JPEG_1u16s_C1()
ippiDecodeHuffmanSpecGetBufSize_JPEG_8u()
ippiDecodeHuffmanSpecInit_JPEG_8u()
ippiDecodeHuffmanStateGetBufSize_JPEG_8u()
ippiDecodeHuffmanStateInit_JPEG_8u()
ippiEncodeHuffman8x8_JPEG_16s1u_C1()
ippiEncodeHuffmanRawTableInit_JPEG_8u()
ippiEncodeHuffmanSpecGetBufSize_JPEG_8u()
ippiEncodeHuffmanSpecInit_JPEG_8u()
ippiEncodeHuffmanStateGetBufSize_JPEG_8u()
ippiEncodeHuffmanStateInit_JPEG_8u()
ippiGetHuffmanStatistics8x8_JPEG_16s_C1()
ippiQuantFwdTableInit_JPEG_8u16u()
ippiRGBToY_JPEG_8u_C3C1R()
ippiRGBToYCbCr_JPEG_8u_C3P3R()
ippiSampleDownRowH2V1_Box_JPEG_8u_C1()
ippiSampleDownRowH2V2_Box_JPEG_8u_C1()
ippiSampleUpRowH2V1_Triangle_JPEG_8u_C1()
ippiSampleUpRowH2V2_Triangle_JPEG_8u_C1()
ippiYCbCrToBGR_JPEG_8u_P3C3R()
ippiYCbCrToRGB_JPEG_8u_P3C3R()
ippiYCCKToCMYK_JPEG_8u_P4C4R()
Only twenty-seven out of nearly 12,000 functions! So no need to be put off by the large number of functions. Your IPP application will typically require only a few dozen functions to achieve substantial performance improvements.
And the most appealing benefit is that your performance improves with successive generations of processors! Each new generation of the IPP library contains enhancements for new processor generations. So the IJG library example referenced above continues to extract additional performance improvements with new generations of the library, even though the application code does not have to be rewritten. Because the IPP library adapts to new processor architectures, you don't have to figure it out, the library does that for you.
How do you get started with IPP? If you've got Intel Compiler Pro or Intel Parallel Studio on your system you've already got a copy of the IPP library! If you don't have either of those two tools you can always download an evaluation copy of the library. While the IPP library is a great tool for use with the Intel compiler, the Intel compiler is not a requirement for using the library. The IPP library can be used with your favorite Windows, Linux, or Mac compiler for some tremendous performance improvements.
Download a free evaluation copy of the IPP library at the main IPP product page. And don't forget to download the free IPP samples, to help you get started even faster.
