2017-05-19 60 views
1

我有一个运行速度慢的MATLAB函数,并且我确定了两行计算密集的代码。我还发现这两行代码并不相互依赖,可以并行化。我不知道什么是并行的这两行代码的最佳方式,说我的代码是这样的:MATLAB中的并行编程

​​

假设一个是一个大的矩阵,那么如何并行计算Y和X。 PARFOR是要做到这一点,例如一个办法:

parfor i = 1:2 
    if i == 1 
     y = exp(a); 
    else 
     x = sin(a); 
    end 
end 

我觉得这种方式太天真了,我想知道是否有其他的方法来解决这个问题。

回答

2

如果你不想使用PARFOR,您可以创建要对个别员工执行每个功能的批量处理。

a = 10; 
% starts execution on separate workers 
exp_handle = batch(@exp,1,{a}); 
sin_handle = batch(@sin,1,{a}); 

% waits ultil the first is complete and gets the result 
wait(exp_handle); 
yc = fetchOutputs(exp_handle); % cell 

% waits until the second is complete and gets the result 
wait(sin_handle); 
xc = fetchOutputs(sin_handle); % cell 

y = yc{1}; 
x = xc{1}; 
+0

感谢您的回答!我一直在玩批处理命令,并且非常慢。我发布了另一个问题,你介意看看它吗?谢谢! http://stackoverflow.com/questions/44081110/accelerate-batch-job-execution-in-matlab – Jason

+0

为什么使用'batch'而不是[parfeval](https://www.mathworks.com/help/distcomp/parfeval html的)? 'parfeval'的语法对我来说似乎更好。 –

1

您可以遵循类似下面....

funcs = {@exp,@sin} ; 
args = {2,pi/4} ; 
sols = cell(1,2) ; 
parfor n = 1:2 
    sols{n}=funcs{n}(args{n}); 
end 
M = sols{1} ; N = sols{2} ;