I'm comparing the standard Independent JPEG Group's code to the speedups provided by IPP. All I'm doing is loading JPEGs into arrays, along the lines of the decompress sample in ipp-samples\image-codecs\ijg\samples\ijgtiming. On the images I'm looking at, I find a 25% speedup if I load one image 100 times from my network. But if I loop through a directory of 450 images on the network and load each one at a time, I find no speedup.
Does anyone have any tips? Is it known that IPP won't speed up some workloads? Or is it likely that I'm doing anything wrong? I've already read a few knowledgebase articles I found without any obviously helpful suggestions. My memory is aligned, I don't want to split into multiple threads, nothing else looked applicable.
If no one has any suggestions, I guess I'll stick with the Independent JPEG Group's code.
That's some great advice. The maximum size is 32768 as referenced in the documentation you linked to, though that may be out of date as it's back on VC++6.0. It looks like it's gone up since then, see: http://msdn.microsoft.com/en-us/library/86cebhfs.aspx
Using a buffer size of 32768 sped up code for both by 25%, but still no advantage for IPP. Moving the images to the local drive didn't make much difference either. Removing filling of the array and just leaving the calls to jpeg_read_scanlines sped everything up of course, but still no performance difference between the two.
It's definitely possible that I'm somehow doing linking wrong or something, but I think the time I have to spend on this is up now. I may come back to it later.
You're right, it's entirely possible that hard drive and memory issues are swamping image decoding time. I guess the peculiarities of how IJG and IPP read the files could affect total load time quite a bit. I may try to look into that further later on. Thanks for the advice.