Matlab R2015b 与 R2015a - table 在 parfor 循环中 - 违反透明度
Matlab R2015b vs R2015a - table in parfor loop - transparancy violation
我目前在 parfor 循环中创建 table 时遇到基本的透明度违规错误。最令人困惑的一点是,完全相同的示例代码在 R2015a 中有效,但在较新版本的 R2015b 中不再有效。
为了模拟问题,我 运行 在两个 Matlab 版本上使用了以下代码:
A = [1,2,3,4];
parfor i=1:5
table(A)
end
这样做returns出现以下错误:
Error using table (line 247) Transparency violation error.
See
Parallel Computing Toolbox documentation about Transparency
我现在很想知道是否有人遇到过同样的问题,或者是否有人可以对此提供解释。使用以前的版本,我的初始代码和这个简单的例子都非常有效。
不幸的是,这是因为 R2015b 中的工作区透明度检查变得更加严格,并且不允许使用 inputname
,这是 table
构造函数正在使用的。我认为解决此问题的唯一方法是将 table
构造函数调用移动到从 parfor
循环内调用的函数中。即
parfor idx = 1:1
t{idx} = iBuildTable(idx);
end
function t = iBuildTable(varargin)
t = table(varargin{:});
end
注意:原始问题已在 MATLAB 的 R2019b 中修复,现已发布(2019-09-11 发布)。
我目前在 parfor 循环中创建 table 时遇到基本的透明度违规错误。最令人困惑的一点是,完全相同的示例代码在 R2015a 中有效,但在较新版本的 R2015b 中不再有效。
为了模拟问题,我 运行 在两个 Matlab 版本上使用了以下代码:
A = [1,2,3,4];
parfor i=1:5
table(A)
end
这样做returns出现以下错误:
Error using table (line 247) Transparency violation error.
See Parallel Computing Toolbox documentation about Transparency
我现在很想知道是否有人遇到过同样的问题,或者是否有人可以对此提供解释。使用以前的版本,我的初始代码和这个简单的例子都非常有效。
不幸的是,这是因为 R2015b 中的工作区透明度检查变得更加严格,并且不允许使用 inputname
,这是 table
构造函数正在使用的。我认为解决此问题的唯一方法是将 table
构造函数调用移动到从 parfor
循环内调用的函数中。即
parfor idx = 1:1
t{idx} = iBuildTable(idx);
end
function t = iBuildTable(varargin)
t = table(varargin{:});
end
注意:原始问题已在 MATLAB 的 R2019b 中修复,现已发布(2019-09-11 发布)。