バックナンバーはこちら

today&tomorrow

Technology Update

2018 vol.111

バーチャル・プロトタイピングのスピードに満足していますか?

バーチャル・プロトタイプ高速化のために理解しておくべきポイント

シノプシス プロダクト・マーケティング・マネージャー Malte Doerper

私が高校生だった頃、クラスはアイルトン・セナとミハエル・シューマッハのファンに二分されていました。そしてどちらのファンも、レースでより重要なのはドライバーかマシンかと熱く議論したものです。今となってはこの問題に決着がついたのかどうかも覚えていませんが、四半世紀を経た今、これと似たような問題を考えてみたいと思います。バーチャルプロトタイプを高速化するには何が重要でしょうか。

画像

最初に断っておきますが、シミュレーションで高速だからといってバーチャル・プロトタイピングのレースに勝てるわけではありません。バーチャル・プロトタイプを手際よく作成すること、そして幅広いユース・ケースをサポートすることを検討する方が重要です。また、バーチャル・プロトタイプのスピードは、想定するユース・ケースにも左右されます。

  • インタラクティブ・ユース・ケース:コーディング、コンパイル、デバッグ・サイクルを遅延なく何百回も反復することが求められます。
  • リグレッション・ユース・ケース:テストの数、利用可能なマシンの数およびサーバ時間の制約を受けます。

また、シミュレーションに必要な馬力は当然シミュレーション対象システムの複雑さによって異なります。以上を踏まえ、バーチャル・プロトタイプを高速化する主要なキー・テクノロジをご紹介します。

  • シングルスレッド・シミュレーション性能を最適化
  • SystemCカーネルに並列シミュレーションの概念を適用
  • チェックポイント機能を利用してシミュレーションの繰り返しを防ぐ
  • ハードウェア・アクセラレーション機能を使用

シングルスレッド・シミュレーション性能を最適化

SystemCは基本的にシングルスレッド・アプリーションで、CPUサイクルはカーネルまたはSystemCモデルのどちらかで消費されます。TLM 2.0規格では、カーネル・オーバーヘッドを最小限に抑える方法としてテンポラル・デカップリング、クォンタム、ダイレクト・メモリー・アクセス(DMI)などの概念が説明されています。これは命令セット・シミュレータ(ISS)およびユーザーのSystemCモジュールに非常に大きな影響を与えます。最適なSystemCコードを作成するには、優れたメソドロジに従って注意深くコーディングする必要があります。コードを見るだけでボトルネックを発見するのは困難なため、シングルスレッド・シミュレーション性能を改善するにはSystemC対応プロファイラが欠かせません。このようなプロファイラには、リアルタイム性能やカーネル活性化回数などのパラメータを監視して特定のSystemCモジュールまたはSystemC時間まで掘り下げてチェックできる機能があります。経験豊富なバーチャル・プロトタイピング・チームでも、プロファイラを使ってボトルネックを特定、解消するだけで2~5倍のプラットフォーム性能を達成した例があります。適切なプロファイラを使用すると、それほど大きな手間をかけなくてもこうしたボトルネックを特定して大幅な高速化が期待できます。

画像

シノプシスVirtualizerのプロファイラSimSightを使用すると、約2~5倍の高速化が可能

SystemCカーネルに並列シミュレーションの概念を適用

並列シミュレーション技術とは、シミュレーションを複数のホストCPUで分散実行して高速化を図るというのが基本的な考え方です。これには、以下の2つのアプローチがあります。

  • MultiSim:バーチャル・プロトタイプを複数のサブシステムに分割します。分割は、通常オフチップ・インターフェイスの自然な境界部分で行います。各チップで別々にシミュレーションを実行し、個々のシミュレーション・カーネルを環境全体で動的に同期します。分割の方法およびアプリケーションの性質にもよりますが、この技術によって線形な高速化が可能です。
  • マルチコア:1つのバーチャル・プロトタイプの中で特に演算負荷の高い部分を別々のホストCPUコアに自動的に割り当てます。この手法は主に、バーチャル・プロトタイプの中で最も演算負荷の高いISSに対して使用します。この場合、ISSを有効にする必要があります。この方法は、ISS上で動作する組込みソフトウェアの並列性が高いほど大きな効果があります。

画像

  • 左:ホストの各コアで別々のバーチャル・プロトタイプを実行し、
    バーチャル・プロトタイプ間の同期と通信をMultiSimで管理。
  • 右:1つのバーチャル・プロトタイプをホストの異なるコアに分散して実行。

チェックポイント機能を利用してシミュレーションの繰り返しを防ぐ

バーチャル・プロトタイプのシミュレーション・ステートを保存、読み込みできるチェックポイント機能を利用すると、同じシミュレーションの繰り返しを避けることができます。特に故障注入のユース・ケースでは、最初の故障注入点に到達するまでに非常に長いシミュレーション時間を要するため、このアプローチが非常に効果的です。チェックポイント機能を利用できるのは、前回のシミュレーション後にバーチャル・プロトタイプもソフトウェアも変更されていない場合に限られますが、この機能を利用すれば数千もの異なるエラー・パターンを注入してソフトウェア開発を進めることも可能です。

ハードウェア・アクセラレーション機能を使用

開発の前倒しを成功させる上でプロトタイピング・チームがしばしば直面するトレードオフ、それはSystemCモデルをまったく新規に作成するのか、既存のレガシーRTLコードを再利用するのかという問題です。高速モデルの作成には多くの工数が必要です。一方、協調シミュレーションでRTLを再利用するとシミュレーション速度の面で大きなペナルティがあります。このような状況では、FPGAまたはエミュレータ上で既存RTLを実行し、トランザクション境界でバーチャル・プロトタイプと同期させるハイブリッド・ハードウェア・アクセラレーション技術が非常に大きな効果を発揮します。

結局、バーチャル・プロトタイプを高速化する方法はユース・ケースによります。ここでご紹介したようなキー・テクノロジを網羅したツールを正しく選ぶことにより、必要に応じてアクセルを踏み込むことが可能となります。

カテゴリートップ