目前我已经开始使用matlab的并行计算工具箱了。我想用面部识别代码测试它。我的第一次尝试是使用10.000图像的Eigenfaces函数:
脚本:
function [m, A, Eigenfaces] = EigenfaceCore(T)
tic
Train_Number = size(T,2);
A = [];
for i = 1 : Train_Number
temp = double(T(:,i)) - m;
A = [A temp,]; % Merging all centered images
end
L = A'*A;
[V D] = eig(L);
x = zeros(1,size(D,1));
for i = 1 : size(D,1)
x (i) = D(i,i);
end
L_eig_vec = [];
for i = 1 : size(V,2)
if( x(i) > 1)
L_eig_vec = [L_eig_vec V(:,i)];
end
end
Eigenfaces = A * L_eig_vec; % A: centered image vectors
toc
对于这段代码,我需要大约112秒的时间。
如果我打开一个包含4个内核的POOL,并使用parfor
而不是for
,则需要421秒。有人能帮助我吗?我想通过增加图像的数量(首先是大约20张图像和parfor需要更多时间),并行计算版本将通过正常版本。