2

最近我有权访问群集上运行我的代码。我的代码是完全并行的,但我不知道如何最好地利用其并行性。我必须计算一个大矩阵的元素,并且每个元素都独立于其他元素。我想提交作业在几台机器(如100)上运行,以加速矩阵的计算。matlab与sge分布式计算(qsub)

现在,我写了一个脚本来提交多个作业,每个作业负责计算矩阵的一部分并将其保存在.mat文件中。最后,我正在合并它们以获得整个矩阵。为了提交每个单独的作业,我创建了一个新的.m文件(run1.m,run.2,...)来设置一个变量,然后运行函数来计算矩阵中的关联部分。所以基本run1.m是

id=1;compute_dists_matrix 

然后compute_dists_matrix使用id找到它将要计算的部分。然后,我编写了一个脚本,通过run60.m创建run1.m,并将它们置于集群中。

我想知道是否有更好的方法来使用MATLAB的一些功能来做这个例子。因为这似乎是一个非常典型的任务。

回答

3

是的,它的工作原理,但并不理想,正如您所说的是一个常见问题。 Matlab有一个parallel programming toolkit

你的集群有这个吗?如果是这样,distributed arrays值得看看。如果他们无法访问它,那么你正在做的是唯一的另一种方式。你可以将你的run1.m,run2.m包裹在一个控制脚本中,以便为你自动执行...

0

我相信你可以使用命令行参数作为id,并提交具有该id值的范围的作业。命令行参数可以通过在没有IDE的情况下从命令行启动MATLAB并提供要执行的脚本的名称和参数列表来处理。我认为你可以在作业管理器中设置依赖关系,并创建一个“reduce”脚本来合并部分结果(来自文件)。整个过程可以通过一个脚本进行管理,该脚本将生成其他必要参数,并提交具有依赖关系的后处理作业处理&。