We have a application that can use either IPP or IJL to decode Jpeg's. we take in 5 streams from IP cameras at 1280x720.
With IPP we put the cameras at 20FPS, we receive fine at 20 and display at 20 but the CPU is 100% usage. we put the cameras at 30FPS everything is fine and it displays at 30 but the CPU is 100%. If we put it at 10FPS it runs fine, displays good but CPU is still 100%.
With IJL we put the cameras to 20FPS, displays fine at 20FPS and the CPU is about 15%, we put the cameras to 30 fps 17%
In terms of the IPP code, I have seen similar performance in the past and I think it may be due to the built-in OpenMP threading. The OpenMP threading built into IPP is trying to speed up certain operations by splitting the work up to multiple threads (1 per core). What may be happening is that when the OpenMP worker threads no longer have work to do, they busy wait until more work is available to avoid a context switch. So what may look like 100% utilization is really busy waiting for more work.
Yes, check the ThreadedFunctionsList.txt file to see if the IPP functions being used are multi-threaded. If so, it is very likely that the CPU usage meter is measuring OpenMP "busy work" and not necessarily IPP work.