スピードとパフォーマンスが非常に重要なプロジェクトでアドバイスを探しています。
いくつかのカスタムメイドの関数を呼び出す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言語に本当に慣れていないので、簡単な解決策があるかもしれません...
第二に、この概念全体はパフォーマンスに関して見栄えが良いですか、それともより良いソリューションが利用可能ですか?
前もって感謝します!