I thought that intel IPP single threaded dlls was single core, but I just noticed that it wasn't. For example, if I create 8 threads, each function take 800ms, and if I am using only 1 thread, each function take 100ms, on my 8-core CPU. So IPP is creating threads internally.
I am managing threads myself in my program and I would like to force intel IPP to be single threaded only.
- I tried to call ippSetNumThreads but it returns status NoOperation, and ippGetNumThreads return NoOp and 1.
- I also tried to enable OpenMP support in the DLL where I am using Intel IPP because I read "For applications that use OpenMP threading, nested threading is disabled by default". My application is a C#/WPF and I am using Intel IPP using a C++/CLR wrapper assembly.
My dll link to ippcore.lib;ippvm.lib;ipps.lib;ippi.lib;ippcc.lib;ippcv.lib.
Any help is welcome.
You may explicitly link with the single-threaded version of IPP. Please check the IPP User Guide to refer more details:
Thanks for your answer and sorry for my late reply!
This is already what I am doing, I am linking to lib with mt
Graph is for processing a large RGB image (13000x10000) in tiles of 2048x2048. For each tile, I convert from 8-bit RGB to 32-bit float RGB and apply a serie IPP functions, then I convert back to 8-bit RGB.
If I replace IPP functions with a sleep(1000), I can see a x8 improvement with eight core.
But with IPP functions, the more I use threads, the more each tile take time to compute (from about 100ms for 1 thread, to about 800ms for 8 threads). I checked that I am not memory limited.
1) That's why I thought that IPP was using thread internally. But if not, that means that I am bandwish limited?
p.s. for others processing, I can see an improvement up to 3 threads instead of 2, but no more improvement for 4 to 8 threads.
2) How can I try enable multi-threading inside IPP? With dynamic linking, SetNumThreads() always return ippStsNoOperation. Should I use the deprecated multithread lib/dll?