0

スピードとパフォーマンスが非常に重要なプロジェクトでアドバイスを探しています。

いくつかのカスタムメイドの関数を呼び出す1つのforループ(25 000回の反復)を持つ外部関数で構成されるモデルを作成しました。モデルのパフォーマンスを向上させるために、カスタムメイドの関数をMEX関数に書き直しました。これはすでに良いスピードアップをもたらしました。ただし、外側のforループもMEX関数に配置したいと思います。しかし、MATLABからMEX関数にデータを渡す際に問題が発生します。(forループをベクトル化することはできないことに注意してください)。

モデルのシミュレーションの前にわかっているデータは、配列の大きなネストされた構造に保存されます(10000倍の配列「position1」を含む「data.Q.position1」の形式で構築されます)。doubleを含むすべての配列の長さは同じです。モデルの結果は、この配列構造にも書き込まれます(もちろん、異なるフィールド名であり、事前割り当ては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

関数入力に必要な変数を簡単に指定できるように、配列の構造を選択しました。

だから私の質問は、MEX関数にforループをどのように配置でき、構造と何をする必要があるのか​​ということです。私はMEXとC言語に本当に慣れていないので、簡単な解決策があるかもしれません...

第二に、この概念全体はパフォーマンスに関して見栄えが良いですか、それともより良いソリューションが利用可能ですか?

前もって感謝します!

4

1 に答える 1

0

から始めてmxGetFieldmxSetFieldそこからドキュメントトレイルをたどってください...

于 2013-02-12T13:53:55.000 に答える