【问题标题】:Parallel Processing in MATLAB with more than 12 cores超过 12 个内核的 MATLAB 中的并行处理
【发布时间】:2017-05-19 23:49:08
【问题描述】:

我创建了一个函数来使用 Gap Statistics 算法计算数据集的正确 ks 数。该算法需要在一个点上为 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

【问题讨论】:

    标签: optimization parallel-processing matlab


    【解决方案1】:

    请注意,在 R2014a 中,取消了对本地工人人数的限制。见the release notes

    【讨论】:

    • 工作链接:mathworks.com/help/distcomp/… 引用:“本地工作人员的数量不再限制为 12。您现在可以在客户端计算机上运行超过 12 个工作人员的本地集群。除非您调整集群配置文件,本地集群的默认最大大小与机器上的计算核心数相同。”
    • 感谢@bers - 更新了我的答案(我不得不稍微修改一下 URL 以使其对我有用......)
    【解决方案2】:

    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 开始,Parallel Computing Toolbox 的本地工作人员数量不再有限制。也就是说,如果您使用的是最新版本的 Matlab,您将不会遇到 OP 描述的问题。

    【讨论】:

    • 我需要使用我所有的 64 个内核,否则这个过程将在我死后结束。您的评论是否暗示这是不可能的?
    • 有可能,但是对于 12 名以上的工作人员,除了 Parallel Toolbox 之外,您还需要 MATLAB Distributed Computing Server。
    • 正如山姆所说,一切都是为了钱。如果你有 MATLAB 的特定许可证,按照上面的手册,你可以使用超过 12 个 worker。
    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-05
        • 1970-01-01
        • 1970-01-01
        • 2018-11-19
        • 2017-07-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多