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 在包含此 iffor 循环的每次迭代中都被重新定义可能会有所帮助,并且 yxparfor 循环和包含它的 for 循环的计数器变量,以及 targsHittargsTouched 是占位符变量,在每个 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 循环。

需要与这些分类相匹配的变量用法,以确保可以在并行线程上执行循环的不同迭代。