I remember that Mr. Dudnik wrote on one of the old threads that ipp works by CPU features, not detected processor type.
But the documentation says different:
Indicates that the most appropriate static code of the Intel IPP software is successfully set.
Indicates that the static version of generic code for Intel Architecture is set.
Indicates that there is no such operation in the dynamic version of the library.
So, am I getting the (for example SSE) optimized versions on an AMD processor, or not? Is there a way being sure about which version is called? (Other than installing a debugger on the target machine, and checking the actual prefixes of called functions?)
Youmay checkthe actual optimiziedversionbyadding the belowdetect code in your code, for example,
ippStaticInit(); // using the static merged libraries
// Print the version of ipp being used
const IppLibraryVersion* lib = ippiGetLibVersion();
printf("%s %s %d.%d.%d.%dn", lib->Name, lib->Version,lib->major, lib->minor, lib->majorBuild, lib->build);
it will return theactual optimized code on your target machine, likeon my core 2 duo processor, it returns "v8" code
ippiv8l.lib 6.1 build 137.20 188.8.131.529
For details, please see
IA-32 Intel architecture
o px - C-optimized for all IA-32 processors
o a6 - Optimized for Pentium III processors (it is removed in Intel IPP v6.0)
o w7 - Optimized for Pentium 4 processors
o t7 - Optimized for Pentium 4 processors with Streaming SIMD Extensions 3 (SSE3)
o v8 - New Optimizations for 32-bit applications on Intel CoreTM2 and Intel Xeon 5100 processors
o p8 - New Optimizations for 32-bit applications on 45nm Intel CoreTM2 Duo (Penryn) family processors and Intel CoreTM i7 processors (Nehalem)
o s8 - Optimized for Intel AtomTM Processors ( new in Intel IPP v6.0)
you can also usefunction ippGetCpuFeatures() to detect the processor features. It is new feature since V6.0.