Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to benchmark Matlab processes?

Searching for an idea how to avoid using loop in my Matlab code, I found following comments under one question on SE:

The statement "for loops are slow in Matlab" is no longer generally true since Matlab...euhm, R2008a?

and

Have you tried to benchmark a for loop vs what you already have? sometimes it is faster than vectorized code...

So I would like to ask, is there commonly used way to test the speed of a process in Matlab? Can user see somewhere how much time the process takes or the only way is to extend the processes for several minutes in order to compare the times between each other?

like image 336
MasterPJ Avatar asked Dec 20 '12 14:12

MasterPJ


People also ask

What is MATLAB benchmark?

A benchmark is intended to compare the performance of one particular MATLAB® release on different computers. It does not offer direct comparisons between different MATLAB releases because tasks and problem sizes change from release to release.

How do I speed up MATLAB processing?

Two effective programming techniques to accelerate your MATLAB code are preallocation and vectorization. With preallocation, you initialize an array using the final size required for that array. Preallocation helps you avoid dynamically resizing arrays, particularly when code contains for and while loops.

How does MATLAB measure processing time?

To measure the time required to run a function, use the timeit function. The timeit function calls the specified function multiple times, and returns the median of the measurements. It takes a handle to the function to be measured and returns the typical execution time, in seconds.

Which processor is best for MATLAB?

MATLAB supports the following processors: Any Intel or AMD x86-64 processor. AVX2 instruction set support is recommended. With Polyspace, 4 cores is recommended.


2 Answers

The best tool for testing the performance of MATLAB code is Steve Eddins' timeit function, available here from the MATLAB Central File Exchange.

It handles many subtle issues related to benchmarking MATLAB code for you, such as:

  • ensuring that JIT compilation is used by wrapping the benchmarked code in a function
  • warming up the code
  • running the code several times and averaging

Update: As of release R2013b, timeit is part of core MATLAB.


Update: As of release R2016a, MATLAB also includes a performance testing framework that handles the above issues for you in a similar way to timeit.

like image 185
Sam Roberts Avatar answered Sep 22 '22 06:09

Sam Roberts


You can use the profiler to assess how much time your functions, and the blocks of code within them, are taking.

>> profile on; % Starts the profiler
>> myfunctiontorun( ); % This can be a function, script or block of code
>> profile viewer; % Opens the viewer showing you how much time everything took

Viewer also clears the current profile data for next time.

Bear in mind, profile does tend to slow execution a bit, but I believe it does so in a uniform way across everything.

Obviously if your function is very quick, you might find you don't get reliable results so if you can run it many times or extend the computation that would improve matters.

If it's really simple stuff you're testing, you can also just time it using tic and toc:

>> tic; % Start the timer
>> myfunctionname( );
>> toc; % End the timer and display elapsed time

Also if you want multiple timers, you can assign them to variables:

>> mytimer = tic;
>> myfunctionname( );
>> toc(mytimer);

Finally, if you want to store the elapsed time instead of display it:

>> myresult = toc;
like image 25
n00dle Avatar answered Sep 20 '22 06:09

n00dle