分享你我的资源分享我们的人生!
当前位置: 首页 >> 文章列表

以多任务分布Matlab的计算(1)-顺序代码

Dividing MATLAB® Computations into Tasks

9/11/2008 11:22:08 PM
本系列教程,介绍如何把Matlab的顺序程序划分成多个任务的并行程序。

Matlab并行计算工具箱™ ,使我们能够在集群电脑上执行我们的MATLAB ®程序。在本演示中,我们看看如何划分一个拥有大量操作的MATLAB集合成较小的工作单位,我们称这些工作单位为任务,其中每个任务可以在在我们的群集计算机中执行。我们将使用pctdemo_helper_split_scalar和pctdemo_helper_split_vector函数来实现这些功能。

内容目录

  1. 获得配置
  2. 开始顺序代码
  3. 分析顺序问题
  4. 示例:划分一个仿真到多任务中
  5. 示例:划分一个参数序列到多任务中
  6. 更多的参数序列
  7. 划分Matlab操作到多任务中:最佳实践

在这篇文章中,我们将讲解1-3,其他的见后继文章。

获得配置

像每一个Parallel Computing Toolbox的演示,本演示的需要,知道要使用什么样的调度。这里我们使用默认配置所确定的调度。你可以从帮组文档中查到如何创建新的配置和如何更改默认的配置。

configName = defaultParallelConfig();
 

从顺序代码开始

其中Parallel Computing Toolbox的一个重要的优势是,它可以很好的编译现有的串行顺序程序代码。于是,大家可以更加关注与算法设计初期、调试阶段、性能优化阶段的顺序MATLAB代码,因为这样我们才能得到快速的原型系统开发、完全利用Matlab提供的交互编辑、调试执行能力。在开发顺序代码的时候,我们应该分开前期处理和后期处理,使核心计算尽可能的简单和并独立于其余代码。一旦我们的代码基本稳定,就该考虑分布式计算了。如果我们为粗粒度的应用程序编写了很好的模式化代码,要想把这些计算划分开来是非常容易的。

分析顺序问题 

并行计算工具箱支持执行粗粒度的应用程序,也就是说那些使用多个输入参数的独立的并行的单个程序。我们现在将尝试展示一些这样的粗粒度的例子,并解释如何划分这些种计算。我们将集中讨论两个常见的情况,他们是:
 

1. 使用不同的值作为输入参数,多次激活同一个单一函数。这种性质的计算,有时被称为parameter sweeps,它的Matlab代码通常看起来如下: 

       for i = 1:n
         y(i) = f(x(i));
       end

2. 多次引用一个单一的随机函数。假设g(x)的计算的涉及随机数,这样每次的计算返回的值都不一定一样(即使在输入参数不变的情况下)。这种计算方法有时被称为Monte Carlo simulations,以及代码往往看起来类似下列MATLAB的代码:

       for i = 1:n
         y(i) = g(x);
       end

在我们的顺序代码中,Monte Carlo simulations和parameter sweeps类型的代码很有可能看上去非常相似。例如,如果函数f是矢量,parameter sweeps可能只是显示为

      y = f(x);

Monte Carlo simulations可能出现的作为

       y = g(x, n);

 

本文翻译的英文原文是:Dividing MATLAB® Computations into Tasks