2016-10-18 9 views
0

nvprofメトリックを理解しようとしています。私はCUDAを初めとしており、パフォーマンスにとって重要な指標を理解しようとしています。nvprofメトリックsm_efficiencyとwarp_execution_効率0を理解しようとしています

行列間の絶対差の和を計算するためのカーネルを作成しました。

Tegra X1で実行すると、ブロックあたり1584ブロックと1024スレッドで約47msで平均化されます。私はこれらの指標を得るnvprof実行

:他のメトリックはとても優れているとき

achieved_occupancy   Achieved Occupancy   0.982284 0.982284 0.982284 
warp_execution_efficiency Warp Execution Efficiency 0.00%  0.00%  0.00% 
sm_efficiency    Multiprocessor Activity 0.11%  0.11%  0.11% 
branch_efficiency   Branch Efficiency   100.00%  100.00%  100.00% 
ipc      Executed IPC    3.600738 3.600738 3.600738 

はどのように来Warp Execution EfficiencyMultiprocessor Activityは、非常に低いですか?これらは、カーネルの一般的なパフォーマンスをプロファイリングする際の正しいメトリクスです。

+0

warp_execution_efficiencyとsm_efficiencyが正しいとは思いません。達成された確率はほぼ100%です(これは、1 SMあたり2048 = 64ワープが完全に収まるかどうかの期待に合っています.IPCPがSMかGPUかを覚えていません。 * 2 SMs = 12。最小sm_効率は3.6/12 = 30%でなければなりません。2回目のメトリックの収集をお勧めします。結果とカーネルを投稿してください。 –

答えて

1

良い答えは、恐らくCUDAの実行効率、最適化の方法と目標、そしてnvprofの仕組みに関する長いチュートリアルです。コードを一切提供していないので、完全に抽象的かつ推論的でなければならないでしょう。

nvprofまたはCUDAの最適化のコンセプトに苦しんでいる場合は、多くのガイド付き分析、説明、ヘルプ、エキスパートシステムを含む視覚プロファイラnvvpを試してみるとよいでしょう。

sm_efficiencyは、SMに発行可能な1つ以上のワープがある時間のパーセンテージを指します。つまり、1つ以上のワープが停止状態ではありません。 sm_efficiencyは非常に低いので、SM全体が停止状態にある時間の大半が表示されます。指示を出すことはできません。これを占有と比較すると、例えば、これらはほぼ直交した概念です。占有率とは、大まかに言えば、SMに常駐しているワープ数を示します。 SMにワープの「完全補完」がある場合、占有率は高くなります。しかし、たとえ全面的にワープされていても、すべてがほとんど停滞している場合は、低いsm_efficiencyを持つことができます。これらは、「適切な評価指標」、「適切な評価指標」であるかどうかについての質問について

は2つの軌道の1に従ってください:

  1. は、基本的な最適化の目標が達成されたことを確認してください。 CUDAの場合、これらのうち最も基本的なものは、十分な並列性を持ち、メモリサブシステムの露出された効率的な使用に関連しています。たとえば、選択したメトリクスのどれも、効率的なメモリ使用量に関係しません。

  2. 分析駆動型最適化軌道、すなわち性能に対するリミッタを確立することに焦点を当てたものである。あなたが検索できるこれらのアイデアをカバーする様々なプレゼンテーションがあります。 "gtc cuda optimization"でgoogle検索を行うと、基本的なCUDA最適化手法、パフォーマンス測定、および分析主導の最適化を行うプレゼンテーションを見つけることができます。

これをCWと表記します。他の人は、自分の思考やベストプラクティスを追加したいかもしれません。

関連する問題