我在一个项目中寻找一些建议,其中速度和性能是非常重要的。
我创建了一个模型,它包含一个带有1个for循环(25000次迭代)的外部函数,它调用几个自定义函数。为了提高模型的性能,我将定制的函数重写为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语言的新手,所以也许有一个简单的解决方案……
其次,整个概念在性能方面看起来很好,还是有更好的解决方案?
提前感谢!
发布于 2013-02-12 21:53:55
从mxGetField和mxSetField开始,然后从那里跟踪文档...
https://stackoverflow.com/questions/14830772
复制相似问题