最近我有权在群集上运行我的代码。我的代码完全可以并行,但我不知道如何最好地使用它的并行性质。我要计算一个大矩阵的元素,每个矩阵都独立于其他矩阵。我想提交作业在几台机器(如100)上运行,以加快矩阵的计算。
现在,我编写了一个脚本来提交多个作业,每个作业负责计算矩阵的一部分并将其保存在.mat文件中。最后我将它们合并以获得整个矩阵。为了提交每个单独的作业,我创建了一个新的.m文件(run1.m,run.2,...)来设置变量,然后运行该函数来计算矩阵中的相关部分。所以基本上run1.m是
id=1;compute_dists_matrix
然后compute_dists_matrix使用id来查找要计算的部分。然后我编写了一个脚本来通过run60.m创建run1.m,并将qsub创建到集群。
我想知道是否有更好的方法可以使用一些MATLAB功能来做到这一点。因为这似乎是一项非常典型的任务。
答案 0 :(得分:3)
是的,它有效,但并不理想,正如您所说的那样是一个常见问题。 Matlab有一个parallel programming toolkit。
你的群集有这个吗?如果是这样,distributed arrays值得一看。如果他们无法访问它,那么你正在做的是唯一的另一种方式。你可以将run1.m,run2.m包装在一个控制脚本中,为你自动化它......
答案 1 :(得分:0)
我相信你可以使用id的命令行参数,并为这个id提交一系列值的作业。可以通过从命令行启动MATLAB而不使用IDE来处理命令行参数,并提供要执行的脚本的名称和参数列表。我认为你可以在你的作业管理器中设置依赖项并创建一个“reduce”脚本来合并部分结果(来自文件)。可以从单个脚本管理整个过程,该脚本将生成id&其他必要的论点并提交处理和后处理具有依赖关系的作业。