【发布时间】:2018-12-06 22:35:31
【问题描述】:
我希望我的脚本运行得更快,所以目的是同时使用我的内核。问题是我不知何故错过了一层全球化。我希望我的全局变量在某些函数中保持不变,但我希望它们在每个循环调用中都不同。
我想做什么:
parfor i:T
createData() % global variables are being created
useData() % several functions need access to global vars
end
我感谢任何想法,让这个循环同时工作,但要保持我的变量是全局的。谢谢你的建议:)
【问题讨论】:
-
一般不推荐使用全局变量,因为它们会降低计算效率,除非你真的需要它们。一些讨论可以找到here
-
这是不可能的。由于 parfor 迭代以任何顺序同时执行,您根本不能在其中使用全局变量。您必须更改代码以使用局部变量,没有其他办法。
-
不幸的是,我需要全局变量来解决最小化问题。没有它,目标函数不知道必须最小化什么。
-
@Antalagor 通常你可以避免使用全局变量。但如果你不能,那么你就不能使用并行编码。
-
您通常可以使用匿名函数 (mathworks.com/help/matlab/matlab_prog/anonymous-functions.html) 向您尝试优化的函数添加数据。也许这会让您避免使用
global数据 - 另请参阅mathworks.com/help/matlab/math/parameterizing-functions.html
标签: matlab parallel-processing global-variables