主要内容

このペ,ジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

マルチコアタ,ゲットでの最適化と配布

このトピックでは,明示的な分割を使用して同時実行用に構成されたモデルを使用し,ターゲットに配布する方法について説明します。同時実行用にモデルを設定するには,同時実行用のモデルの構成を参照してください。タ,ゲットア,キテクチャを指定するには,タ,ゲットア,キテクチャの指定を参照してください。同時実行用に設定されたモデルで明示的な分割を使用するには,明示的な分割を使用したモデルの分割を参照してください。

コ,ドの生成

同時実行用に構成されたモデルのコ,ドを生成するには,金宝appSimulink®エディタ,の[アプリ]タブで(金宝app仿真软件编码器)を選択します。[cコ,ド]タブで,[ビルド]を選択します。結果として得られるコ,ドは次のとおりです。

  • (同時実行]ダイアログボックスでタスクとトリガーにマッピングされるモデルの一部を表すCコード。Cコ,ドの生成には金宝app仿真软件编码器™ラ@ @センスが必要です。詳細にいては,コ,ド生成(金宝app仿真软件编码器)および金宝appSimulinkモデルからのコ,ド生成(嵌入式编码)を参照してください。

  • (同時実行]ダイアログボックスでハードウェアノードにマッピングされるモデルの一部を表すHDLコード。HDLコドの生成にはHDL Coder™ラセンスが必要です。詳細にいては,金宝appSimulinkからのHDLコ,ド生成(高密度脂蛋白编码器)を参照してください。

  • 同時実行タスクとトリガー間のデータ転送を処理し,ハードウェアコンポーネントとソフトウェアコンポーネントとのインターフェイスをとるコード。

生成されたCコードには,システムで定義されたタスクまたはトリガーごとに1つの関数が含まれます。以下のように,タスクとトリガ,によって関数の名前が決まります。

空白< TriggerName > _TaskName(无效);

このような各関数の内容は,次の場合を除き,タ,ゲットに依存しないcコ,ドで構成されます。

  • タ,ゲット固有の機能を実装するブロックに対応するコ,ド

  • カスタムストレジクラスから派生したものを含むカスタマズ(Structストレ,ジクラスを使用してパラメ,タ,デ,タを構造体に整理する(嵌入式编码)参照)またはコド置換ラブラリ(金宝app仿真软件编码器)

  • タスク間でのデ,タの転送方法を処理するために生成されるコ,ド。特に,金宝app仿真软件编码器は相互排除プリミティブとデータ同期セマフォのターゲット固有の実装を使用して,以下の疑似コード表で説明しているようにデータ転送を実装します。

デ,タ転送 初期化 リダ ラ苹果公司タ

デ,タの整合性のみ

BufferIndex = 0;使用IC初始化缓冲区[1]
开始互斥Tmp = 1 - BufferIndex结束互斥读缓冲区[Tmp];
写入缓冲区[BufferIndex];开始互斥BufferIndex = 1 - BufferIndex;结束互斥

確定性を確保(最大遅延)

WriterIndex = 0;ReaderIndex = 1;使用IC初始化缓冲区[1]
读取缓冲区[ReaderIndex];- ReaderIndex = 1;
写入缓冲区[WriterIndex] WriterIndex = 1 - WriterIndex;

確定性を確保(最小遅延)

N/A

dataReady等;读取数据;帖子readDone;
等待readDone;写数据;dataReady后;

デ,タの整合性のみ

C-hdlンタ,フェ,ス

金宝app仿真软件编码器製品とHDL编码器製品はどちらもターゲット固有の通信実装およびデバイスを使用して,ハードウェアコンポーネントとソフトウェアコンポーネント間のデータ転送を処理します。

生成されたHDLコードにはハードウェアノードごとに1つのHDLプロジェクトが含まれます。

デスクトップでのビルド

金宝app仿真软件编码器および嵌入式编码器®タ,ゲットは,Windows®, Linux®およびMac OSオペレ,ティングシステム用のコ,ドを生成するサンプルのタ,ゲットを提供します。これは“ネ电子邮箱ティブスレッドの例”と呼ばれ,デスクトップタ,ゲットへのモデルの配布に使用されています。デスクトップが最終ターゲットではない場合でも,別のターゲットに配布する前にモデルのプロファイルを作成して最適化するのに役立てることができます。

嵌入式编码器ターゲットを指定した場合は,[コンフィギュレーションパラメーター]ダイアログボックスで次の変更を行います。

  1. [コ,ド生成][テンプレ,ト][メ电子邮箱ンプログラム例の生成]チェックボックスをオンにします。

  2. [コ,ド生成][テンプレ,ト][タ,ゲットオペレ,ティングシステム]リストの(NativeThreadsExample)を選択します。

  3. (好的)をクリックして変更を保存し,[コンフィギュレーションパラメーター]ダイアログボックスを閉じます。

  4. モデル内のすべての参照モデルにこれらの設定を適用します。

モデルを設定したら,Ctrl-Bを押してモデルをデスクトップにビルドし,配布します。ネ电子邮箱ティブスレッドの例では,ネaapl . exeティブスレッドの例で使用されるスレッドAPIに示すように,金宝app仿真软件编码器および嵌入式编码器でターゲット固有のスレッドAPIとデータ管理プリミティブを使用する方法について説明します。同時に実行しているタスク間のデ,タ転送は,デ,タ転送オプションに示すように動作します。コ,ド生成製品は,ネ@ @ティブスレッドの例で使用されるデ@ @タ保護と同期APIに示すように,この動作がサポ,トされているタ,ゲットでAPIを使用します。

ネaapl . exeティブスレッドの例で使用されるスレッドAPI

同時実行の側面 Linux実装 Windows実装 Mac OS実装

周期的なトリガベント

Posixタaapl . exeマ

Windowsタiphonesマ

該当なし

非周期的なトリガベント

Posixリアルタerexム信号

Windows Windowsベント

Posix非リアルタerexム信号

非周期的トリガ

非周期的タスクにマッピングされているブロックの場合:信号待スレッド

非周期的トリガ,にマッピングされているブロックの場合:信号アクション

▪▪ベント待▪スレッド

非周期的タスクにマッピングされているブロックの場合:信号待スレッド

非周期的トリガ,にマッピングされているブロックの場合:信号アクション

スレッド

POSIX®

窗户

POSIX

スレッド優先順位

サンプル時間に基づいて割り当て:最速タスクに最高の優先順位

優先順位クラスは親プロセスから継承。

サンプル時間に基づいて割り当て:最初の3つの最速タスクについては,最速タスクに最高の優先順位を割り当て。残りのタスクは最低の優先順位を共有。

サンプル時間に基づいて割り当て:最速タスクに最高の優先順位

オ,バ,ラン検出の例

あり

あり

なし

ネ@ @ティブスレッドの例で使用されるデ@ @タ保護と同期API

API Linux実装 Windows実装 Mac OS実装
デ,タ保護API
  • pthread_mutex_destroy

  • pthread_mutex_lock

  • pthread_mutex_unlock

  • CreateMutex

  • CloseHandle

  • WaitForSingleObject

  • ReleaseMutex

  • pthread_mutex_destroy

  • pthread_mutex_lock

  • pthread_mutex_unlock

同期API
  • sem_init

  • sem_destroy

  • sem_wait

  • sem_post

  • CreateSemaphore

  • CloseHandle

  • WaitForSingleObject

  • ReleaseSemaphore

  • sem_open

  • sem_unlink

  • sem_wait

  • sem_post

デスクトップでの明示的に分割されたモデルのプロファ@ @ルと評価

[同時実行]ダ电子邮件アログボックスの[プロファeconp econpルレポト]ペ▪▪ンを使用して,マルチコアタ▪▪ゲット上でコ▪ドの実行をプロファ▪▪リングします。金宝app仿真软件编码器(GRT)および嵌入式编码器(ERT)ターゲットを使用してプロファイリングを実行できます。プロファesc escリングを行うと,実行のボトルネックとなっている領域をモデル内で特定しやすくなります。各タスクの実行時間を分析して,実行時間の大半を占めているタスクを見けることが可能です。たとえば,タスクの平均実行時間を比較できます。計算量の多いタスクやリアルタイム要件とオーバーランを満たしていないタスクがある場合は,計算量が少なく同時実行が可能なタスクにそのタスクを分割することができます。

プロファ。

  1. モデルを作成します。

  2. モデルのコ,ドを生成します。

  3. デタを収集する目的で,生成されたコドにルを追加します。

  4. 生成されたコ,ドをタ,ゲット上で実行してデ,タを収集します。

  5. デタを照合し,現在のフォルダにHTMLファル(model_name_ProfileReport.html)を生成して,[同時実行]ダ选区アログボックスの[プロファeconp econpルレポト]ペ▪▪ンにHTMLファ▪▪ルを表示します。

    メモ

    モデルのHTMLプロファルレポトが存在する場合,そのファルが[プロファeconp econpルレポト]ペ@ @ンに表示されます。新しいプロファルレポトを生成するには,をクリックします。

セクション 説明

概要

合計実行時間やプロファイルレポートの作成時間など,モデルの実行に関連する統計情報をまとめて表示します。ホストマシン上のコア合計数も表示します。

任务执行时间

タスク別に色分けされた円グラフに,各タスクの実行時間(マaapl .クロ秒単位)を表示します。

Windows, LinuxおよびMac OSプラットフォ,ムで表示されます。

到处理器核心的任务亲和

プラットフォ,ムに依存します。タイムステップおよびタスクごとに,仿金宝app真软件はそのタイムステップでタスクの実行が開始されたプロセッサコア番号をプロセッサ別に色分けして表示します。

特定のタムステップにスケジュリングされたタスクが存在しない場合,NRが表示されます。

WindowsおよびLinuxプラットフォ,ムで表示されます。

プロファルレポトを解析したら,模型ブロックのマッピングを変更することにより,マルチコアシステムで利用可能な同時実行性を効率的に利用することを検討してください(タスク,トリガ,ノ,ドへのブロックのマッピングを参照)。

プロファ▪▪ルレポ▪▪トの生成

このトピックでは,同時実行に対してプロファイルできるようモデルを構成済みであることが前提になります。詳細にいては,同時実行用のモデルの構成を参照してください。

  1. [同時実行]ダ电子邮件アログボックスで[プロファeconp econpルレポト]ノ,ドをクリックします。

    プロファ,model_name_ProfileReport.htmlという名前のファ@ @ルを検索します。該当するファ电子邮箱ルが現在のモデルに存在しない場合,[プロファeconp econpルレポト]ペ@ @ンに以下のように表示されます。

    メモ

    モデルのHTMLプロファルレポトが存在する場合,そのファルが[プロファeconp econpルレポト]ペ@ @ンに表示されます。新しいプロファルレポトを生成するには,をクリックします。

  2. モデルの実行デタをプロファラで収集する場合のタムステップの数を入力します。

  3. [タスク実行のプロファeconp econpルレポトを生成します]ボタンをクリックします。

    この操作により,モデルの作成,コードの生成,コードへのデータ収集ツールの追加,ターゲットでのコードの実行といった処理が行われて,HTMLプロファイルレポートも生成されます。この処理には,数分かかることがあります。この処理が完了したら,プロファ[プロファeconp econpルレポト]ペ@ @ンに表示されます。以下に例を示します。

    プロファイリングレポートには,概要,各タスクの実行時間,プロセッサコアへの各タスクのマッピングが表示されます。タスク1とタスク2がコア0で実行され,タスク3とタスク4がコア1で実行されることがわかります。レポ,トの[任务执行时间]セクションは,タスク1とタスク3の実行にかかる時間が最長であることを示しています。タスク3の周期はタスク1とタスク2の周期の2倍であり,タスク4の周期はタスク3の周期の2倍であることに注意してください。

  4. プロファ▪▪ルレポ▪▪トを解析します。必要に応じてモデルまたはタスクのマッピングを作成および変更し,プロファイルレポートを再生成します。

コマンドラ▪▪ンでのプロファ▪▪ルレポ▪▪トの生成-別の方法として,同時実行に対して構成されたモデルのプロファイルレポートをコマンドラインで生成できます。関数金宝appSimulink.architecture.profileを使用します。

たとえば,モデルslexMulticoreSolverExampleのプロファ。

金宝appSimulink.architecture.profile(“slexMulticoreSolverExample”);

特定のサンプル数(100)でモデルslexMulticoreSolverExampleのプロファ。

金宝appSimulink.architecture.profile (slexMulticoreSolverExample, 120);

この関数は,slexMulticoreSolverExample_ProfileReport.htmlという名前のプロファルレポトを現在のフォルダに作成します。

生成されたcコドのカスタマズ

生成されたコ,ドは,さまざまなアプリケ,ションおよび開発環境で利用できます。ニ,ズを満たすために,タ,ゲット開発(嵌入式编码)の説明に従って生成されたcコドをカスタマズします。これらのカスタマイズ機能に加え,マルチコアターゲットと異種混合ターゲットの場合は,生成されたコードを次のようにさらにカスタマイズできます。

  • コド置換ラブラリを使用して,相互排除とデタ同期プリミティブの選択した実装を登録できます。

  • (同時実行]ダイアログボックスでタスクとトリガーに対してターゲット固有のプロパティを指定できるカスタムターゲットアーキテクチャファイルを定義できます。詳細にいては,カスタムアキテクチャファルの定義を参照してください。

関連する例

詳細