Intel® Integrated Performance Primitives
Deliberate problems developing high-performance vision, signal, security, and storage applications.

ippStaticInit and non-Intel CPU

Kaan_Gök
Beginner
1,064 Views
I'm currently using static version of ipp, by calling ippStaticInit. When calling ippStaticInit, I get the "ippStsNonIntelCpu" result. That seems to be OK.
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:

Return Values
ippStsNoErr
Indicates that the most appropriate static code of the Intel IPP software is successfully set.
ippStsNonIntelCpu
Indicates that the static version of generic code for Intel Architecture is set.
ippStsNoOperationInDll
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?)

0 Kudos
2 Replies
Ying_H_Intel
Employee
1,064 Views
Quoting - Kaan Gk
I'm currently using static version of ipp, by calling ippStaticInit. When calling ippStaticInit, I get the "ippStsNonIntelCpu" result. That seems to be OK.
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:

Return Values
ippStsNoErr
Indicates that the most appropriate static code of the Intel IPP software is successfully set.
ippStsNonIntelCpu
Indicates that the static version of generic code for Intel Architecture is set.
ippStsNoOperationInDll
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?)


Hi Kaan,

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 6.1.137.809

For details, please see
http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-intel-ipp-understanding-cpu-optimized-code-used-in-intel-ipp/

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)


Andthe documention

http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-intel-ipp-is-there-any-function-to-detect-processor-type/

you can also usefunction ippGetCpuFeatures() to detect the processor features. It is new feature since V6.0.

Regards,
Ying
0 Kudos
Kaan_Gök
Beginner
1,064 Views
Thank you very much. I'll check it as you suggested. I'll also do a simple performance test by not calling ippStaticInit vs calling ippStaticInit. That'll show the actual optimized vs unoptimized difference.

0 Kudos
Reply