I ran this on my 8-core machine using R2009a:
function myFilterTest
x = rand(1e6, 8);
x1 = x(:,1);
x2 = x(:,2);
x3 = x(:,3);
x4 = x(:,4);
x5 = x(:,5);
x6 = x(:,6);
x7 = x(:,7);
x8 = x(:,8);
[B, A] = butter(3, 0.2, 'low');
tic;
for i=1:100
y = filter(B, A, x);
end
toc
tic;
for i=1:100
y1 = filter(B, A, x1);
y2 = filter(B, A, x2);
y3 = filter(B, A, x3);
y4 = filter(B, A, x4);
y5 = filter(B, A, x5);
y6 = filter(B, A, x6);
y7 = filter(B, A, x7);
y8 = filter(B, A, x8);
end
toc
clear all;
And got this:
Elapsed time is 16.865596 seconds.
Elapsed time is 16.117599 seconds.
Only one core was active during each test.
I ran this on my 8-core machine using R2011a and got:
Elapsed time is 12.542615 seconds.
Elapsed time is 16.268821 seconds.
All eight cores were active for the first test (on the matrix) and only a single core for the seconds test (on individual vectors).
I added this to the bottom of the test:
y_par = zeros(size(x));
matlabpool(8);tic;
parfor j = 1:8
for i=1:100
y_par(:,j) = filter(B, A, x(:,j));
end
end
toc; matlabpool close;
And got this when using R2011a:
Elapsed time is 13.305009 seconds.
Elapsed time is 16.398203 seconds.
Starting matlabpool using the 'local' configuration ...
Elapsed time is 3.542021 seconds.
Sending a stop signal to all the labs ...
Best Answer