0

我有一个使用 Matlab 运行的大规模梯度下降优化问题。代码有两部分:

  1. 触发每次更新参数向量的迭代的顺序更新部分。
  2. 一个验证错误计算部分,每 10 次左右的迭代触发一次,它使用触发它的相应迭代结束时的参数值。

我现在运行的方式是依次执行 (1) 和 (2)。但是(2)需要很多时间,而且它不是我日常工作的核心部分——我只是为了检查进度并绘制模型的错误。是否可以在 Matlab 中以与 (1) 并行的方式运行 (2) ?请注意,(1) 不能并行运行,因为它执行顺序更新。所以一个简单的“parfor”用法不是一个解决方案,除非有一个非常聪明的方法来做到这一点。

4

1 回答 1

0

我认为 Matlab 在(相当受限的)并行计算工具箱之外没有任何多线程方式。有一项工作可能对您有所帮助:

打开 2 个 Matlab 会话,会话AB(或实例,或工作区,但你怎么称呼它)

  • Matlab会话A
    • 计算顺序过程的 10 次迭代 (1)
    • 将结果保存在文件中(充分且唯一命名
    • 继续计算接下来的 10 次迭代(基本上回到这个循环的顶部)

并行:

  • Matlab会话B
    • 定期检查进程写入的文件是否存在A(定义一个计时器,它将在对您的进程有意义的时间间隔内执行此操作,几秒钟或几分钟......)
    • 如果文件存在 => 加载它,则进行验证计算(您的过程 (2))并显示/报告结果。

注意:这仅在进程 (1) 不需要进程 (2) 的结果来运行其迭代时才有效,但如果是这种情况,我不知道你如何才能并行化。

如果您的机器上有多个应该平稳运行的核心,如果您有一个核心,那么 2 个会话将不得不共享,您将看到性能影响。

于 2014-09-27T16:17:07.403 回答