2016-10-30 3 views
0

OpenCLの世界では、キューに入れられた、サブミットされた、開始時間、終了時間などのすべてのプロファイリング情報をナノ秒単位で返す関数clGetEventProfilingInfoがあります。 printf私が欲しいときはいつでもその情報にできるのでとても便利です。CUDAプログラムのコード内プロファイリングがありますか

PyOpenCLと例えば、私の仕事のために非常に有益である。この

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

ようなコードを書くことが可能です。

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

+1

cudaEventシステムは 'cudaEventElapsedTime'を介して' profile.end-profile.start'に相当することができます –

答えて

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をご覧ください。

1

nvprof以外のツールは、これまでプロファイリングデータを収集することができません。ただし、コード内でnvprofを利用することはできます。 this Nvida documentをご覧ください。 cuProfilerStart()cuProfilerStop()を使用して、コードの一部のみを検証できます。 彼らは内部にありますcuda_profiler_api.h

関連する問題