MATLAB编码器最近证明对我很有帮助,成功制作了一个带有parfor
的函数的MEX文件,非常好地加速了一个长期运行的程序。
但是,我刚刚在代码中添加了另一行,Coder告诉我它无法对该行中的变量进行分类:
if any(bullseyes)
firstHit = bullseyes(1);
organism(x,y).path(firstHit).hit = targ;
targsHit = targsHit + 1;
targsTouched = targsTouched + 1;
end
我将鼠标悬停在hit
末尾的单词organism(x,y).path(firstHit).hit
上,它告诉我A variable in a parfor could not be classified
。 (这确实在parfor
内,确实在for
内的parfor
内,但由于parfor
内部有很多,我决定只分享这么多。)知道bullseyes
在包含此for
的{{1}}循环的每次迭代中重新定义if
可能会有所帮助,而且y
和x
是parfor
分别包含for
循环和targsHit
循环的计数器变量,targsTouched
和organism.path.hit
是占位符变量,在每个x的末尾传输货物, y组合。
我很惊讶它因为两个原因没有认识到organism(x,y).path(firstGlance).hit = targ;
的类。在另一个几乎相同的代码块之后,等效的调用parfor
没有异议 - 尽管我认为接口可能被编程为仅在修复错误的第一个实例时对其进行修复。此外,更重要的是,我已经告诉Coder在界面的前一页上该字段被归类为什么。正如您在下图中所看到的,它应该将其识别为双标量:
关于为什么这个定义没有经过的任何想法,以及我如何让Coder明白在while( the character from the file is not a newline character )
循环中定义的结构的struct字段的这个标量字段是标量?
答案 0 :(得分:1)
错误消息是" parfor中的变量无法分类"是指在以下文档页面中提到的parfor循环中使用的变量的分类:
http://www.mathworks.com/help/coder/ug/classification-of-variables-in-parfor-loops.html
访问
生物(X,Y)。路径(firstHit).hit
与该页面上提到的任何分类都不匹配。因此,不支持在MATLAB Coder中的parfor循环中使用它。您可以尝试以所有变量用法与链接中描述的分类相匹配的方式重写parfor循环。如果无法编写任何符合分类的内容,则可将其移至parfor循环之外。
需要匹配这些分类的变量用法,以确保可以在并行线程上执行循环的不同迭代。