Date post: | 26-Dec-2015 |
Category: |
Documents |
Upload: | betty-rich |
View: | 223 times |
Download: | 0 times |
2
Agenda
Leveraging the power of vector and matrix operations in MATLAB® - Demonstration: Preallocation and vectorization
How does MATLAB® store and provide access to its’ variables?- Demonstration: Row- vs. Column-major indexing
- Demonstration: Logical indexing
Addressing bottlenecks- Demonstration: Profiling code in MATLAB®
Memory considerations- Demonstration: Copy-on-write
Summary and Q&A
3
Example: Block Processing Images
Evaluate function at grid points
Reevaluate functionover larger blocks
Compare the results
Evaluate code performance
4
Summary of Example
Used built-in timing functions>> tic
>> toc
Used Code Analyzer to findsuboptimal code
Preallocated arrays
Vectorized code
5
Effect of Not Preallocating Memory
>> x = 4>> x(2) = 7>> x(3) = 12
0x00000x0000
0x00080x0008
0x00100x0010
0x00180x0018
0x00200x0020
0x00280x0028
0x00300x0030
0x00380x0038
0x00000x0000
0x00080x0008
0x00100x0010
0x00180x0018
0x00200x0020
0x00280x0028
0x00300x0030
0x00380x0038
0x00000x0000
0x00080x0008
0x00100x0010
0x00180x0018
0x00200x0020
0x00280x0028
0x00300x0030
0x00380x0038
4 4
47
47
47
12
X(3) = 12X(2) = 7
Resizing
Arrays is
Expensive
6
Benefit of Preallocation
>> x = zeros(3,1)>> x(1) = 4>> x(2) = 7>> x(3) = 12
0x00000x0000
0x00080x0008
0x00100x0010
0x00180x0018
0x00200x0020
0x00280x0028
0x00300x0030
0x00380x0038
000
0x00000x0000
0x00080x0008
0x00100x0010
0x00180x0018
0x00200x0020
0x00280x0028
0x00300x0030
0x00380x0038
000
0x00000x0000
0x00080x0008
0x00100x0010
0x00180x0018
0x00200x0020
0x00280x0028
0x00300x0030
0x00380x0038
0x00000x0000
0x00080x0008
0x00100x0010
0x00180x0018
0x00200x0020
0x00280x0028
0x00300x0030
0x00380x0038
400
470
Reduced
Memory
Operations
47
12
7
Agenda
Leveraging the power of vector and matrix operations in MATLAB® - Demonstration: Preallocation and vectorization
How does MATLAB® store and provide access to its’ variables?- Demonstration: Row- vs. Column-major indexing
- Demonstration: Logical indexing
Addressing bottlenecks- Demonstration: Profiling code in MATLAB®
Memory considerations- Demonstration: Copy-on-write
Summary and Q&A
8
Data Storage of MATLAB Arrays
What is the fastest way to processMATLAB matrices with for loops?(i.e. de-vectorize)
a) Down the columns
b) Along the rows
c) Doesn't matter
0x00000x0000
0x00080x0008
0x00100x0010
0x00180x0018
0x00200x0020
0x00280x0028
0x00300x0030
0x00380x0038
0x00400x0040
0x00480x0048
0x00500x0050
0x00580x0058
0x00600x0060
0x00680x0068
See the June 2007 article in “The MathWorks News and Notes”: http://www.mathworks.com/company/newsletters/news_notes/june07/patterns.html
834159672
>> x = magic(3)x =
81 6
35 7
49 2
Column-Major
Memory Storage
9
Indexing into MATLAB Arrays
Subscripted– Access elements by rows and columns
Linear– Access elements with a single number
Logical– Access elements with logical operations or mask
1 4 7
2 5 8
3 6 9
1,1 1,2 1,3
2,1 2,2 2,3
3,1 3,2 3,3
Linear indexing
Subscripted indexing
ind2sub sub2ind
10
Speed and Memory Usage
Balance vectorization and memory usage– Use bsxfun instead of functions such as repmat– Reduce size of arrays to smaller blocks for block processing
Consider using sparse matrices – Less Memory: Store only nonzero elements and their indices
– Faster: Eliminate operations on zero elements
– Blog Post - Creating Sparse Finite Element Matriceshttp://blogs.mathworks.com/loren/2007/03/01/creating-sparse-finite-element-matrices-in-matlab/
11
MATLAB Underlying Technologies
Commercial libraries– BLAS: Basic Linear Algebra
Subroutines (multithreaded)
– LAPACK: Linear Algebra Package
– etc.
JIT/Accelerator– Improves looping
– Generates on-the-fly multithreaded code
– Continually improving
12
Other Best Practices
Minimize dynamically changing path>> addpath(…)
>> fullfile(…)
Use the functional load syntax>> x = load('myvars.mat')
x =
a: 5
b: 'hello'
Minimize changing variable class>> x = 1;
>> xnew = 'hello';
instead of cd(…)
instead of load('myvars.mat')
instead of x = 'hello';
13
Agenda
Leveraging the power of vector and matrix operations in MATLAB® - Demonstration: Preallocation and vectorization
How does MATLAB® store and provide access to its’ variables?- Demonstration: Row- vs. Column-major indexing
- Demonstration: Logical indexing
Addressing bottlenecks- Demonstration: Profiling code in MATLAB®
Memory considerations- Demonstration: Copy-on-write
Summary and Q&A
14
Example: Fitting Data
Load data from multiple files
Extract a specific test
Fit a spline to the data
Write results to Microsoft Excel
15
Summary of Example
Used profiler to analyze code
Targeted significant bottlenecks
Reduced file I/O
Reused figure
16
Acceleration using MEX
Call C or Fortran code directly from MATLAB – Integrate existing code using MEX API
– Auto-generate C-based MEX files fromMATLAB code using MATLAB Coder
Speed-up factor will vary– May see speedup for state-based for-loops
– May not see a speedup when MATLAB code is Using multithreaded computations Using optimized libraries (BLAS, FFTW, etc.)
c = myFcn(a,b)
myFcn.c
void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){ /* more C code ... */}
17
Agenda
Leveraging the power of vector and matrix operations in MATLAB® - Demonstration: Preallocation and vectorization
How does MATLAB® store and provide access to its’ variables?- Demonstration: Row- vs. Column-major indexing
- Demonstration: Logical indexing
Addressing bottlenecks- Demonstration: Profiling code in MATLAB®
Memory considerations- Demonstration: Copy-on-write
Summary and Q&A
18
MATLAB and Memory
Lazy copying (copy-on-write):
C{1} = rand(3000,3000); %72MbC{2} = rand(3000,3000); %72Mb
C_new = C;
C{1}(1,1) = 2; Arrays are stored
in contiguous
memory%72Mb
%0 Mb
19
In-place Operations
When does MATLAB do calculations “in-place”?
function y = myfunc(x)y = sin(2*x.^2+3*x+4);
function x = myfuncInPlace(x)x = sin(2*x.^2+3*x+4);
---------------------------------------x = randn(3e7,1);
y = myfunc(x);
x = myfuncInPlace(x); % In-place
x = myfunc(x);
% Copy
% Copy
20
Agenda
Leveraging the power of vector and matrix operations in MATLAB® - Demonstration: Preallocation and vectorization
How does MATLAB® store and provide access to its’ variables?- Demonstration: Row- vs. Column-major indexing
- Demonstration: Logical indexing
Addressing bottlenecks- Demonstration: Profiling code in MATLAB®
Memory considerations- Demonstration: Copy-on-write
Summary and Q&A
21
Summary
Consider performance benefit of vector andmatrix operations in MATLAB
Preallocate memory and look at your indexing.
Analyze your code for bottlenecks andaddress most critical items
Never write hard-to-read code unless you have to.
23
Sample of Other Performance Resources
MATLAB documentationMATLAB Programming Fundamentals Performance
Memory Management Guidewww.mathworks.com/support/tech-notes/1100/1106.html?BB=1
The Art of MATLAB, Loren Shure’s blogblogs.mathworks.com/loren/
MATLAB Answershttp://www.mathworks.com/matlabcentral/answers/