Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 与for循环相比,parfor循环没有显示出明显的加速_Matlab_Parfor - Fatal编程技术网

Matlab 与for循环相比,parfor循环没有显示出明显的加速

Matlab 与for循环相比,parfor循环没有显示出明显的加速,matlab,parfor,Matlab,Parfor,我正在尝试将此回归循环作为parfor循环运行: load dataq.mat % load 'A_Data' and 'A_ref' matrix k=length(A_ref); theta=zeros(k,5); % preallocation b_ref=zeros(k,1); poolobj = parpool(8); parfor i=1:k % regression W = sqrt( ... exp( ... -( ... ( ( A_Data(

我正在尝试将此回归循环作为parfor循环运行:

load dataq.mat % load 'A_Data' and 'A_ref' matrix

k=length(A_ref);
theta=zeros(k,5); % preallocation
b_ref=zeros(k,1);

poolobj = parpool(8);
parfor i=1:k % regression

  W = sqrt( ...
    exp( ...
    -( ...
    ( ( A_Data(:,2)-A_ref(i,2) ) / 0.6 ).^2+ ...
    ( ( A_Data(:,3)-A_ref(i,3) ) / 0.6 ).^2+ ...
    ( ( A_Data(:,4)-A_ref(i,4) ) / 0.6 ).^2+ ...
    ( ( A_Data(:,5)-A_ref(i,5) ) / 0.6 ).^2 ...
    ) /2 ...
    ) ...
    );

 theta(i,:)=regress(W.*b_Data,repmat(W,1,5).*A_Data);
 b_ref(i,1)=A_ref(i,:)*theta(i,:)';

end
delete(poolobj);
它运行良好,没有错误,但与for-loop相比,它并没有显示出明显的速度提升

我得到了这个警告信息:

整个数组('A_Data','A_ref')是一个广播变量。这可能会导致不必要的通信开销

我如何处理这个问题

请注意: A_数据:1710203x5双,
A_ref:5760x5 double

Parfor循环在每个迭代独立于其他迭代时非常有用,因此循环只需要访问循环索引给出的行或列。请注意,
Parfor
旨在将计算分散到集群中的计算节点上。这不是共享内存并行
parfor
将启动多个MATLAB会话,并在它们之间传输数据。只有当每个循环迭代中的计算量很大时,这才是有效的。现在可以将并行计算工具箱配置为使用线程而不是单独的MATLAB进程,请尝试
parpool('threads')
。查看了解在基于线程的并行会话中可以做什么和不能做什么。另一方面,使用
a_数据
a_ref
进行多个计算是不必要的。您可以将其缩短为:
sqrt(exp(-sum((A_data(:,2:5)-A_ref(i,2:5))/0.6.^2,1))
。您可能会从
a_data(:,2:5)-a_ref(i,2:5)
中获得轻微的速度提升,尽管这会使代码更难阅读。