我正在寻找速度和性能非常重要的项目中的一些建议 .
我创建了一个模型,它由一个带有1个for-loop(25 000次迭代)的外部函数组成,它调用了几个定制函数 . 为了提高模型的性能,我将定制的函数重写为MEX函数 . 这已经提供了很好的加速 . 但是,我还想将外部for循环放在MEX函数中 . 但是我将数据从MATLAB传递到MEX函数时遇到了问题 . (注意,无法对for循环进行矢量化) .
在模型模拟之前已知的数据被保存到大型嵌套数组结构中(以“data.Q.position1”的形式构建,其中“position1”为10000个双精度数组) . 包含双精度数的所有数组都具有相同的长度 . 模型的结果也将写入这个数组结构(当然不同的字段名,并且在for循环之前完成预分配)
所以目前,该模型看起来像这样:
[data] = function model(data)
for i=1:10000
data.Q.position1(i) = MEX-function1(data.WL.position4(i), data.WL.position3(i), …);
data.Q.position2(i) = MEX-function1(data.WL.position6(i), data.WL.position12(i), …);
…
data.WL.position7(i) = MEX-function2(data.Q.position1(i), …);
…
end
我选择了数组结构,因此我可以轻松指出函数输入所需的变量 .
所以我的问题是,如何将for循环放在MEX函数中,我该如何处理结构?我是MEX和C语言的新手,所以也许有一个简单明了的解决方案......
其次,这整个概念在性能方面是否看起来不错,或者是否有更好的解决方案?
提前致谢!
1 回答
从mxGetField和mxSetField开始,然后从那里跟踪文档路径......