为什么Matlab的clear会违反透明度?

Why does Matlab's clear violates transparency?

在使用 Matlab 时 parfor 我遇到了以下行为

parpool(2)
parfor j=1:100
    v = j+1;
    clear v
end
> Error in ==> parallel_function>make_general_channel/channel_general at 886
> Transparency violation error.

looked into it,确实是parfor内不允许使用clear

我的问题是为什么。 v 是在每个特定的 worker 内部创建的,因此它不会干扰其他 worker。

Matlab 使用静态代码分析器来了解 parfor 循环的主体如何与主工作区交互,即哪些变量需要传输给工作人员并返回。许多函数,例如 evalevalcevalinassignin(工作空间参数指定为 'caller')、load(除非将输出分配给变量),saveclear 可以以静态分析器无法预测的方式修改工作区。多个worker操作时无法保证workspace的完整性,使用了这样的功能

需要注意的重要一点是,当您使用命令语法调用函数时,例如 clear vthe argument is passed as a string literal,这意味着静态分析器无法理解您使用的是哪个变量正在尝试清除,因此无法确定该命令对工作区的影响。

如建议的那样in documentation,释放 parfor 内部变量使用的大部分内存的解决方法是:v = [];