1

我创建了一个函数来使用 Gap Statistics 算法计算数据集的正确 ks 数。该算法需要在一个点上为 100 个不同的数据集(称为“测试数据(集)”或“参考数据(集)”)计算离散度(即,每个点与其质心之间的距离之和) )。由于这些操作是独立的,我想在所有内核上并行它们。我有 Mathworks 的 Parallel Toolbox,但我不确定如何使用它(问题 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
4

4 回答 4

5

请注意,在 R2014a 中,取消了对本地工人人数的限制。请参阅发行说明

于 2014-03-07T10:49:04.970 回答
3

Parallel Computing Toolbox 可用的本地工作人员数量取决于许可证。引入时,限制为 4;这在 R2009a 中更改为 8;和 R2011b 中的 12 个。

如果你想使用 16 个 worker,你将需要一个 16 节点的 MDCS 许可证,并且你还需要设置某种调度程序来管理这些。此处有有关如何执行此操作的详细说明:http: //www.mathworks.de/support/product/DM/installation/ver_current/。完成后,是的,您将能够执行“matlabpool open 16”。

编辑:从 Matlab 版本 R2014a 开始,Parallel Computing Toolbox 的本地工作人员数量不再有限制。也就是说,如果您使用的是最新版本的 Matlab,您将不会遇到 OP 描述的问题。

于 2013-06-09T16:21:48.070 回答
0

matlab 在其并行工具箱上创建了这种限制,这使得它通常不值得花钱和使用它。一种解决方法是结合使用 matlab 编译器和使用 vmware 或虚拟机的虚拟机。

  1. 编译运行测试所需的代码。
  2. 在 VM 模板上使用 MCR(matlab 编译器运行时)加载您编译的代码。
  3. 创建 VM 模板的多个副本,让每个模板为某些数据集运行所需的计算。
  4. 收集所有结果的数据

这种方法很耗时,只有在比移植代码节省更多时间并且代码已经高度优化的情况下才值得。

于 2013-06-10T07:26:12.243 回答
0

我在 32 个核心机器和 6 个数据集上遇到了同样的问题。我通过创建 shell 脚本克服了这个问题,该脚本启动了 matlab 六次,每个数据集一个。我可以这样做,因为计算不依赖。据我了解,您可以使用类似的方法。从大约 6 个实例开始,每个实例大约包含 16 个数据集。这取决于您拥有多少 RAM 以及每个实例消耗多少。

于 2014-02-07T16:11:45.040 回答