【问题标题】:Why is this simple parallel Matlab program much slower than the non-parallel version?为什么这个简单的并行 Matlab 程序比非并行版本慢很多?
【发布时间】:2014-02-04 03:18:57
【问题描述】:

我有一个调用内置遗传算法函数的非常简单的脚本:

function test1(gen)
    options = gaoptimset('UseParallel', 'always', 'Vectorized', 'off');
    tic;
    x = ga(@dejong5fcn, 2, [], [], [], [], [], [], [], options);
    toc
end

首先,我在没有启动 matlabpool 的情况下运行了 test1。正如预期的那样,它运行良好,但仅使用一个 CPU 内核,正如 Windows 资源监视器所观察到的那样。运行 20020 健身评估需要 4.2 秒。然后,我使用以下命令启动并行引擎:“start matlabpool local 4”,然后执行其他相同的 test1 运行。它运行并使用所有四个 CPU 内核,但执行 20020 健身评估大约需要 90.7 秒。

我对 Matlab R2012a(在 Windows 7 64 位上)中的并行性有什么不了解的地方?感谢您的帮助。

【问题讨论】:

  • 你试过不同的平台吗?我发现 Parallel Computing Toolbox 的性能可能对平台非常敏感。另外,您是否启用了超线程?
  • 如果您执行一些长时间的操作,并行处理通常会很好,如果您执行 20000 次操作需要不到一秒钟的时间,那么开销可能会杀死您。
  • 这个问题是在 MATLAB 中引入基于线程的并行之前提出的(我认为)。请参阅this page 以了解默认的基于进程的并行性和可选的基于线程的并行性之间的区别。

标签: matlab parallel-processing


【解决方案1】:

当您对算法进行并行化时,在多个并行操作之间进行通信以及在它们之间来回传递数据会产生开销。在这种情况下,您有大量相当小的操作,并且开销会淹没并行化的任何加速。

尝试并行化较少数量的较大操作,您应该会看到更好的加速。

顺便说一句,这就是UseParallel 选项默认不启用的原因。当您将其设置为 true 时,您是在告诉 Parallel Computing Toolbox 您知道该问题将从并行化中受益(并非所有问题都这样做),并且您正在授予它并行化算法的权限。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 2021-06-18
    相关资源
    最近更新 更多