我在MATLAB doc中遇到了这句话: parfor-loop的主体无法引用嵌套函数。但是,它可以通过函数句柄调用嵌套函数。
有人可以解释这意味着什么吗?
答案 0 :(得分:3)
parfor
循环与普通循环不同,因为循环体具有每次迭代的独立工作空间。实际上,当您在并行池上运行parfor
循环时,需要传输到循环体的变量将被保存并重新加载(顺便说一下,&的原因) #34;变量x不能被切片,这可能导致通信开销"警告:必须保存和重新加载巨大的变量可能会增加你的处理时间。)
因此,对嵌套函数的调用不起作用 - 父函数中的嵌套函数不再与循环体共享其工作区。此外,嵌套函数调用可以在循环的迭代中改变工作空间变量,这不会与并行执行相互作用。
相反,传递函数句柄或调用单独的函数,工作正常。函数句柄中定义的函数以及单独的函数都有自己的工作空间,在parfor
正文的迭代中不会共享任何内容,因此迭代可以完全独立地运行。
/ aside:创建嵌套函数的函数句柄可能仍然会导致问题:一个实时函数(与存储为字符串的函数句柄相反,你可以激活" {{1句柄可以携带相当多的现有工作空间,包括句柄对象。工作空间的大小和未通过引用的大小(由于保存和重新加载)都可能导致不快乐。