我研究了有关 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。我不知道输出末尾的警告是什么!