0

PGI 15.7 コンパイラで openacc を使用してコードを高速化しようとしています。

コードを C ソース レベルでプロファイリングしたいと考えています。CUDA 7.0 の「nvvp」プロファイラーを使用しています。nvvp を実行すると、「分析タップ」を使用して、どのレイテンシーがコードの速度低下の原因であるかを取得できます。(データの依存関係、条件分岐、帯域幅など)

しかし、行ベースの分析は得られず、「カーネル」レベルの分析しか得られませんでした。(例: main_300_gpu カーネルは 10 秒使用) . そのため、コードをどこで修正する必要があるかを知るのに苦労しています。

ソースレベルでコードをプロファイリングする方法はありますか?

私は使用しています

PGI 15.7 (pgcc を使用)

CUDA7.0

NVIDIA GTX 960

Ubuntu 14.04 LTS x86_64

[私の nvvp レポートのスクリーンショット] ここに画像の説明を入力

ここに画像の説明を入力

4

2 に答える 2

3

また、フラグ "-ta=tesla:lineinfo" を追加して、コンパイラにプロファイラーのソース コードの関連付けを追加させることもできます (これは nvcc --lineinfo と同じフラグです)。Bob が指摘しているように、コードが大幅に変換されている可能性があるため、行情報が元のソースに直接対応していない場合があります。

于 2015-09-14T21:56:01.023 に答える
1

現在 (および cc5.2 以降の GPU を搭載した CUDA 7.5 以降)、nvvp プロファイラーは、さまざまな種類のサンプリングされた実行アクティビティをソース コードのCUDA C/C++行に関連付けることができます。

ただし、現時点では、この機能はソース コードの OpenACC C/C++ (または Fortran) 行には拡張されていません。

ただし、アクティビティを逆アセンブリに関連付けることは引き続き可能であり、PGI nollvm オプションによって生成される中間 C ソース ファイルに関連付けることができる場合があります。ただし、これらのいずれも、OpenACC ソース コードとはあまり似ていません。

PGI ツールを使用して OpenACC コードをプロファイリングする別のオプションは、コードを実行する前に PGI_ACC_TIME=1 環境変数を設定することです。これにより、ランタイムに組み込まれた軽量のプロファイラーが、OpenACC コードの実行特性、特にアクセラレーター領域に関連付けられた部分を分析できるようになります。出力には注釈が付けられているため、ソース コードの行を参照できます。

于 2015-09-09T02:15:43.353 に答える