0

OpenCL の世界には、キューに入れられた、送信された、開始および終了時間などのイベントのすべてのプロファイリング情報をナノ秒単位で返す関数clGetEventProfilingInfoがあります。printfいつでもその情報にアクセスできるのでとても便利です。

たとえば、PyOpenCLを使用すると、次のようなコードを書くことができます。

profile = event.profile                                                                
print("%gs + %gs" % (1e-9*(profile.end - profile.start), 1e-9*(profile.start - profile.queued)))

これは私の仕事にとって非常に有益です。

nvprofcompanyなどの外部プロファイリング ツールを使用する代わりに、コードでそのような情報を取得することは可能ですか?

4

2 に答える 2

1

nvprofここまでプロファイリングデータを収集できるツールは他にありません。ただし、コードで利用することはできnvprofます。この Nvida ドキュメントを見てください。とを使用 cuProfilerStart()cuProfilerStop()て、コードの一部だけを調べることができます。彼らは中にいますcuda_profiler_api.h

于 2016-10-30T21:05:30.683 に答える
1

迅速で軽量なタイミングについては、cudaEvent APIを参照してください。

上記のリンクからの抜粋:

cudaEvent_t start, stop;
cudaEventCreate(&start);
cudaEventCreate(&stop);


cudaMemcpy(d_x, x, N*sizeof(float), cudaMemcpyHostToDevice);
cudaMemcpy(d_y, y, N*sizeof(float), cudaMemcpyHostToDevice);

cudaEventRecord(start);
saxpy<<<(N+255)/256, 256>>>(N, 2.0f, d_x, d_y);
cudaEventRecord(stop);

cudaMemcpy(y, d_y, N*sizeof(float), cudaMemcpyDeviceToHost);

cudaEventSynchronize(stop);
float milliseconds = 0;
cudaEventElapsedTime(&milliseconds, start, stop);

printf("Elapsed time: %f ms\n", milliseconds);

よりフル機能のプロファイリング ライブラリが必要な場合は、CUPTIを参照してください。

于 2016-11-15T08:30:45.123 に答える