2013-02-12 83 views
0

我正在寻找一些速度和性能非常重要的项目建议。matlab结构mex

我创建了一个模型,它由一个外部函数和1个for-loop(25 000次迭代)组成,它调用了几个定制函数。为了提高模型的性能,我将自定义函数重写为MEX函数。这已经给了一个很好的加速。但是,我还想将外部for-loop放在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语言非常陌生,所以也许有一个简单的解决方案...

其次,这个整体概念在性能方面看起来不错,还是更好的解决方案?

在此先感谢!

+0

我想,所使用的输入与我还没有被定义的索引,你有你的片段错误。虽然这应该纠正你可以使用parfor。 – bdecaf 2013-02-12 11:27:47

回答

0

开始mxGetFieldmxSetField,并按照相应的文档线索......

+0

感谢您的回复。我有另一个(简单)的问题:图片我有以下结构: data.WL.position1(其中包含1000双打)。 如何在保留其他人的同时快速更改第n个双精度? – SgtPepper88 2013-02-12 16:17:19

+0

@ user2064413 - 在matlab中,您只需访问'data.WL.positions1(n)'。在mex中,您必须阅读相应的'mxArray'并通过'mxGetPr'访问它的'double *'。你可以将这个数组复制,修改并返回给调用者。 – Shai 2013-02-12 20:06:57

+0

谢谢!现在就开始工作吧! – SgtPepper88 2013-02-13 13:43:23