Benchmarks: add mandelbrot 32/18632/2
Clément DAVID [Tue, 25 Oct 2016 12:30:14 +0000 (14:30 +0200)]
Extracted from https://wiki.scilab.org/MandelbrotSet-NaiveVsVectorized

Change-Id: I19923966d1d0cc3efc9d6a9b59a9b5024efd2fb2

scilab/modules/core/tests/benchmarks/mandelbrot_naive.tst [new file with mode: 0644]
scilab/modules/core/tests/benchmarks/mandelbrot_vect.tst [new file with mode: 0644]

diff --git a/scilab/modules/core/tests/benchmarks/mandelbrot_naive.tst b/scilab/modules/core/tests/benchmarks/mandelbrot_naive.tst
new file mode 100644 (file)
index 0000000..d0b3fbf
--- /dev/null
@@ -0,0 +1,54 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Scilab Enterprises - Clement DAVID
+// Copyright (C) 2011 - DIGITEO - Mickael BAUDIN
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+//==============================================================================
+// Naive mandelbrot benchmark
+//==============================================================================
+
+// <-- BENCH NB RUN : 3 -->
+
+function R = computeMandelbrot(xsize,ysize,nmax,xmin,xmax,ymin,ymax)
+    xvect = linspace( xmin, xmax, xsize );
+    yvect = linspace( ymin, ymax, ysize );
+    R = zeros(xsize,ysize);
+    for i = 1:xsize
+        for j = 1:ysize
+            x = xvect(i);
+            y = yvect(j);
+            x0 = x;
+            y0 = y;
+            k = 0;
+            while( x*x + y*y < 4 & k < nmax )
+                xtemp = x*x - y*y + x0;
+                y = 2*x*y + y0;
+                x = xtemp;
+                k=k+1;
+            end
+            if k<nmax then
+                R(i,j) = k;
+            else
+                R(i,j) = -1;
+            end
+        end
+    end
+endfunction
+
+xsize = 50;
+ysize = 50;
+nmax = 1000;
+xmin = 0.2675;
+xmax = 0.2685;
+ymin = 0.591;
+ymax = 0.592;
+
+// <-- BENCH START -->
+
+R = computeMandelbrot(xsize,ysize,nmax,xmin,xmax,ymin,ymax);
+
+// <-- BENCH END -->
+
diff --git a/scilab/modules/core/tests/benchmarks/mandelbrot_vect.tst b/scilab/modules/core/tests/benchmarks/mandelbrot_vect.tst
new file mode 100644 (file)
index 0000000..f0789fd
--- /dev/null
@@ -0,0 +1,49 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Scilab Enterprises - Clement DAVID
+// Copyright (C) 2011 - DIGITEO - Mickael BAUDIN
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+//==============================================================================
+// Naive mandelbrot benchmark
+//==============================================================================
+
+// <-- BENCH NB RUN : 30 -->
+
+function R = computeMandelbrot(xsize,ysize,nmax,xmin,xmax,ymin,ymax)
+    xvect = linspace( xmin, xmax, xsize );
+    yvect = linspace( ymin, ymax, ysize );
+    [X,Y]=meshgrid(xvect,yvect);
+
+    Z = zeros(xsize,ysize);
+    R = -ones(xsize,ysize);
+    W = zeros(xsize,ysize);
+    C=X+%i*Y;
+    J = 1:xsize*ysize;
+    for k=0:nmax
+        L = J(J>0);
+        Z(L) = Z(L).^2+C(L);
+        W(L) = abs(Z(L));
+        M = find(W(L)>2);
+        R(L(M)) = k;
+        J(L(M)) = 0;
+    end
+    R = R';
+endfunction
+
+xsize = 50;
+ysize = 50;
+nmax = 1000;
+xmin = 0.2675;
+xmax = 0.2685;
+ymin = 0.591;
+ymax = 0.592;
+
+// <-- BENCH START -->
+
+R = computeMandelbrot(xsize,ysize,nmax,xmin,xmax,ymin,ymax);
+
+// <-- BENCH END -->
+