2017-05-16 14 views
0

JCudaを使用してCUDAカーネルを実行するJavaコードを書きました。私はストリームがどのように重なり合っているかを知るためにアプリケーションをプロファイルしたいと思います。私は、カーネルの実行時間を得るためにcudaEventElpasedTimeのようなcudaイベントコールを使用することができますが、同じカーネルの開始タイムスタンプと終了タイムスタンプを取得する方法はわかりません。nvprofを使用せずにCUDAイベントの開始時間と終了時間を取得する方法

nvprofはそのような結果を生成してタイムラインを表示できますが、Javaアプリケーションでnvprofを実行する方法は見つけられません。

編集:解答のおかげで、nvprofを使用してJavaアプリケーションをプロファイルする方法を理解しました。私はまだcudaEventコールを使って開始時刻と終了時刻を取得する方が好きです。それはnvprofがその情報を得ることができるようですが、エンドユーザーがそうするためのAPIはありませんか?

+0

@Shadow @ cudaEvent呼び出しを使用して開始時刻と終了時刻を取得することをお勧めします。プロフィールの対象をより詳細に制御できます。 – Xiangyu

+0

Visal Profilerを使用することもできます。 [いくつかの他のバージョンで](https://forum.byte-welt.net/t/jcuda-and-nvvp-visual-profiler/3667)(https://devtalk.nvidia.com/default/topic/524531/profiler-error-message-when-profiling-jcuda-application /)、CUDA 8.0でやり直したようです。 – Marco13

+0

@ Marco13、これはWindowsでのみ動作しますか?私はそれが働くためにバットを作る必要があることを読んだ、私はLinuxの下で.shスクリプトを試していない。 – Xiangyu

答えて

2

これを行うには、次の2つの方法があります。

  1. あなたは、コマンドライン経由でJCudaアプリケーションを実行できる場合は、あなたを実行できない場合は、コマンドにnvprof --profile-child-processes <command to run your JCuda application>

  2. を使用して、それをプロファイリングすることができますアプリケーションをコマンドラインで開き、端末を開き、コマンドnvprof --profile-all-processesを使用してnvprofを実行します。 Nvprofはデーモンモードに入り、CUDA活動が起こるのを待っています。 IDEからいつものようにアプリケーションを起動し、CUDAアクティビティが発生してアプリケーションが終了すると、nvprofは端末セッションで結果を出力します。

+0

これは素晴らしい答えです。 JCudaアプリケーションは複数のスレッドで実行されるため、--profile-child-processesは1つのJVMで実行時間を返すだけで、後で調べて結果を掲載します。 – Xiangyu

関連する問題