1

我似乎是少数使用 Matlab 编码器(codegen 命令)来获得加速的人之一,从在线讨论或帮助如此之少的事实来看。在某些情况下,我从中获得了令人难以置信的加速。我从未见过它记录在案,但是当我使用带有 parfor 循环的 Matlab 脚本中的 codegen 制作 MEX 文件时,它通常会将生成的 MEX 线程化。函数中的 Parfor 会产生多个进程,这通常比线程效率低(我通过在 linux 中观察 top 并在 Matlab 函数中看到多个 100% 进程来推断所有这些,但在运行转换后的 MEX 时只有一个,例如 1000% 进程)。我现在正在研究一个我可以真正使用加速的案例,但我没有看到 MEX 中使用了多个线程的证据,即使 parfor 在基本函数中工作。

4

1 回答 1

0

它只会线程化 parfor 循环本身,编码器猜测会很危险,并且无法计算出适当的并行度。

如果我是你,我会尽量用 parfor 代替 Matlab 代码中的任何地方。

现在如何确定一个循环是否可以并行化:

  1. 它是否使用先前计算的任何结果,如果是,请不要尝试,严重的是,它只会使情况变得更糟
  2. 它是否以任何形式使用 IO,如果是,则不要,它会减慢速度并从代码中删除任何确定性

  3. parfor 是否有循环替换?如果没有,那么您将不得不处理性能问题,因为可能没有任何东西可以并行化。

于 2013-10-22T20:43:47.910 回答