1

我研究了有关 matlab 处理的页面和讨论,但我仍然不知道如何将我的程序分布在多个节点(不是核心)上。在我使用的集群中,有 10 个节点可用,每个节点内有 8 个可用内核。在每个节点内(本地8 个内核之间)使用“parfor”时,并行化工作正常。但是当使用多个节点时,我认为(不知道如何验证)它不能很好地工作。这是我在集群上运行的一段程序:

function testPool2()
disp('This is a comment')
disp(['matlab number of cores : '   num2str(feature('numCores'))])

matlabpool('open',5);
disp('This is another comment!!')
tic; 
for i=1:10000 
    b = rand(1,1000);
end;
toc
tic; 
parfor i=1:10000 
    b = rand(1,1000);
end;
toc

end

输出是:

This is a comment
matlab number of cores : 8
Starting matlabpool using the 'local' profile ... connected to 5 labs.
This is another comment!!
Elapsed time is 0.165569 seconds.
Elapsed time is 0.649951 seconds.
{Warning: Objects of distcomp.abstractstorage class exist - not clearing this
class
or any of its super-classes} 
{Warning: Objects of distcomp.filestorage class exist - not clearing this class
or any of its super-classes} 
{Warning: Objects of distcomp.serializer class exist - not clearing this class
or any of its super-classes} 
{Warning: Objects of distcomp.fileserializer class exist - not clearing this
class
or any of its 

超类}

该程序首先使用“mcc -o out testPool2.m”编译,然后传输到服务器的暂存驱动器。然后我使用 Microsoft HPC pack 2008 R2 提交作业。另请注意,我无法访问每个节点上安装的 MATLAB 的图形界面。我只能使用 MSR HPC 作业管理器提交作业(请参阅:http: //blogs.technet.com/b/hpc_and_azure_observations_and_hints/archive/2011/12/12/running-matlab-in-parallel-on-a-windows- cluster-using-compiled-matlab-code-and-the-matlab-compiler-runtime-mcr.aspx )

根据上面的输出我们可以看到,可用核心数为 8;所以我推断“matlabpool”仅适用于机器中的本地内核;不在节点之间(相互连接的不同计算机)

那么,有什么想法可以将我的 for 循环(“parfor”)推广到节点?

PS。我不知道输出末尾的警告是什么!

4

1 回答 1

1

为了在多个节点上运行 MATLAB,除了并行计算工具箱外,还需要分布式计算服务器。必须在集群中的所有节点上安装并正确配置分布式计算服务器。通常 MATLAB 分布式服务器带有 shell 脚本,用于在基于调度程序和集群设置的多个节点上启动并行 MATLAB 作业。

在没有访问分布式计算服务器的情况下,MATLAB 只能在单个节点上运行。与集群管理员验证分布式计算服务器是否已正确设置和运行是很有价值的;在某些情况下,这些服务器的管理员甚至拥有用于启动和运行其用户群共有的作业的示例脚本,例如 MATLAB

这是分布式计算服务器文档的链接: http ://www.mathworks.com/help/mdce/index.html?searchHighlight=distributed%20computing%20server

于 2015-07-13T18:08:39.327 回答