再利用可能なコンポーネントに最適な複雑度の特定
繰り返しコンポーネントの複雑度は、スケーラブルなコンパイルの結果に大きく影響します。モデルを繰り返しコンポーネントで再構成するさまざまな方法を試して、最適なコンフィギュレーションを特定できます。
例として、次のバッテリー パック モデルについて考えます。
モデル全体で 1 つのコントローラーと 1 つのプラントがあります。前の図に示したプラント モデルは、16 個の同じバッテリー モジュールで構成された単一のバッテリー パックです。一方、これらのバッテリー モジュールはそれぞれ、次の図に示すように、2 つの相互接続されたサブシステム (1 つのバッテリー セルと 1 つの監視ユニット) で構成されています。
再利用可能なコンポーネントの複雑度はスケーラブルなコンパイルのパフォーマンスに大きく影響するため、パフォーマンスを向上させるには、再利用可能なコンポーネントの異なるセットでモデルを再構成する必要がある場合があります。パフォーマンスにマイナスの影響を及ぼす重要な要因の 1 つは、再利用可能なコンポーネントのインターフェイス変数 (外部接続) の数です。このため、個々のバッテリー サブシステムと監視ユニット サブシステムではなく、2 つの対向するサブシステムからなるモジュールを再利用可能なコンポーネントの単位にすると、スケーラブルなコンパイルの効率が高くなる可能性があります。
アドバイザリ ツールを使用してさまざまな再構成オプションを解析し、最適なコンフィギュレーションを特定します。
モデルに対して
sscScalableAdvisor
を実行し、2 番目の入力引数として cell 配列内に 32 個のサブシステム (16 個のバッテリー セルと 16 個の監視ユニット) のそれぞれの名前を指定します。コンパイル統計とコンポーネントの再利用性の結果を確認します。別のコンフィギュレーションを試します。[選択からサブシステムを作成] オプションを使用して、各バッテリー モジュールが 1 つのサブシステムで表されるように、対向するサブシステムの各ペアからバーチャル サブシステムを作成します。
再構成されたモデルは次のようになります。
再び
sscScalableAdvisor
を実行します。ここでは、2 番目の引数として、16 個のモジュール サブシステム名を含む cell 配列を指定します。各モジュール サブシステムは、個々のバッテリーと監視ユニットによる構成より複雑になり、外部接続数が少なくなります。これにより、スケーラブルなコンパイルのパフォーマンスが大幅に向上する可能性があります。繰り返しサブシステムの数が 16 ではなく 8 になるようにモデルを再構成することにより、コンパイルのパフォーマンスをさらに向上できる可能性があります。パフォーマンスの結果を解析し、コンパイルのパフォーマンスと、モデルの階層構造の維持の両方の観点から判断します。モデルを 8 個の再利用可能なコンポーネントで再構成するとコンパイルが多少速くなっても、1 つのバッテリー モジュールが 1 つのサブシステムに対応する構造を維持する方が好ましい場合もあります。
最適なモデル コンフィギュレーションを特定したら、スケーラブルなコンパイルに向けたモデルの準備の最後 2 つの手順の説明に従って、繰り返しサブシステムを再利用可能なコンポーネントに置き換え、スケーラブルなコンパイルを有効にします。
特定のサブシステムでのスケーラブルなコンパイルの選択的な無効化
スケーラブルなコンパイルは階層的です。モデルに対してスケーラブルなコンパイルを有効にすると、コンパイラはモデルの階層構造内にあるすべての参照サブシステムとリンク付きサブシステムについて、コンパイル アーティファクトを再利用しようとします。しかし、参照サブシステムまたはリンク付きサブシステムの階層構造が深いモデルでは、この既定の動作が最適でないことがあります。
たとえば、前述したバッテリー モデルにおいて、個々のバッテリー セルと監視ユニットはバーチャル サブシステムです。代わりに、これらのコンポーネントを参照サブシステムまたはリンク付きサブシステムで表すことを考えます。この場合、モデルを 16 個のモジュールで再構成してもスケーラブルなコンパイルの結果は改善しません。これは、コンパイラが 16 個の各モジュールを 2 つの再利用可能なコンポーネントとして扱うためです。外部接続数が少なくなり複雑度が増すという、各再利用可能なコンポーネントのメリットを得るには、モデルを 16 個のモジュールで再構成することに加えて、各モジュール内の下層にあるサブシステムに対するスケーラブルなコンパイルを無効にする必要があります。
同様に、階層構造の深いリンク付きサブシステム (リンク付きライブラリなど) がモデルに含まれる場合は、ライブラリ サブシステム内でのスケーラブルなコンパイルを無効にします。たとえば、同一タンクを複数もつ冷蔵庫のモデルがあり、各タンクが送水管のリンク付きライブラリを使用している場合、これらのリンク付きライブラリに対してスケーラブルなコンパイルを無効にすることができます。これにより、コンパイラは、送水管ライブラリ内のコンパイル アーティファクトを再利用せず、タンク全体を 1 つの再利用可能なコンポーネントとして扱います。
モデル内の特定の参照サブシステムまたはリンク付きサブシステムに対して、スケーラブルなコンパイルを無効にするには、次を入力します。
simscape.reuse.setConfig(blockPath,'off')
ここで、blockPath
は、モデルのルートから Subsystem Reference ブロックのインスタンス、またはライブラリのリンクをもつ Subsystem ブロックのインスタンスまでのパスです。この設定は、モデル内のこのサブシステムのすべてのインスタンスに影響します。
たとえば、次を入力します。
simscape.reuse.setConfig('Refrigerator/Tank1/WaterPipeLibrary','off')
これは、Refrigerator
モデル内のすべてのタンクに含まれる WaterPipeLibrary
のすべてのインスタンスに対して、スケーラブルなコンパイルを無効にします。
既定の設定を復元するには、次を入力します。
simscape.reuse.setConfig(blockPath,'on')
サブシステムの設定をクエリするには、次を入力します。
setting = simscape.reuse.getConfig(blockPath)
モデル全体についてスケーラブルなコンパイルが有効である場合にのみ、このサブシステム パラメーター設定は有効です。この場合、コンパイラは auto
設定をもつサブシステムのコンパイル アーティファクトを再利用しようとします。しかし、off
設定をもつサブシステムは再利用可能とみなしません。