メインコンテンツ

マルチコア プログラミング向けのコアに対するタスクの割り当て

この例では、グラフィカルな分割によって、マルチコア プロセッサ上でコード実行を利用する方法を示します。この例では、マルチスレッド コードを生成するために Simulink® Coder™ ソフトウェアが必要です。

はじめに

マルチコア プログラミングでは、最新マルチコア プロセッサの処理能力を使用して、高性能のアプリケーションを作成できます。Simulink® ソフトウェアでは、アルゴリズムをグラフィカルに分割したり、分割から生成されたコードをマルチコア プロセッサ上の並列スレッドに割り当てたりすることによって、マルチコア プログラミングを活用できます。

並列スレッドは通常、スレッドをコアに動的に割り当てるオペレーティング システムによってスケジューリングされます。これにより、スケジューラはコアを有効に活用できるだけでなく、公平性という概念を取り入れることができます。ただし、多くのアプリケーションでは、たとえば確定性を改善するために、コアの使用方法をさらに制御する必要がある場合や、いくつかのコアを特定のロジック専用にする場合があります。このレベルの制御はグラフィカルな分割によって実現されます。この例では、その方法について説明します。

マルチコア プロジェクトを開く

マルチコアの典型的なシナリオとして、高速レート用のコードをあるコアに割り当て、低速レート用のコードを別のコアに割り当てるマルチレートのモデルがあります。これにより、さらに多くのロジックをより早いレートに追加したり、確定性を向上させたりすることができます。より一般的に言えば、リソースに対する需要が最も大きいアプリケーション ロジックに対して、コアを専有させる場合があります。

まず、プロジェクトを開きます。

openProject("slexMulticoreExample");

slexMulticoreExample model with task icons above each model reference block and areas indicating which blocks are assigned to Core0 and Core1.

モデルをタスクに分割

slexMulticoreExample モデルは既に 4 つの同時実行タスクに分割されています。モデルのタスクとマッピングを表示するには、Concurrent Executionツールを開きます。

  1. [設定] タブで、[モデル設定] をクリックします。

  2. [ソルバー] ペインで、[タスクの構成] をクリックします。

  3. 同時実行ツールの左側のペインで、[タスクとマッピング] をクリックします。

[タスクとマッピング] ビューには、モデル内の各ブロック、ブロックに割り当てられているノードとタスク、トリガーが周期的か非周期的かが示されます。たとえば、Fcn1 ブロックは Core1 ノードに割り当てられ、Task1 周期的トリガーにマッピングされています。

Tasks and Mapping view of the Concurrent Execution tool opened for the slexMulticoreExample model.

明示的な分割の詳細については、明示的な分割を使用したモデルの分割を参照してください。

マルチスレッド コードの生成

[Generate Code and Profile Report] ボタンをダブルクリックしてマルチスレッド コードを生成し、その実行をプロファイリングします。このアクションによって、生成される実行可能ファイルが実行およびインストルメント化され、プロファイリング結果とコア占有マップの両方が生成されます。コア占有マップは、コアが実行の各タイム ステップでどのように使用されたかを示します。この例では、最初のコアは速いレート (Task1 および Task2) で使用され、2 番目のコアは遅いレート (Task3 および Task4) で使用されました。

同時実行ツールに戻り、別のコア割り当てを試すことができます。特に、"Affinity" プロパティを [] にしておくことでコアの関係を指定しないようにしてみてください。これが既定の設定であり、Simulink がマルチコア プロセッサ上での動的なスケジューリングに適したマルチスレッド コードを生成できるようにします。

slexMulticoreExampleProfile.png

参考

| | |

トピック