我正在使用Matlab并行工具箱进行并行计算,我已经仔细检查了代码的变量定义,它符合parfor命令的要求,但是Matlab还是告诉我"透明度违规错误",你能帮我解决这个问题吗?
下面是源代码。
load Wind80.mat
Wspeed_80 = Wind80;
TotalLoc = 4000;
Nloc = 5; % no of loc of each run
maxrun = ceil(TotalLoc/Nloc);
StrInfo.Pstr = 1;
StrInfo.Tstr = 0:4:72;
tic
parfor run = 1:maxrun
WT1 = [];
WT2 = [];
[WT1, WT2] = CompWTGenFun(run, Nloc, TotalLoc, StrInfo);
filenm = ['ResultPara' num2str(StrInfo.Pstr) 'Run' num2str(run) '.mat' ];
save(filenm, 'WT1', 'WT2', '-mat');
clear WT1 WT2
end
toc
1条答案
按热度按时间dba5bblo1#
不能在
parfor
循环中使用save
函数,因为这将导致transparency violation。当函数需要查看不幸的是,save
就是这样做的--在代码中,您为save
命令指定了要保存的变量的 * 名称 *,并且X1 M4 N1 X实现尝试从其调用工作空间(即,X1 M5 N1 X循环的主体)提取值。解决方法是将对
save
的调用隐藏在一个单独的函数中,换句话说,您需要这样做:这是因为透明约束只应用于直接出现在
parfor
循环体中的代码。正如注解中提到的,您使用的
clear
命令是不必要的,并且会再次导致透明度冲突。