1

Parallel Nsight 2.2を使用して、CUDA4.2で記述されたコードのプロファイルを作成しました。結果は次のとおりです。分岐効率=0.9制御フロー実行効率=0.26

ユーザーガイドから、

Branch Efficiency=({Branches} - {Diverged Branches}) / {Branches}
Control Flow Efficiency={Thread Instructions Executed} / {Instructions Executed} / {Warps Size}

私は混乱しています:より高い分岐効率は、ワープ内で同じ命令を実行するより多くのアクティブなスレッドがあり、したがってより高い制御フロー効率があることを意味しませんか?そして、高い分岐効率と低い制御フロー効率は何を示していますか?コメントありがとうございます。

4

1 に答える 1

3

ブランチ効率は、分岐したブランチの数の尺度です。100%は、分岐がないことを意味します。分岐が分岐すると、縦糸のアクティブマスクは32未満に減少するため、実行はそれほど効率的ではありません。さらに、分岐が分岐した方法の数に基づいて、分岐を複数回実行する必要がある場合があります。

実行されたスレッド命令は、スレッドから予測されたカウントを行います。コンパイラーは、述語フラグを使用して、制御フローの相違を回避できます。実行されたコードの小さな条件付きブロックを持つコードの場合、このカウンターの100%を確認できます。

制御フロー効率は、各命令でアクティブだったワープ内のスレッド数の尺度です。32スレッドの倍数以外を起動しない限り、これは32スレッドまたは100%になります。コードが分岐した場合、この数値は100%未満になります。

例1:ブロックごとに32スレッドを起動し、分岐ブランチはありません。

分岐効率=100%制御フロー効率= 100%

例2:ブロックごとに1つのスレッドを起動し、分岐するブランチはありません。

分岐効率=100%制御フロー効率= 3%(1/32)

例3:ブロックごとに32スレッドを起動し、最初の命令で2つの方法で分岐し(偶数スレッドは一方向に進み、奇数スレッドは別の方向に進みます)、終了するまで分岐ブロックを実行します。これが唯一のブランチであると想定します。

分岐効率=0%(出口が分岐としてカウントされるため、一部のデバイスでは高くなる可能性があります)制御フロー効率= 50%(ほとんどの場合16スレッド/ワープのみを実行)

于 2012-09-22T01:00:30.717 に答える