I am attempting to upgrade from the IPP 4.1 IA32 libraries to the5.3.1.064 EM64T IPP libraries. When I build my device driver I get the following two link errors
ippsmergedem64t.lib(i_malloc_nosplit.obj) : error LNK2001: unresolved external symbol calloc
ippsmergedem64t.lib(i_malloc_nosplit.obj) : error LNK2001: unresolved external symbol realloc
The IPP does not contain OS memory manager inside. Instead, it call malloc, etc functions which in user mode application comes from CRT library. If you build kernel mode device driver all you need is just to write simple wrappers on top of appropriate kernel mode memory allocation routines and link your driver with that wrappers to resolve references to these functions.
Thanks..... Got that taken care of.
One more question - Do the evaluation libraries have built in performance limitations? The reason I ask is that I'm evaluatingthe new 5.3 libraries. I seeing random banding artifactswhen processing HD video. If I compile the same code with the 4.1 libaries I do not see any banding artifacts.
IPP evaluation version contains no any limitations against commercial version. The only difference is that with commercial version we do provide additionally static libraries (starting from IPP 5.3.1 both threaded and not threaded static libraries) and one year technical support service.
For using in kernel mode you need to use not threaded static libraries. Threading in IPP is implemented with OpenMP API, which is not supported on OS kernel mode.
What IPP functions or samples do you use? It would be nice if can extract simple test case which may help us to understand what is the issue.
The functions that are being exercised in this case are ippiCopy_8u_C1R, and ippiResize_8u_C1R. Input signal is1080Iat 29.97 fps. I'm using Windows Media Encoder to generatea 1440x810 5mb output stream. My test machinehas the s5000PALIntel motherboard withdual quad core Intel CPU's and 2gb RAM.
I don't see any banding artifactsuntil I get multiple cores running at 50+%.
All of the processing done in my driver is on the same thread on the same core. Windows Media Encoder however spreads its proccessing out to 4 of the available 8 cores.
Pleasetry to turn off IPP internal threading either trough call ippSetNumThreads(1) at the beginning of your application or through setting environment variable OMP_NUM_THREADS=1 before starting your application to see if issue will disappear and let us know the results.
I got the similar errors:
ippsmerged.lib(i_malloc_nosplit.obj) : error LNK2001: unresolved external symbol _malloc
ippsmerged.lib(i_malloc_nosplit.obj) : error LNK2001: unresolved external symbol _calloc
Is it results from the same reason?
Besides, there is a sample under ipp-samplesadvanced-usagelinkagei_malloc
Should I use the same "i_malloc" technique to solve this problem?