我正在寻找速度和性能非常重要的项目中的一些建议。
我创建了一个模型,该模型由一个带有 1 个 for 循环(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 语言真的很陌生,所以也许有一个简单的解决方案......
其次,整个概念在性能方面看起来不错,还是有更好的解决方案?
提前致谢!