我希望我的脚本运行得更快,所以目的是同时使用我的内核。问题是,我不知何故错过了一层全球性。我希望我的全局变量在一些函数中是持久的,但我希望它们在每个循环调用中是不同的。
我想做什么:
parfor i:T
createData() % global variables are being created
useData() % several functions need access to global vars
end
我感谢任何想法,使这个循环同时工作,受制于我的变量全局。谢谢你的建议:)
有同样的问题;我无法在并行循环(parfor
或使用spmd
)中使用全局变量,因为它们在触发时显示为空。
% Store global variables to be reused in parallel workers
global Var1
save('temp_global_parallel','Var1');
% Parallel pool functions
parpool(4)
spmd
someFunctions();
anotherFunction();
end
% Optionally: delete to avoid the bug as explained below
delete('temp_global_variable');
然后在使用全局变量的函数中:
global Var1
if isempty(Var1)
load('temp_global_parallel')
end
注意:缺点是如果Global变量确实为空,那么您将无法检测到它。您可以通过在并行循环之后删除.mat文件来解决这个问题。
第二个警告:我不建议存储大变量(在任何情况下都不要将它们作为全局变量),因为这可能会大大降低每个循环的速度。存储和加载变量通常是不好的做法。相反,尽量只存储常量或一些参数之类的东西。在我的例子中,我存储了一个具有当前路径扩展名的字符串(小于1kb)。