メインコンテンツ

マルチスレッド コシミュレーション

この例では、コシミュレーションを複数のスレッドで実行する方法を示します。

Simulink® は、ローカル ソルバーを含むコンポーネントやシミュレーション ツールを使用するコンポーネントの間のコシミュレーションをサポートする統合プラットフォームです。たとえば、S-Function を Simulink とサードパーティ製のツールやカスタム コードの間のコシミュレーションのゲートウェイとして含めることができます。また、コシミュレーション モードで Simulink にインポートされる FMU を含めることもできます。

Simulink の既定では、すべてのモデルについて複数のスレッドで実行するように MultiThreadCoSim パラメーターが設定されます。

この例では、3 つのコンポーネントのマルチスレッド コシミュレーションを実行する方法を示します。Co-Simulation Component 1 ブロックと Co-Simulation Component 3 ブロックは C-MEX S-Function で実装されています。Co-Simulation Component 2 ブロックは FMU Co-Simulation v2.0 を使用して実装されています。これらのコンポーネントは非直達であり、したがって互いにデータ依存性はありません。つまり、時間 t の出力は時間 t の入力に依存しません。

マルチスレッド コシミュレーションは、コンポーネントが疎結合で計算量が多いモデルに最適です。この例では、各コンポーネントで素数の計算を行い、与えられた入力以下の最大の素数を力まかせ探索を使用して求めます。計算の強度は与えられた範囲に正比例します。これはブロック入力で試すことができます。また、コンポーネントの通信時に、与えられた範囲内の最大の素数であるスカラー信号が交換されます。

試しに MultithreadedSim パラメーターを切り替え、実経過時間を測定してみます。

open_system('slexCoSimPrimeExample')
sim('slexCoSimPrimeExample');

参考

トピック