I've been looking into JPEG decoding performance via UIC. I've tried:
1) ippSetNumThreads() called with 1, 4
2) SetThreadingMode() called with JT_OLD, JT_RSTI
3) SetNOfThreads() called with 1,4,16
4) 8-bit jpegs with and without restart intervals
None of the combinations of these settings produces a measureable difference in the exeuction time for decoding a single JPEG image. The UIC we are using has been built with MS Visual Studio. We are running IPP version 220.127.116.118.
Any guidance on how to achieve the speedups as described in http://software.intel.com/en-us/articles/jpeg-new-threading-model-in-ipp would be much appreciated.
UIC package allows you to build source for Visual Studio for single threaded model and multithreaded model. Everything looks like you built UIC for single threaded model.
In order to benefit from UIC decoder multi-threading, you need to build UIC with OpenMP and static single-thread IPP libraries. In this case the parallelization starts on JPEG decoder level and the decoder will use single-threaded IPP functions to not suffer from oversubscription (when number of active threads is larger than number of CPU cores).
As far as I see from samples' makefiles, UIC is built exactly this way: "/openmp /D "_IPP_SEQUENTIAL_STATIC"" options are set for compiler.
What I usually do when I need to know if threading is working well, is to let the decoder decode a huge jpeg file, and just peek at the process monitor (Task Manager), to see that the cpu goes up on all cores.