2

最近我可以在集群上运行我的代码。我的代码是完全可并行化的,但我不知道如何最好地利用它的并行特性。我必须计算一个大矩阵的元素,每个元素都独立于其他元素。我想提交作业以在多台机器(如 100 台)上运行以加快矩阵的计算。

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

id=1;compute_dists_matrix

然后 compute_dists_matrix 使用 id 来查找它要计算的部分。然后我编写了一个脚本来创建 run1.m 通过 run60.m 和 qsub 到集群。

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

4

2 回答 2

3

是的,它有效,但并不理想,正如您所说,这是一个常见问题。Matlab 有一个并行编程工具包

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

于 2011-04-23T22:47:57.337 回答
0

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

于 2013-03-06T12:34:26.753 回答