スケーラブルなコンパイルに向けたモデルの準備
この例では、スケーラブルなコンパイルに向けてモデルを準備するために、モデルを解析して再構成する方法を説明します。
モデルの確認と再構成
伝送線路のモデル例を開きます。
openExample('simscape/TransmissionLineExample')
この例では、同一の T 型セグメントを 50 個連結することにより、伝送線路をモデル化しています。カスタムの Simscape™ ブロックである T-Section Transmission Line が、単一の T 型セグメントを表します。それぞれの T 型セグメントの長さは 0.1 m であるため、伝送線路は長さ 5 m の同軸ケーブルを表します。モデルには、S1 ~ S5 の名前をもつ同一のサブシステムが 5 個あり、各サブシステムは T-1 ~ T-10 の名前をもつ 10 個の T 型セグメントで構成されています。
予備解析で、モデルに関して以下のことが判明しています。
Simscape ブロックの繰り返しパターンがある
Simulink® ブロックが非常に少ない。つまり、モデルの Simscape の部分がコンパイル時間のほとんどを占める
可変ステップ ソルバーを使用する
この解析に基き、モデルはスケーラブルなコンパイルの適切な対象であることが判明しました。さらに、モデルは既に繰り返しサブシステムのパターンで構成されており、この時点では追加の再構成が不要です。アドバイザリ ツールでは、既に繰り返しサブシステムの代わりに再利用可能なコンポーネントが含まれているものとして、モデルを解析できます。
アドバイザリ ツールを使用したモデルの解析
次の手順では、アドバイザリ ツールを使用してモデルを解析します。次の構文を使用して、関数 sscScalableAdvisor
を呼び出すことができます。
sscScalableAdvisor(modelname,subsyspaths)
ここで、
modelname
は解析するモデルの名前です。文字ベクトル、string、またはモデルのハンドルとして指定します。この引数は必須です。subsyspaths
は、モデル内の繰り返しサブシステムを特定するオプション引数です。この引数は、サブシステム名 (モデルのルートから各サブシステムへのパスを含む) の cell 配列として指定します。これにより、同一の内容をもつサブシステム間でコンパイル アーティファクトが再利用されます。再利用可能なコンポーネントがモデルに含まれる場合、このツールはそれらを自動的に認識します。再利用可能なコンポーネントには、再利用可能と指定された個々の Simscape ブロックまたはテキスト コンポーネント、参照サブシステム、リンク付きサブシステムがあります。他のタイプのサブシステムがモデルに含まれる場合は、アドバイザリ ツールによってそれらが繰り返しコンポーネントとみなされるように、引数
subsyspaths
を使用してそれらの名前を指定する必要があります。
この例では、2 番目の入力引数として cell 配列内に 5 個すべてのサブシステムの名前、S1 ~ S5 を指定します。
r = sscScalableAdvisor('TransmissionLine', ... {'TransmissionLine/S1', 'TransmissionLine/S2', 'TransmissionLine/S3', ... 'TransmissionLine/S4', 'TransmissionLine/S5',})
r = ScalableReport for model 'TransmissionLine' TotalModelCompilationTime: 7.2313 SimscapeCompilationTime: 6.7703 PeakMemory: '27 MB' ScalableSimscapeCompilationTime: 3.5232 ScalablePeakMemory: '19 MB' Subsystems: [1×4 table] Components: [0×4 table]
アドバイザリ ツールによりコンパイル統計が返されます。サポートされていないパターン、ワークフロー、または最適化がモデルに含まれている場合には、アドバイザリ ツールはスケーラブルなコンパイルを有効にしないことを推奨し、適用される制限を一覧表示します。ただし、この例では制限は適用されず、コンパイル時間は大幅に短縮されます。モデルの Simscape の部分のコンパイル時間は 6.7703 秒から 3.5232 秒になり、総コンパイル時間は約 45% 短縮されます (7.2313 - 6.7703 + 3.5232 = 3.9842 秒)。
メモ
モデルのコンパイル時間は、使用するプロセッサ、同時に実行している他のプロセス、メモリのキャッシュなど、複数の要因に依存します。正確な数値は、アドバイザリ ツールを連続実行するたびに多少変化することがありますが、コンパイル プロセスの異なる部分の比は同じままです。このデータは、スケーラブルなコンパイルによる改善の度合いの可能性を推定するために使用してください。
アドバイザリ ツールでは、モデルのコンパイル時間を短縮できる時間が 5 秒を超える場合に、ワークフローを簡略化するためにスケーラブルなコンパイルを有効にするように推奨し、[コンフィギュレーション パラメーター] ダイアログ ボックスを開いて [コンパイル中にコンポーネントを再利用] を強調表示します。ただし、この 5 秒という数字は任意に決められたものです。アドバイザリ ツールを使用してスケーラブルなコンパイルによる改善の度合いの可能性を推定した結果、満足なものであると判断した場合は、この例の残りの手順を進め、スケーラブルなコンパイルの有効化の説明に従ってスケーラブルなコンパイルを有効にしてください。
サブシステムの再利用に関するデータも表示できます。
r.Subsystems
ans = 1×4 table Total Instances Compiled Instances Reuse Details _______________ __________________ ______ ___________ TransmissionLine/S1 5 1 "100%" {1×5 table}
このモデルの 5 個のサブシステムはすべて同一であるため、再利用は 100% です (5 個のインスタンスが 1 個のコンパイル済みインスタンスに置き換えられる)。他のモデルでは、再利用の統計は異なる場合があります。たとえば、サブシステムに異なる構成またはパラメーター化がある場合、アドバイザリ ツールは適宜必要なコンパイル済みインスタンスの数をレポートに示し、再利用の統計を計算します。その場合、Details
table に詳細情報が示されます。
メモ
アドバイザリ ツールのレポートの Components
フィールドに、再利用可能と指定された個々の Simscape ブロックまたはテキスト コンポーネントの再利用データが示されます。このモデルには再利用可能な Simscape ブロックまたはテキスト コンポーネントがないため、Components
の table は空になります。
再利用可能なコンポーネントの作成
前の手順でアドバイザリ ツールが提供したコンパイル結果が満足できるものであったため、モデルを再構成する他の方法を検討する必要はありません。ここで実際に、アドバイザリ ツールの解析で示された繰り返しサブシステムを再利用可能なコンポーネント (この例では参照サブシステム) に置き換えて、スケーラブルなコンパイルに向けてモデルを準備する必要があります。
サブシステム S1 を右クリックします。
コンテキスト メニューから、[サブシステムとモデル参照] 、 [変換先] 、 [参照サブシステム] を選択します。
[サブシステム ファイル名] を
S1
のままにします。サブシステムを別のフォルダーに保存する場合は、[参照] ボタンを使用します。[変換] をクリックします。その結果、指定したフォルダーに別のブロック線図ファイル
S1.slx
としてサブシステム S1 の内容が保存され、モデル内のサブシステム S1 が参照サブシステムに置き換えられます。サブシステム S2、S3、S4 および S5 を削除します。
サブシステム S1 を右クリックして、サブシステム S2 のあった位置にドラッグします。
サブシステム S3、S4 および S5 について繰り返します。
モデルにはまだ、S1、S2、S3、S4、および S5 という名前のサブシステムがありますが、それらはすべて、別のブロック線図ファイルとして保存された同じサブシステム
S1
を参照するようになったことに注目してください。
スケーラブルなコンパイルの有効化
スケーラブルなコンパイルを有効にするには、次を行います。
[コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。
[Simscape] ペインで、[コンパイル中にコンポーネントを再利用] チェック ボックスをオンにします。
同等のコマンド ライン インターフェイスを使用して、モデル コンフィギュレーション パラメーターを設定することもできます。
set_param(bdroot,'SimscapeCompileComponentReuse','on')