Matlab - 制作 MEX,编码器无法对结构数组的定义字段进行分类
Matlab - making a MEX, Coder cannot classify defined field of a struct array
最近证明 MATLAB Coder 对我很有帮助,它成功地制作了一个包含 parfor
的函数的 MEX 文件,极大地加快了长 运行 程序的速度。
但是,我刚刚在代码中添加了另一行,Coder 告诉我它不能 classify 在那一行中的变量:
if any(bullseyes)
firstHit = bullseyes(1);
organism(x,y).path(firstHit).hit = targ;
targsHit = targsHit + 1;
targsTouched = targsTouched + 1;
end
我将鼠标悬停在 organism(x,y).path(firstHit).hit
末尾的单词 hit
上,它告诉我 A variable in a parfor could not be classified
。 (确实在parfor
里,确实在for
里,在parfor
里,但既然parfor
里有这么多,我决定只分享这么多.) 了解 bullseyes
在包含此 if
的 for
循环的每次迭代中都被重新定义可能会有所帮助,并且 y
和 x
是parfor
循环和包含它的 for
循环的计数器变量,以及 targsHit
和 targsTouched
是占位符变量,在每个 x 的末尾传输它们的货物, y组合。
我很惊讶它没有识别 organism.path.hit
的 class 有两个原因。在这个代码之后的另一个几乎相同的代码块中,等效调用 organism(x,y).path(firstGlance).hit = targ;
没有异议 - 尽管我认为接口可能被编程为仅反对第一个错误实例,当修复一个错误时修复所有错误.此外,更重要的是,我已经在界面的上一页上告诉 Coder 该字段 class 化为什么。如下图所示,它应该将其识别为双标量:
关于为什么这个定义没有通过的任何想法,以及我如何让编码器理解结构的结构字段的这个标量字段,在 parfor
循环中定义,是一个标量?
错误消息是 "A variable in a parfor could not be classified" 指的是在以下文档页面中提到的 parfor 循环中使用的变量分类:
http://www.mathworks.com/help/coder/ug/classification-of-variables-in-parfor-loops.html
访问权限
有机体(x,y).path(firstHit).hit
与该页面上提到的任何分类都不匹配。因此,不支持在 MATLAB Coder 的 parfor 循环中使用它。您可以尝试以所有变量用法与 link 中描述的分类相匹配的方式重写 parfor 循环。如果无法写入任何内容以匹配分类,则可以将其移出 parfor 循环。
需要与这些分类相匹配的变量用法,以确保可以在并行线程上执行循环的不同迭代。
最近证明 MATLAB Coder 对我很有帮助,它成功地制作了一个包含 parfor
的函数的 MEX 文件,极大地加快了长 运行 程序的速度。
但是,我刚刚在代码中添加了另一行,Coder 告诉我它不能 classify 在那一行中的变量:
if any(bullseyes)
firstHit = bullseyes(1);
organism(x,y).path(firstHit).hit = targ;
targsHit = targsHit + 1;
targsTouched = targsTouched + 1;
end
我将鼠标悬停在 organism(x,y).path(firstHit).hit
末尾的单词 hit
上,它告诉我 A variable in a parfor could not be classified
。 (确实在parfor
里,确实在for
里,在parfor
里,但既然parfor
里有这么多,我决定只分享这么多.) 了解 bullseyes
在包含此 if
的 for
循环的每次迭代中都被重新定义可能会有所帮助,并且 y
和 x
是parfor
循环和包含它的 for
循环的计数器变量,以及 targsHit
和 targsTouched
是占位符变量,在每个 x 的末尾传输它们的货物, y组合。
我很惊讶它没有识别 organism.path.hit
的 class 有两个原因。在这个代码之后的另一个几乎相同的代码块中,等效调用 organism(x,y).path(firstGlance).hit = targ;
没有异议 - 尽管我认为接口可能被编程为仅反对第一个错误实例,当修复一个错误时修复所有错误.此外,更重要的是,我已经在界面的上一页上告诉 Coder 该字段 class 化为什么。如下图所示,它应该将其识别为双标量:
关于为什么这个定义没有通过的任何想法,以及我如何让编码器理解结构的结构字段的这个标量字段,在 parfor
循环中定义,是一个标量?
错误消息是 "A variable in a parfor could not be classified" 指的是在以下文档页面中提到的 parfor 循环中使用的变量分类:
http://www.mathworks.com/help/coder/ug/classification-of-variables-in-parfor-loops.html
访问权限
有机体(x,y).path(firstHit).hit
与该页面上提到的任何分类都不匹配。因此,不支持在 MATLAB Coder 的 parfor 循环中使用它。您可以尝试以所有变量用法与 link 中描述的分类相匹配的方式重写 parfor 循环。如果无法写入任何内容以匹配分类,则可以将其移出 parfor 循环。
需要与这些分类相匹配的变量用法,以确保可以在并行线程上执行循环的不同迭代。