我使用Gap Statistics算法创建了一个计算数据集正确k数的函数。该算法在一点上需要计算100个不同数据集(称为“测试数据(集合)”或“参考数据(集合)”)的色散(即,每个点与其质心之间的距离之和)。 )。由于这些操作是独立的,我想在所有核心上并行它们。我有Mathworks的并行工具箱,但我不知道如何使用它(问题1;我可以使用过去的线程来理解这一点,我猜)。但是,我真正的问题是另一个问题:这个工具箱似乎只允许使用12个核心(问题2)。我的机器有64个核心,我需要使用它们。你知道如何在12个核心之间并行处理吗?
为了您的信息,这是应该并行运行的代码:
%This cycle is repeated n_tests times where n_tests is equal
%to the number of reference datasets we want to use
for id_test = 2:n_tests+1
test_data = generate_test_data(data);
%% Calculate the dispersion(s) for the generated dataset(s)
dispersions(id_test, 1:1:max_k) = zeros;
%We calculate the dispersion for the id_test reference dataset
for id_k = 1:1:max_k
dispersions(id_test, id_k) = calculate_dispersion(test_data, id_k);
end
end
答案 0 :(得分:5)
请注意,在R2014a中,删除了当地工人数量的限制。请参阅the release notes。
答案 1 :(得分:3)
Parallel Computing Toolbox提供的本地工作人员数量取决于许可证。介绍时,限制为4;这在R2009a中变为8;在R2011b中为12。
如果要使用16个工作程序,则需要16个节点的MDCS许可证,并且还需要设置某种调度程序来管理这些许可证。有关如何执行此操作的详细说明:http://www.mathworks.de/support/product/DM/installation/ver_current/。一旦你完成了,是的,你将能够做“matlabpool open 16”。
编辑:从Matlab版本R2014a开始,并行计算工具箱的本地工作人员数量不再受限制。也就是说,如果您使用的是最新版本的Matlab,则不会遇到OP所描述的问题。
答案 2 :(得分:0)
matlab在其并行工具箱上创建此限制这一事实使得它经常不值得使用它的金钱和努力。 解决方法之一是使用matlab编译器和使用vmware或虚拟盒的虚拟机的组合。
这种方法非常耗时,只有比移植代码节省更多时间并且代码已经过高度优化才值得。
答案 3 :(得分:0)
我在32核心机器和6个数据集上遇到了同样的问题。我通过创建shell脚本克服了这个问题,该脚本启动了六次matlab,每个数据集一个。我可以这样做,因为计算不依赖。据我所知,你可以使用类似的方法。通过启动大约6个实例,每个实例计算大约16个数据集。这取决于你拥有多少RAM以及每个实例消耗多少。