From e16e141c38ed53a5f9157e6768f9891f4ebf803a Mon Sep 17 00:00:00 2001 From: catree Date: Tue, 3 Jan 2017 22:28:19 +0100 Subject: [PATCH] Add OpenCV parallel_for_ tutorial. --- .../how_to_use_OpenCV_parallel_for_.markdown | 183 +++++++++++++++++++++ ...e_OpenCV_parallel_for_640px-Mandelset_hires.png | Bin 0 -> 16752 bytes .../how_to_use_OpenCV_parallel_for_Mandelbrot.png | Bin 0 -> 63249 bytes ...enCV_parallel_for_sqrt_scale_transformation.png | Bin 0 -> 33815 bytes doc/tutorials/core/table_of_content_core.markdown | 7 + .../how_to_use_OpenCV_parallel_for_.cpp | 122 ++++++++++++++ 6 files changed, 312 insertions(+) create mode 100644 doc/tutorials/core/how_to_use_OpenCV_parallel_for_/how_to_use_OpenCV_parallel_for_.markdown create mode 100644 doc/tutorials/core/how_to_use_OpenCV_parallel_for_/images/how_to_use_OpenCV_parallel_for_640px-Mandelset_hires.png create mode 100644 doc/tutorials/core/how_to_use_OpenCV_parallel_for_/images/how_to_use_OpenCV_parallel_for_Mandelbrot.png create mode 100644 doc/tutorials/core/how_to_use_OpenCV_parallel_for_/images/how_to_use_OpenCV_parallel_for_sqrt_scale_transformation.png create mode 100644 samples/cpp/tutorial_code/core/how_to_use_OpenCV_parallel_for_/how_to_use_OpenCV_parallel_for_.cpp diff --git a/doc/tutorials/core/how_to_use_OpenCV_parallel_for_/how_to_use_OpenCV_parallel_for_.markdown b/doc/tutorials/core/how_to_use_OpenCV_parallel_for_/how_to_use_OpenCV_parallel_for_.markdown new file mode 100644 index 0000000..f2a511f --- /dev/null +++ b/doc/tutorials/core/how_to_use_OpenCV_parallel_for_/how_to_use_OpenCV_parallel_for_.markdown @@ -0,0 +1,183 @@ +How to use the OpenCV parallel_for_ to parallelize your code {#tutorial_how_to_use_OpenCV_parallel_for_} +================================================================== + +Goal +---- + +The goal of this tutorial is to show you how to use the OpenCV `parallel_for_` framework to easily +parallelize your code. To illustrate the concept, we will write a program to draw a Mandelbrot set +exploiting almost all the CPU load available. +The full tutorial code is [here](https://github.com/opencv/opencv/blob/master/samples/cpp/tutorial_code/core/how_to_use_OpenCV_parallel_for_/how_to_use_OpenCV_parallel_for_.cpp). +If you want more information about multithreading, you will have to refer to a reference book or course as this tutorial is intended +to remain simple. + +Precondition +---- + +The first precondition is to have OpenCV built with a parallel framework. +In OpenCV 3.2, the following parallel frameworks are available in that order: +1. Intel Threading Building Blocks (3rdparty library, should be explicitly enabled) +2. C= Parallel C/C++ Programming Language Extension (3rdparty library, should be explicitly enabled) +3. OpenMP (integrated to compiler, should be explicitly enabled) +4. APPLE GCD (system wide, used automatically (APPLE only)) +5. Windows RT concurrency (system wide, used automatically (Windows RT only)) +6. Windows concurrency (part of runtime, used automatically (Windows only - MSVC++ >= 10)) +7. Pthreads (if available) + +As you can see, several parallel frameworks can be used in the OpenCV library. Some parallel libraries +are third party libraries and have to be explictly built and enabled in CMake (e.g. TBB, C=), others are +automatically available with the platform (e.g. APPLE GCD) but chances are that you should be enable to +have access to a parallel framework either directly or by enabling the option in CMake and rebuild the library. + +The second (weak) precondition is more related to the task you want to achieve as not all computations +are suitable / can be adatapted to be run in a parallel way. To remain simple, tasks that can be splitted +into multiple elementary operations with no memory dependency (no possible race condition) are easily +parallelizable. Computer vision processing are often easily parallelizable as most of the time the processing of +one pixel does not depend to the state of other pixels. + +Simple example: drawing a Mandelbrot set +---- + +We will use the example of drawing a Mandelbrot set to show how from a regular sequential code you can easily adapt +the code to parallize the computation. + +Theory +----------- + +The Mandelbrot set definition has been named in tribute to the mathematician Benoit Mandelbrot by the mathematician +Adrien Douady. It has been famous outside of the mathematics field as the image representation is an example of a +class of fractals, a mathematical set that exhibits a repeating pattern displayed at every scale (even more, a +Mandelbrot set is self-similar as the whole shape can be repeatedly seen at different scale). For a more in-depth +introduction, you can look at the corresponding [Wikipedia article](https://en.wikipedia.org/wiki/Mandelbrot_set). +Here, we will just introduce the formula to draw the Mandelbrot set (from the mentioned Wikipedia article). + +> The Mandelbrot set is the set of values of \f$ c \f$ in the complex plane for which the orbit of 0 under iteration +> of the quadratic map +> \f[\begin{cases} z_0 = 0 \\ z_{n+1} = z_n^2 + c \end{cases}\f] +> remains bounded. +> That is, a complex number \f$ c \f$ is part of the Mandelbrot set if, when starting with \f$ z_0 = 0 \f$ and applying +> the iteration repeatedly, the absolute value of \f$ z_n \f$ remains bounded however large \f$ n \f$ gets. +> This can also be represented as +> \f[\limsup_{n\to\infty}|z_{n+1}|\leqslant2\f] + +Pseudocode +----------- + +A simple algorithm to generate a representation of the Mandelbrot set is called the +["escape time algorithm"](https://en.wikipedia.org/wiki/Mandelbrot_set#Escape_time_algorithm). +For each pixel in the rendered image, we test using the recurrence relation if the complex number is bounded or not +under a maximum number of iterations. Pixels that do not belong to the Mandelbrot set will escape quickly whereas +we assume that the pixel is in the set after a fixed maximum number of iterations. A high value of iterations will +produce a more detailed image but the computation time will increase accordingly. We use the number of iterations +needed to "escape" to depict the pixel value in the image. + +``` +For each pixel (Px, Py) on the screen, do: +{ + x0 = scaled x coordinate of pixel (scaled to lie in the Mandelbrot X scale (-2, 1)) + y0 = scaled y coordinate of pixel (scaled to lie in the Mandelbrot Y scale (-1, 1)) + x = 0.0 + y = 0.0 + iteration = 0 + max_iteration = 1000 + while (x*x + y*y < 2*2 AND iteration < max_iteration) { + xtemp = x*x - y*y + x0 + y = 2*x*y + y0 + x = xtemp + iteration = iteration + 1 + } + color = palette[iteration] + plot(Px, Py, color) +} +``` + +To relate between the pseudocode and the theory, we have: +* \f$ z = x + iy \f$ +* \f$ z^2 = x^2 + i2xy - y^2 \f$ +* \f$ c = x_0 + iy_0 \f$ + +![](images/how_to_use_OpenCV_parallel_for_640px-Mandelset_hires.png) + +On this figure, we recall that the real part of a complex number is on the x-axis and the imaginary part on the y-axis. +You can see that the whole shape can be repeatedly visible if we zoom at particular locations. + +Implementation +----------- + +Escape time algorithm implementation +-------------------------- + +@snippet how_to_use_OpenCV_parallel_for_.cpp mandelbrot-escape-time-algorithm + +Here, we used the [`std::complex`](http://en.cppreference.com/w/cpp/numeric/complex) template class to represent a +complex number. This function performs the test to check if the pixel is in set or not and returns the "escaped" iteration. + +Sequential Mandelbrot implementation +-------------------------- + +@snippet how_to_use_OpenCV_parallel_for_.cpp mandelbrot-sequential + +In this implementation, we sequentially iterate over the pixels in the rendered image to perform the test to check if the +pixel is likely to belong to the Mandelbrot set or not. + +Another thing to do is to transform the pixel coordinate into the Mandelbrot set space with: + +@snippet how_to_use_OpenCV_parallel_for_.cpp mandelbrot-transformation + +Finally, to assign the grayscale value to the pixels, we use the following rule: +* a pixel is black if it reaches the maximum number of iterations (pixel is assumed to be in the Mandelbrot set), +* otherwise we assign a grayscale value depending on the escaped iteration and scaled to fit the grayscale range. + +@snippet how_to_use_OpenCV_parallel_for_.cpp mandelbrot-grayscale-value + +Using a linear scale transformation is not enough to perceive the grayscale variation. To overcome this, we will boost +the perception by using a square root scale transformation (borrowed from Jeremy D. Frens in his +[blog post](http://www.programming-during-recess.net/2016/06/26/color-schemes-for-mandelbrot-sets/)): +\f$ f \left( x \right) = \sqrt{\frac{x}{\text{maxIter}}} \times 255 \f$ + +![](images/how_to_use_OpenCV_parallel_for_sqrt_scale_transformation.png) + +The green curve corresponds to a simple linear scale transformation, the blue one to a square root scale transformation +and you can observe how the lowest values will be boosted when looking at the slope at these positions. + +Parallel Mandelbrot implementation +-------------------------- + +When looking at the sequential implementation, we can notice that each pixel is computed independently. To optimize the +computation, we can perform multiple pixel calculations in parallel, by exploiting the multi-core architecture of modern +processor. To achieve this easily, we will use the OpenCV @ref cv::parallel_for_ framework. + +@snippet how_to_use_OpenCV_parallel_for_.cpp mandelbrot-parallel + +The first thing is to declare a custom class that inherits from @ref cv::ParallelLoopBody and to override the +`virtual void operator ()(const cv::Range& range) const`. + +The range in the `operator ()` represents the subset of pixels that will be treated by an individual thread. +This splitting is done automatically to distribuate equally the computation load. We have to convert the pixel index coordinate +to a 2D `[row, col]` coordinate. Also note that we have to keep a reference on the mat image to be able to modify in-place +the image. + +The parallel execution is called with: + +@snippet how_to_use_OpenCV_parallel_for_.cpp mandelbrot-parallel-call + +Here, the range represents the total number of operations to be executed, so the total number of pixels in the image. +To set the number of threads, you can use: @ref cv::setNumThreads. You can also specify the number of splitting using the +nstripes parameter in @ref cv::parallel_for_. For instance, if your processor has 4 threads, setting `cv::setNumThreads(2)` +or setting `nstripes=2` should be the same as by default it will use all the processor threads available but will split the +workload only on two threads. + +Results +----------- + +You can find the full tutorial code [here](https://github.com/opencv/opencv/blob/master/samples/cpp/tutorial_code/core/how_to_use_OpenCV_parallel_for_/how_to_use_OpenCV_parallel_for_.cpp). +The performance of the parallel implementation depends of the type of CPU you have. For instance, on 4 cores / 8 threads +CPU, you can expect a speed-up of around 6.9X. There are many factors to explain why we do not achieve a speed-up of almost 8X. +Main reasons should be mostly due to: +* the overhead to create and manage the threads, +* background processes running in parallel, +* the difference between 4 hardware cores with 2 logical threads for each core and 8 hardware cores. + +The resulting image produced by the tutorial code (you can modify the code to use more iterations and assign a pixel color +depending on the escaped iteration and using a color palette to get more aesthetic images): +![Mandelbrot set with xMin=-2.1, xMax=0.6, yMin=-1.2, yMax=1.2, maxIterations=500](images/how_to_use_OpenCV_parallel_for_Mandelbrot.png) diff --git a/doc/tutorials/core/how_to_use_OpenCV_parallel_for_/images/how_to_use_OpenCV_parallel_for_640px-Mandelset_hires.png b/doc/tutorials/core/how_to_use_OpenCV_parallel_for_/images/how_to_use_OpenCV_parallel_for_640px-Mandelset_hires.png new file mode 100644 index 0000000000000000000000000000000000000000..2b63916d77ad6dc62239f764e59221894f20e136 GIT binary patch literal 16752 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
BX<7*3l@68N7j?uOv$&4k(wN+~B$0bJupERT*zG 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 literal 0 HcmV?d00001 diff --git a/doc/tutorials/core/table_of_content_core.markdown b/doc/tutorials/core/table_of_content_core.markdown index 70d9c81..2b9afb8 100644 --- a/doc/tutorials/core/table_of_content_core.markdown +++ b/doc/tutorials/core/table_of_content_core.markdown @@ -106,3 +106,10 @@ understanding how to manipulate the images on a pixel level. *Author:* Elena Gvozdeva You will see how to use the IPP Async with OpenCV. + + +- @subpage tutorial_how_to_use_OpenCV_parallel_for_ + + *Compatibility:* \>= OpenCV 2.4.3 + + You will see how to use the OpenCV parallel_for_ to easily parallelize your code. diff --git a/samples/cpp/tutorial_code/core/how_to_use_OpenCV_parallel_for_/how_to_use_OpenCV_parallel_for_.cpp b/samples/cpp/tutorial_code/core/how_to_use_OpenCV_parallel_for_/how_to_use_OpenCV_parallel_for_.cpp new file mode 100644 index 0000000..c661b91 --- /dev/null +++ b/samples/cpp/tutorial_code/core/how_to_use_OpenCV_parallel_for_/how_to_use_OpenCV_parallel_for_.cpp @@ -0,0 +1,122 @@ +#include +#include +#include + +using namespace std; +using namespace cv; + +namespace +{ +//! [mandelbrot-escape-time-algorithm] +int mandelbrot(const complex &z0, const int max) +{ + complex z = z0; + for (int t = 0; t < max; t++) + { + if (z.real()*z.real() + z.imag()*z.imag() > 4.0f) return t; + z = z*z + z0; + } + + return max; +} +//! [mandelbrot-escape-time-algorithm] + +//! [mandelbrot-grayscale-value] +int mandelbrotFormula(const complex &z0, const int maxIter=500) { + int value = mandelbrot(z0, maxIter); + if(maxIter - value == 0) + { + return 0; + } + + return cvRound(sqrt(value / (float) maxIter) * 255); +} +//! [mandelbrot-grayscale-value] + +//! [mandelbrot-parallel] +class ParallelMandelbrot : public ParallelLoopBody +{ +public: + ParallelMandelbrot (Mat &img, const float x1, const float y1, const float scaleX, const float scaleY) + : m_img(img), m_x1(x1), m_y1(y1), m_scaleX(scaleX), m_scaleY(scaleY) + { + } + + virtual void operator ()(const Range& range) const + { + for (int r = range.start; r < range.end; r++) + { + int i = r / m_img.cols; + int j = r % m_img.cols; + + float x0 = j / m_scaleX + m_x1; + float y0 = i / m_scaleY + m_y1; + + complex z0(x0, y0); + uchar value = (uchar) mandelbrotFormula(z0); + m_img.ptr(i)[j] = value; + } + } + + ParallelMandelbrot& operator=(const ParallelMandelbrot &) { + return *this; + }; + +private: + Mat &m_img; + float m_x1; + float m_y1; + float m_scaleX; + float m_scaleY; +}; +//! [mandelbrot-parallel] + +//! [mandelbrot-sequential] +void sequentialMandelbrot(Mat &img, const float x1, const float y1, const float scaleX, const float scaleY) +{ + for (int i = 0; i < img.rows; i++) + { + for (int j = 0; j < img.cols; j++) + { + float x0 = j / scaleX + x1; + float y0 = i / scaleY + y1; + + complex z0(x0, y0); + uchar value = (uchar) mandelbrotFormula(z0); + img.ptr(i)[j] = value; + } + } +} +//! [mandelbrot-sequential] +} + +int main() +{ + //! [mandelbrot-transformation] + Mat mandelbrotImg(4800, 5400, CV_8U); + float x1 = -2.1f, x2 = 0.6f; + float y1 = -1.2f, y2 = 1.2f; + float scaleX = mandelbrotImg.cols / (x2 - x1); + float scaleY = mandelbrotImg.rows / (y2 - y1); + //! [mandelbrot-transformation] + + double t1 = (double) getTickCount(); + //! [mandelbrot-parallel-call] + ParallelMandelbrot parallelMandelbrot(mandelbrotImg, x1, y1, scaleX, scaleY); + parallel_for_(Range(0, mandelbrotImg.rows*mandelbrotImg.cols), parallelMandelbrot); + //! [mandelbrot-parallel-call] + t1 = ((double) getTickCount() - t1) / getTickFrequency(); + cout << "Parallel Mandelbrot: " << t1 << " s" << endl; + + Mat mandelbrotImgSequential(4800, 5400, CV_8U); + double t2 = (double) getTickCount(); + sequentialMandelbrot(mandelbrotImgSequential, x1, y1, scaleX, scaleY); + t2 = ((double) getTickCount() - t2) / getTickFrequency(); + cout << "Sequential Mandelbrot: " << t2 << " s" << endl; + cout << "Speed-up: " << t2/t1 << " X" << endl; + + imwrite("Mandelbrot_parallel.png", mandelbrotImg); + imwrite("Mandelbrot_sequential.png", mandelbrotImgSequential); + + return EXIT_SUCCESS; +} -- 2.7.4