我已经研究了有关matlab处理的页面和讨论,但我仍然不知道如何在多个节点(而不是核心)上分发我的程序。在我使用的集群中,有10个节点可用,每个节点内部有8个可用核心。当在每个节点内使用“parfor”(本地在8个核心之间)时,并行化工作正常。但是当使用多个节点时,我认为(不确定如何验证这一点)它不能很好地工作。这是我在集群上运行的一个程序:
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。我不知道输出结束时的警告是什么!
答案 0 :(得分:1)
为了在多个节点上运行MATLAB,除了并行计算工具箱之外,还需要分布式计算服务器。必须在群集中的所有节点上安装并正确配置分布式计算服务器。通常,MATLAB分布式服务器附带shell脚本,用于在基于调度程序和集群设置的多个节点上启动并行MATLAB作业。
无法访问分布式计算服务器,MATLAB只能在单个节点上运行。向集群管理员验证分布式计算服务器是否已正确设置并运行是很有价值的。在某些情况下,这些服务器的管理员甚至具有用于启动和运行其用户群共有的作业的示例脚本,例如, MATLAB
以下是分布式计算服务器文档的链接: http://www.mathworks.com/help/mdce/index.html?searchHighlight=distributed%20computing%20server