Simulink によるマルチコア プログラミング
Simulink® における分割、マッピング、プロファイリングのプロセスを使用して、同時実行用のシステムを設計する上での共通の課題に対処できます。
分割により、組み込みマルチコア処理ハードウェアの詳細とは独立して、モデルの領域をタスクとして指定できます。この独立性により、モデルのコンテンツと階層をアプリケーションのニーズに最も適した状態に調整できます。
分割したシステムでは、マッピングによって組み込み処理システム内の処理要素に分割を割り当てることができます。Simulink マッピング ツールを使用して、スレッドの実行、FPGA 上の HDL コード、これらのスレッドまたは FPGA で実行される作業の詳細を表現し、管理します。モデルの作成中は、分割やその間のデータ転送を追跡する必要はありません。この作業はツールが行います。また、複数のアーキテクチャ間でモデルを再利用できます。
プロファイリングは、一般的な計算負荷の状態でアプリケーションの展開のシミュレーションを実行します。これにより、ハードウェアに展開する前に、最適なパフォーマンスを提供するモデルの分割とマッピングを決定できます。
Simulink は使用されているモデル化方法に関係なくホスト コンピューターのパフォーマンスを最適化しようとします。Simulink でのパフォーマンスの向上方法の詳細については、パフォーマンスの最適化を参照してください。
標準ワークフロー
モデルをターゲットに展開するには、次のようにします。
同時実行用にモデルを設定します。
同時実行用のモデルの設定の詳細については、同時実行用のモデルの構成を参照してください。これらの設定により、Simulink は、ルート レベルのブロックのサンプル時間に基づいて、モデル内の各サンプル時間が分割に対応し、シングル レートのすべてのブロックまたはサンプル時間が同じ分割に属するようにモデルを分割します。
モデルの分割方法を指定する場合は、明示的な分割を使用します。明示的な分割を使用する場合、ターゲット アーキテクチャを指定して、モデルを明示的に分割しなければなりません。詳細については、ターゲット アーキテクチャの指定および明示的な分割を使用したモデルの分割を参照してください。
コードを生成してターゲットに展開します。複数のターゲットに展開するよう選択できます。
デスクトップ ターゲットにビルドして展開するには、デスクトップでのビルドを参照してください。
Embedded Coder® を使用して組み込みターゲットに展開するには、Deploy Generated Software (Embedded Coder)を参照してください。
Simulink Real-Time™ を使用し、リアルタイム ターゲットにビルドして展開するには、Standalone Operation (Simulink Real-Time)を参照してください。
HDL Coder™ を使用して FPGA に展開するには、展開 (HDL Coder)を参照してください。
メモ
FPGA への展開は、明示的に分割されたモデルに対してのみサポートされます。
設計を最適化します。このステップはオプションです。メトリクスに基づいて最良のパフォーマンスを得るため、モデルの設計とマッピングの反復が含まれます。モデルを評価する 1 つの方法は、モデルをプロファイリングし、実行時間を取得することです。
製品 情報 デスクトップ ターゲット デスクトップでの明示的に分割されたモデルのプロファイルと評価 Simulink Real-Time Execution Profiling for Real-Time Applications (Simulink Real-Time) Embedded Coder コード実行のプロファイル (Embedded Coder) HDL Coder 速度と面積の最適化 (HDL Coder)
Simulink を使用してマルチコア プログラミングにおける課題を克服する方法
同時実行用アプリケーションを手動でプログラミングすると、手動のコーディングによる一般的な課題以上の課題が伴います。Simulink を使用すると、複数のアーキテクチャにまたがった移植性、アーキテクチャの展開の効率、アプリケーション コンポーネント間の周期的なデータ依存性の課題を克服できます。各課題の詳細については、マルチコア プログラミングにおける課題を参照してください。
移植性
Simulink では、ターゲット システムを考慮することなく、モデル化されたシステムのコンテンツと階層のニーズを決定できます。モデルのコンテンツを作成する際に、ターゲット システム内のコア数を追跡する必要はありません。代わりに、モデルのコンテンツを作成できるように、分割方法を選択します。Simulink は、指定するアーキテクチャのコードを生成します。
サポートされている使用可能なアーキテクチャからアーキテクチャを選択することも、カスタムのアーキテクチャを追加することもできます。アーキテクチャを変更する場合、Simulink は 2 番目のアーキテクチャ用に変更しなければならないコードのみを生成します。新しいアーキテクチャはブロックと関数を再利用します。詳細については、マルチコア プログラミングでサポートされるターゲットとターゲット アーキテクチャの指定を参照してください。
展開の効率性
展開されたアプリケーションのパフォーマンスを向上するために、Simulink では一般的な計算負荷の状態でシミュレーションを実行し、アプリケーションの分割とマッピングにおいて複数の構成を試します。Simulink はそれぞれの構成のパフォーマンスを比較して、展開に最適な構成を提供します。これは、プロファイリングと呼ばれます。プロファイリングにより、システムを目的のハードウェアに展開する前に最適な分割構成を決定できます。
異なる処理ノード間にアプリケーション コンポーネントをマッピングする Simulink でアプリケーション用のマッピングを作成できます。処理ノードにコンポーネントを手動で割り当てることもできます。任意のマッピングについてコンポーネント間のデータ依存性を確認し、それに基づいてマッピングしなおすことができます。また、異なるコンポーネント間のデータ依存性を導入および削除できます。
周期的なデータ依存性
システムの一部のタスクはその他のタスクの出力に依存します。タスク間のデータ依存性により、処理の順序が決まります。1 つのサイクルにデータ依存性がある 2 つ以上の分割が含まれている場合、"代数ループ" とも呼ばれるデータ依存ループが発生します。Simulink では、並列アルゴリズムを使用してループを解く場合コストが高くなるため、潜在的な並列分割で代数ループは発生しません。
代数ループが人為的になる場合もあります。たとえば、Model ブロックベースの分割により、人為的な代数ループが生じる場合があります。モデル分割の使用の削除によってループが削除された場合、Model ブロックを含む代数ループは人為的になります。人為的ループの発生は最小化できます。代数ループに含まれるモデルの [コンフィギュレーション パラメーター] ダイアログ ボックスで、[モデル参照] 、 [代数ループの発生の最小化] を選択します。
周期信号の確定的な遅延を確保すると、代数ループの断絶にも役立ちます。この設定を構成するには、[モデル設定]、[ソルバー]、[追加パラメーター]、[タスクの構成] を開きます。[データ転送] ペインで、[周期信号] の既定のオプションを [Ensure deterministic transfer (maximum delay)]
に設定します。
また、[コンフィギュレーション パラメーター] ダイアログ ボックスでモデルが汎用リアルタイム ターゲット (grt.tlc
) または組み込みリアルタイム ターゲット (ert.tlc
) で構成されている場合は、[1 つの出力/更新関数] チェック ボックスをオフにします。
代数ループが真の代数条件である場合は、1 つの Model 分割にループ内のすべてのブロックを含めるか、ループに遅延要素を導入してループを削除しなければなりません。
次の例は、異なるタイプのパラレル化を Simulink に実装する方法を示しています。これらの例には、1 つの CPU と 1 つの FPGA を使用したシンプルなアーキテクチャに分割されてマッピングされるモデルが含まれています。