When does Matlab choose to thread when using codegen and parfor

末鹿安然 提交于 2019-12-06 12:14:54

问题


I seem to be one of few people using the Matlab coder (codegen command) to get speedup, judging by the fact that there is so little discussion or help on-line. I've gotten incredible speedups from it in some cases. I've never seen it documented, but when I make a MEX file using codegen from a Matlab script with a parfor loop, it often will thread the resulting MEX. Parfor in functions spawns multiple processes which is often less efficient than just threading (I'm inferring all this from watching top in linux and seeing multiple 100% processes in Matlab functions, but a single e.g. 1000% process when running the converted MEX). I'm working on a case now where I could really use the speedup, but I see no evidence of multiple threads being used in the MEX even though parfor is working in the base function. Anyone know what the hangup might be, or how the coder chooses when to thread?


回答1:


It will only thread the parfor loop itself, it would be dangerous for the coder to guess, and impossible to calculate where there is appropriate parallelism.

If I were you, I would try to put parfor in place of anywhere in the Matlab code that I could.

And now how to determine whether a loop is acceptable to parallelize:

  1. Does it use any results from a previous calculation, if so, then don't try, seriously, it will only make it worse
  2. Does it use IO in any form, if so, then don't, it will slow it down and remove any determinism from the code

  3. Is there a loop for parfor to replace? If not, then you'll have to deal with the performance because there might not be anything to parallelize.



来源:https://stackoverflow.com/questions/18730193/when-does-matlab-choose-to-thread-when-using-codegen-and-parfor

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!