Below you find a minimalistic ipp program which runs fine on recent x86 processor architectures (Intel as well as AMD), but crashes on an AMD Athlon XP 2400+. The crash occurs within ippsSet_8u (and also all other variants of ippsSet). I discovered this while tracing down crashes within the ipp implementation of zlib.
I compiled the program on VC2005, linked against the static ipp libraries. OS is WinXP SP3 with all the latest fixes and versions of the CRT on all test machines.
Is this a bug? Or is Athlon XP 2400+ just not supported? Is there a way to initialize the ipp library so that this code will work without crashing? I tried ippInitCpu() with ippCpuUnknown and some other CPU types, even left out ippStaticInit() completely... no success.
I'm quite new to IPP. Any help is appreciated.
Here is the minimal 'crash-'program:
using namespace std;
#define MEM_SIZE 1024
int __cdecl main( int argc, char* argv )
Ipp8u* Ptr = ippsMalloc_8u( MEM_SIZE );
cout << "Will it crash?" << endl;
ippsSet_8u( 42, Ptr, MEM_SIZE );
cout << "No it doesn't!" << endl;
ippsFree( Ptr );
You may notice that the default package in IPP 7.0 require that processors have SSE2 support for 32 bit application. The non-optimized layers of the library need to be downloaded separately. Please check the following article to know some details:
It looks to me that the processor you are testing does not support SSE2. true?http://en.wikipedia.org/wiki/List_of_AMD_Athlon_XP_microprocessors
so,if you want to use IPP 7.0 on the processors without SSE2 support (Intel or Intel compatible processors), it needs to download and link with some additional generic static library. The following article provides the steps: http://software.intel.com/en-us/articles/generic-library-dispatching-with-the-ipp-70-library/