什么时候Matlab选择在使用codegen和parfor时进行线程化

时间:2013-09-10 23:11:53

标签: multithreading matlab parallel-processing parfor matlab-coder

我似乎是少数几个使用Matlab编码器(codegen命令)获得加速的人之一,从在线讨论或帮助这么少的事实来判断。在某些情况下,我从中获得了令人难以置信的加速。我从来没有看过它的文档记录,但是当我使用带有parfor循环的Matlab脚本中的codegen创建一个MEX文件时,它通常会将生成的MEX线程化。函数中的Parfor会产生多个进程,这些进程通常不如仅仅是线程效率(我在Linux中观察顶部并在Matlab函数中看到多个100%进程,但在运行转换后的MEX时只有一个例如10​​00%的进程)。我正在研究一个案例,我现在可以真正使用加速,但我看不到在MEX中使用多个线程的证据,即使parfor在基本函数中工作。任何人都知道挂断可能是什么,或者编码人员如何选择线程?

1 个答案:

答案 0 :(得分:0)

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

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

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

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

  3. 是否有替换parfor的循环?如果没有,那么你将不得不处理性能,因为可能要进行并行化。