プロファイリングおよび最適化

SDSoC™ 環境でアルゴリズム最適化を実行する場合、次の 2 つの最適化を実行します。

  • アプリケーション コードの最適化
  • ハードウェア関数の最適化

CPU をターゲットにしたソフトウェアの最適化については、ほとんどのアプリケーション開発者が既に理解しているはずです。これには通常、アルゴリズムの複雑性、全体的なシステム パフォーマンス、データの局所性などを解析する必要があります。パフォーマンスのボトルネックを見つける方法を示した手法ガイドおよびソフトウェア ツールなどは多数あります。これらと同じ方法を、SDSoC 環境でハードウェア アクセラレーションをターゲットにした関数に適用できます。

まず、全体的なプログラム パフォーマンスを最終的なターゲットとは別に最適化する必要があります。SDSoC と汎用ソフトウェアの主な違いは、SDSoC プロジェクトでは、主要な計算アルゴリズムが FPGA に配置されることです。そのため、アルゴリズムの同時処理、データ転送、メモリ使用量/消費、プログラマブル ロジックがターゲットであるということを把握しておく必要があります。

通常は、アクセラレーションするアルゴリズムのセクションを特定し、データをアクセラレータとの間で送受信している間も、ハードウェア アクセラレータをビジーな状態に保つのに最適な方法を理解しておく必要があります。この主な目的は、CPU ソフトウェアのみを使用する場合と比較して、ハードウェア アクセラレータとデータ モーション ネットワークにかかる全体的な計算時間を削減することにあります。

CPU で実行されるソフトウェアは、ハードウェア関数を効率的に管理し、そのデータ転送を最適化し、処理前後に必要な段階を実行する必要があります。

SDSoC 環境では、これらの最適化をサポートするため、アプリケーションとハードウェア関数を詳細に解析するのに有益なレポートが生成されます。レポートはプロジェクトをビルドする際に自動的に生成され、次の図に示すように SDx™ IDE の [Assistant] ビューにリストされます。レポートは、ダブルクリックすると開きます。

図: [Assistant] ビュー

次の図に、次の 2 つの主なレポートを示します。

  • 高位合成 (HLS)
  • データ モーション ネットワーク

GUI からこれらのレポートを開くには、[Assistant] ビューを表示しておきます。このビューは、通常 [Project Explorer] ビューの下にあります。[Assistant] ビューが表示されていない場合は、[Window] > [Show View] > [Assistant] をクリックします。

図: [HLS Report] ウィンドウ

[HLS Report] ウィンドウには、FPGA に機能をインプリメントするため、C/C++ モデルをハードウェア記述言語に変換する HLS プロセス プログラムの詳細が表示されます。このレポートの詳細から、ハードウェア インプリメンテーションでの影響を確認できるようになり、この情報に基づいてハードウェア関数を最適化できます。

図: データ モーション ネットワーク レポート

データ モーション ネットワーク レポートには、各ハードウェア関数のハードウェア/ソフトウェア接続性が記述されます。[Data Motion Network] の表には、どのタイプのデータ ムーバーが各ハードウェア関数引数の転送に使用され、どのシステム ポートにデータ ムーバーが接続されるかが示されます。[Pragmas] には、ハードウェア関数に使用された SDS ベースのプラグマが表示されます。

[Accelerator Callsites] の表には、次が表示されます。
  • アクセラレータ インスタンス名およびアクセラレータ引数。
  • アクセラレータ引数に関連する IP のポート名 (バンドリングの場合を除いて通常は前と同じ)。
  • データ モーション転送の方向。
  • 転送されるデータのバイト サイズ (コンパイラでサイズを推測できる程度まで)。ランタイムによって転送サイズが決まる場合、これは 0 になります。
  • この引数に関連するのプラグマのリスト。
  • システム ポートおよびデータ ムーバー <system port>:<datamover>。該当する場合は、この引数の転送に使用するプラットフォーム ポートおよびデータ ムーバーを示します。
  • 使用されるアクセラレータ、使用される推論済みコンパイラ、メモリの設定および転送に使用される CPU サイクル。
通常は、データ モーション レポート ページにまず次が表示されます。
  • プラグマで指定される特性。
  • プラグマがない場合は、コンパイラで推論可能なもの。

違いは、コンパイラでは特定のプラグマ プロパティを推論できないことがある点です。特に、ここで最も重要な違いはキャッシュ可能かどうかです。データ モーション レポートにキャッシュ可能と表示されているのに、データが実際にはキャッシュ可能ではない場合 (またはその逆の場合)、キャッシュはランタイム時に正しく動作します。この場合、データがフラッシュを削除するためにキャッシュできないことをコンパイラで識別できるようにプログラムを構築する必要はありません。

各レポートの詳細、プロファイリングおよび最適化手法、コーディング ガイドラインについては、SDSoC プロファイリングおよび最適化ガイド を参照してください。