在Matlab中使用spmd或parfor

时间:2015-04-22 16:08:02

标签: matlab parallel-processing parfor spmd

我目前正在尝试使用MATLAB 2011b并行运行非常耗时的实验。 我想知道是否有人可以帮助我将以下通用(非工作)parfor代码块“转换”为可在spmd代码中使用的代码。

mb_internal_encoding("UTF-8");

$_tmpStr = $vfrow['title'];
$_tmpStrLen = mb_strlen($vfrow['title']);
for($i=$_tmpStrLen; $i >= 0; $i--){
     file_put_contents('cutoffattributes.txt',$vfrow['field']." ".$_tmpStr."\n",FILE_APPEND);
     file_put_contents('cutoffattributes.txt',$vfrow['field']." ".mb_substr($_tmpStr, 0, $i)."\n",FILE_APPEND);
}

1 个答案:

答案 0 :(得分:0)

我总是使用parfor over spmd,因为这对我来说更合乎逻辑。由于parfor要求循环内的每次迭代都独立于所有其他迭代。它就像使用以下方法封装它一样简单。

% Initial Variables
amountOfOptions = 8;
startStockPrice = 60 + 40 * rand(1,amountOfOptions);        
strike = 70 + 20 * rand(1,amountOfOptions);                 
v = 0.35 + 0.3 * rand(1,amountOfOptions);                   
IV = 0.25 + 0.1 * rand(1,amountOfOptions);                  
sigma = 0.15 + 0.65 * rand(1,amountOfOptions);              
riskFreeRate = 0.05 + 0.1 * rand(1,amountOfOptions);        
tn = fix(1 + 3 * rand(1,amountOfOptions)); 

% Open Parpool
try
    parpool;
catch
end

% Use parfor
parfor i = 1:amountOfOptions
    [startStockPrice(i),strike(i),v(i),IV(i),sigma(i),riskFreeRate(i),tn(i)] = fun( startStockPrice(i),strike(i),v(i),IV(i),sigma(i),riskFreeRate(i),tn(i) );
end

然后,您可以创建将接受所有参数并处理/重新输出它们的封装函数fun。它将具有以下定义/标题:

function [startStockPrice,strike,v,IV,sigma,riskFreeRate,tn] = fun( startStockPrice,strike,v,IV,sigma,riskFreeRate,tn );