0

基本的な質問があります。申し訳ありませんが、それは非常にばかげた一般的なものかもしれませんが、私たちの知識にとって非常に重要です. C/C++ で生成されたコードは、並列 (AND) 状態に対してどのように実装されていますか? マルチスレッドアプローチを使用してそれらを実装していますか?

この図に示すように、2 つのパラレル ステートのみの単純なシナリオの C ソース コードを生成しました。この単純なシナリオでも複雑なコードですが、スレッド化の根拠は見られませんでした。

ここに画像の説明を入力

4

1 に答える 1

1

並列処理と並行処理を混同しています。simulink の用語では、すべての並列状態が 1 つのタイム ステップで実行されます。これはシミュレーションでは許容されますが、複数の実行コアを最大限に活用する必要があるリアルタイム システムのコード生成では許容されません。これは、一般的な simulink ブロックにも当てはまります。非同期ブロック (サンプル レートが異なる) と並列状態は、同じスレッド (ステップ関数内) で順次実行されます。あなたが制御できる唯一のものは、実行の順序です。下記参照:

http://uk.mathworks.com/help/stateflow/ug/execution-order-for-parallel-states.html

たとえば、次のパラレル ステートに対して生成されたコードは次のとおりです。 Stateflow モデル 生成コード

13 行目と 15 行目の step() 関数では、stateflow の順序に従って出力が割り当てられていることに注意してください。

PCT (Parallel Computing Toolbox) がニーズをサポートしているかどうかを検討することをお勧めします。

http://uk.mathworks.com/solutions/parallel-computing/index.html

または、ターゲット ハードウェアによっては、C11 std::thread を使用して手動でソース コードを記述し、s-function やレガシ コード ツールを使用してシミュレーションに取り込むことが適している場合があります。

于 2014-12-22T22:22:28.113 に答える