CUDAプロファイラーのsm_ctaカウンターを理解するのに苦労しています。128ブロックを起動していますが、起動にバインドされた構成はあります__launch_bounds(192,8)
が、プロファイラーは特定の実行に対して133を表示しています。私はアプリを数回プロファイリングしましたが、毎回約133です。このカウンターは何を示していますか?Tesla C2075、Linux32ビットを使用。
2 に答える
NVIDIA GPUには、チップの複数の場所にパフォーマンスモニターユニットがあります。Fermiデバイスでは、sm_cta_launched信号は、SMモニターではなくGPCモニターによって収集されます。Fermi GPCパフォーマンスモニターは、GPCごとに1つのSMを監視するように制限されています。C2075には4つのGPCと14のSMがあります。C2075は、4つのSMを備えた2つのGPCと3つのSMを備えた2つのGPCの構成を持つことができます。CUDAプロファイラーは、GPCごとに1 SMのカウンターを収集し、その結果にGPC内のSMの数を掛けます。最終的な値は、期待値よりも高くても低くてもかまいません。例えば:
GPC SMs Counter Value
0 4 8 32
1 4 8 32
2 3 11 33
3 3 12 36
---------------------------
133
ドキュメントComputeCommandLine Profilerでは、この情報はcountermodeaggregateオプションで指定されています。
カウンターモード集計
このオプションを選択すると、集計カウンター値が出力されます。SMカウンターの場合、カウンター値はすべてのSMからのカウンター値の合計です。l1 *、tex *、sm_cta_launched、uncached_global_load_transaction、およびglobal_store_transactionカウンターの場合、カウンター値は各GPCから1 SMについて収集され、すべてのSMに対して外挿されます。このオプションは、コンピューティング機能2.0以降を備えたCUDAデバイスでのみサポートされます。
次の式を使用してSMごとに収集されるwarps_launchedを使用すると、より正確な値を取得できます。
thread_blocks_launched = warps_launched
/ ((threadblocksizeX * threadblocksizeY * threadblocksizeZ) + WARP_SIZE - 1)
/ WARP_SIZE
where WARP_SIZE is 32 on all current devices.
注:このアプローチは、動的並列処理には適していません。
一部のCUDAライブラリ関数も内部でカーネルを使用して実装されているため、実行されるブロックの総数が、明示的に起動したものよりもわずかに多いことは驚くべきことではありません。