2016-10-30 4 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))) 

, который является весьма информативным для моей задачи.

Возможно ли получить такую ​​информацию в коде вместо использования внешнего профилирующего инструмента, такого как nvprof и company?

+1

система cudaEvent может предоставить вам эквивалент 'profile.end-profile.start' через' cudaEventElapsedTime' –

ответ

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

Смежные вопросы