以多任务分布Matlab的计算(3)-划分一个参数序列到多任务中
Example: Dividing a Parameter Sweep into Tasks
源代码在线查看: 以多任务分布matlab的计算.txt
以多任务分布Matlab的计算(3)-划分一个参数序列到多任务中
Example: Dividing a Parameter Sweep into Tasks
9/21/2008 11:40:32 AM
文章介绍如何划分参数型的多任务序列。
Matlab并行计算工具箱? ,使我们能够在集群电脑上执行我们的MATLAB ?程序。在本演示中,我们看看如何划分一个拥有大量操作的MATLAB集合成较小的工作单位,我们称这些工作单位为任务,其中每个任务可以在在我们的群集计算机中执行。我们将使用pctdemo_helper_split_scalar和pctdemo_helper_split_vector函数来实现这些功能。
内容目录
1. 获得配置
2. 开始顺序代码
3. 分析顺序问题
4. 示例:划分一个仿真到多任务中
5. 示例:划分一个参数序列到多任务中
6. 更多的参数序列
7. 划分Matlab操作到多任务中:最佳实践
这一部分,将讲解第5-6节。1-3节见,上一篇文章以多任务分布Matlab的计算(1)-顺序代码,第4节见以多任务分布Matlab的计算(2)-并行循环拆分 。
5. 示例:划分一个参数序列到多任务中
这节,我们将使用sin函数,做简单的例子。首先,让x作为一个长度10的矩阵:
x = 0.1:0.1:1;
现在,我们希望把sin(x)划分到4个计算机的集群中。我们希望4个机器分别同时执行sin(x(1:3)), sin(x(4:6)), sin(x(7:8))和sin(x(9:10))。因为,这种划分参数序列到多个任务的情况非常常见,所以,我们也做了一个函数:
numTasks = 4;
[split, numTasks] = pctdemo_helper_split_vector(x, numTasks);
celldisp(split);
split{1} =
0.1000 0.2000 0.3000
split{2} =
0.4000 0.5000 0.6000
split{3} =
0.7000 0.8000
split{4} =
0.9000 1.0000
现在,无论使用dfeval,还是createJob和createTask,都很容易执行计算了。
y = dfeval(@sin, split, 'Configuration', configName);
cat(2, y{:}) % Concatenate all the cells in y into one column vector.
ans =
Columns 1 through 9
0.0998 0.1987 0.2955 0.3894 0.4794 0.5646 0.6442 0.7174 0.7833
Column 10
0.8415
亦或,
job = createJob(sched);
for i = 1:numTasks
createTask(job, @sin, 1, {split{i}});
end
submit(job);
waitForState(job, 'finished');
y = getAllOutputArguments(job);
destroy(job);
cat(2, y{:}) % Concatenate all the cells in y into one column vector.
ans =
Columns 1 through 9
0.0998 0.1987 0.2955 0.3894 0.4794 0.5646 0.6442 0.7174 0.7833
Column 10
0.8415