【发布时间】:2014-02-10 02:17:47
【问题描述】:
我目前正在尝试使用 MATLAB 2013b 并行运行非常耗时的实验。
加快速度的一种策略是使用一个实验的结果来“热启动”下一个实验。就我而言,这有点复杂,因为每个实验都有n_types 类型之一,而我只能使用k 类型的实验来加速另一个k 类型的实验。
不幸的是,我无法使用parfor 函数实现此策略,因为它需要每个作业更新一个公共变量(存储热启动信息)。也就是说,我听说可以使用spmd 框架来做到这一点。
我想知道是否有人可以帮助我将以下通用(非工作)parfor 代码块“翻译”成可以在spmd 代码中工作的内容。
n_cores = %provided by user (# of workers that are available)
inputs = %provided by user (n_jobs x 1 cell array of structs)
types = %provided by user (n_types x 1 array of integer values)
n_jobs = length(inputs)
n_types = length(unique(types))
outputs = cell(n_jobs,1) %cell array to store job output
warm_starts = cell(0,n_types) %empty 0 x n_type cell array to store warm start data
matlabpool('open',n_cores)
parfor i = 1:length(jobs)
%run myfun in parallel
outputs{i} = myfun(inputs{i},warm_starts(types(i)));
%update warm start data for experiments of this type with data from current experiment
warm_starts{end+1,types(i)) = get_warm_start(job_outputs{i});
end
【问题讨论】:
标签: matlab parallel-processing