Intel® FPGA SDK for OpenCL™: ベスト・プラクティス・ガイド

ID 683521
日付 12/08/2017
Public
ドキュメント目次

4.3.1. ストール、占有、帯域幅

カーネルコードの特定の行については、Intel FPGA Dynamic Profiler for OpenCL GUIでのSource Codeでタブは、ストール率、占有率、平均メモリー帯域幅が表示されます。

失速、占有、帯域幅の定義については、 表 9 を参照してください。

インテル® FPGA SDK for OpenCL™ は、Work-Itemがパイプライン・ステージを順に(パイプライン - パラレルに)横断するパイプライン・アーキテクチャを生成します。パイプライン・ステージが空になるとすぐに、Work-Itemがステージに入り、ステージを占有します。パイプラインの並列性は、パイプライン化されたループの反復にも適用されます。

図 69. パフォーマンス・カウンターで計測されたカーネル・パイプラインの簡略化された表現

以下は、Profilerがストール、占有、および帯域幅を計算することを説明する簡略化された式です。

注: 帯域幅式のivalid_countには、ロードストアユニットへのpredicate=true入力も含まれます。

理想的なカーネル・パイプライン条件:

  • 失速率は0%に等しい
  • 占有率は100%
  • 帯域幅はボードの帯域幅に等しい

カーネル・パイプラインの特定の場所では、ストール率と占有率の合計が100%にほぼ等しい場合、プロファイラはその場所をストールソースとして識別します。ストール率が低い場合、プロファイラはその場所をストールの犠牲者として識別します。

Profilerは、オフライン・コンパイラーがカーネルから効率的なパイプラインを生成した場合(作業項目または反復がパイプライン・ステージを通過して停止することなく)、高い占有率を報告します。

すべてのLSUが同じ回数アクセスされた場合、同じ占有値を持ちます。

  • Work-Itemが連続してパイプラインに入ることができない場合、パイプラインにバブルを挿入します。
  • ループパイプライニングでは、反復間に存在する泡のために、ループに依存する依存関係もパイプラインに泡を形成します。
  • LSUが他のLSUよりも頻繁にアクセスされない場合(LSUが他のLSUを含むループの外にある場合など)、このLSUの占有値は他のLSUよりも低くなります。

占有率に関する同じルールがチャネルに適用されます。