Hello, I hope you are (or someone similar) is still around.
I'm prepping to create a 2D image processing DLL which use classic Erosion/Dilation algorithms, BUT, on several million pictures in kind of a batch mode. (64 bit with 32 bit compatibility).
I'm somewhat new to the Intel toolset so first, I need advise on which tools I really need. I've already ordered the compiler, IPP and vTune; I suspect I need the MKL and ThreadChecker. Your thoughts?
Also, I could really benifit from any advise, white papers, sample code etc. that deal with things like erosion, dilation and related functions.
Thanks in advance for any advise!
The questions might better be dealt with on the Visual Computing forum.
MKL TBB and IPP are included in the Intel Professional C++ compiler.
VTune is an excellent tool for performance tuning, particularly for batch mode runs taking upwards of several seconds. Even without VTune, the openmp profiling library is useful for OpenMP, /Qparallel, and MKL threaded region analysis (don't know about IPP).
Parallel Studio Inspector has been advocated pending a new product capable of running on Windows 7 as a successor to Thread Checker. You might try evaluations when you are ready. You don't need them unless you thread explicitly, by OpenMP or thread library calls.
You might wish to read a blog of mine here: http://www.drdobbs.com/go-parallel/ Titled: Two Variations on Parallel Pipelines.
This article illustrates the benefit of using a well crafted parallel_pipeline for image processing. You can email me if you have questions not pertinant to this forum.
I was going to create another thread but this sounded similar to what i wanted to do.
I have jpeg images on disk that are around 1.9 MB each. At the moment i am reading them in a secuence one by one that doing some image processing from image to image.
Would anyone please suggest a efficient way to read those images from disk? I have identified that is the slowest part in the application.
I was thinking of using TBB to thread the read but some people mentioned that might not help.
Anything in IPP that would be useful? Or should i do something like image slicing perhaps to improve on this?
Erosion/Dilation on million of pictures...why not create a large canvas (background) and do a collage with giant pictures containing batches of these pictures (especially if they are of the same dimension, if not, it is easy to make them by adding pixels. The problem then suitability is for the GPU. Some problems are more suitable for the CPU but this problem I believe can be dealt more efficiently in the GPU.
Perhaps you are referring to a movie, most probably it is a movie that produces so many pictures, then you have indeed the same dimension. I do not know the application that you have in mind but I think making a collage of the frames in a giant frame in the CPU in Parallel feeding it to the GPU and then returning the output and let the CPU dismantle the giant frame in Parallel again you can achieve real time results with some overhead of making the collage and dismantling it. This works because the SE operates in a local area and the operation needs the original pixel elements so this makes the whole process completely independant. So the trheads in the GPU can blissfully work on each pixel without caring what the other threads are doing.
All the best in your project.
Maybe you want to take a look at my multicore framework "Fiber Pool" (http://www.thinkmeta.de/en/fiberpool_overview.html).
It has a special File I/O Scheduler which uses a technique called "Parallel File Processing" for maximum CPU performance.