我似乎是少数几个使用Matlab编码器(codegen命令)获得加速的人之一,从在线讨论或帮助这么少的事实来判断。在某些情况下,我从中获得了令人难以置信的加速。我从来没有看过它的文档记录,但是当我使用带有parfor循环的Matlab脚本中的codegen创建一个MEX文件时,它通常会将生成的MEX线程化。函数中的Parfor会产生多个进程,这些进程通常不如仅仅是线程效率(我在Linux中观察顶部并在Matlab函数中看到多个100%进程,但在运行转换后的MEX时只有一个例如1000%的进程)。我正在研究一个案例,我现在可以真正使用加速,但我看不到在MEX中使用多个线程的证据,即使parfor在基本函数中工作。任何人都知道挂断可能是什么,或者编码人员如何选择线程?
答案 0 :(得分:0)
它只会线程化parfor循环本身,编码器猜测会很危险,而且无法计算出适当的并行性。
如果我是你,我会尝试用parfor代替Matlab代码中的任何地方。
现在如何确定循环是否可以并行化:
它是否以任何形式使用IO,如果是,那么不要,它会减慢它并从代码中删除任何确定性
是否有替换parfor的循环?如果没有,那么你将不得不处理性能,因为可能不要进行并行化。