2012-05-31 2 views
0

Я запускаю фильтр изображения на GPU, и мне нужно измерить время, которое каждая часть программы берет для сравнения. Сначала я попробовал библиотеку time.h, но всегда возвращал нуль. Затем я прочитал this postcudaEventRecord, возвращающий нуль

и использовал тот же код в своей программе до и после вызова ядра, но все же он возвращает ноль. Может ли кто-нибудь сказать мне, в чем проблема?

Это мой код:

cudaEvent_t start,stop; 
cudaEventCreate(&start); 
cudaEventCreate(&stop); 
float Elapsed=0,Cycle; 
while(count) 
{ 
    cudaEventRecord(start,0); 
    ImgFilter<<<dimGrid,dimBlock>>>... 
    cudaEventRecord(stop,0); 
    cudaElapsedTime(&Cycle,statr,stop); 
    Elapsed += Cycle; 
} 
printf("Time = %f",Elapsed); 

Я также попытался выполнить печать «Цикл», но это всегда равна нулю.

ответ

3

Скучает вызвать cudaEventSynchronize функции

cudaEvent_t start,stop; 
cudaEventCreate(&start); 
cudaEventCreate(&stop); 
float Elapsed=0,Cycle; 
while(count) 
{ 
    cudaEventRecord(start,0); 
    ImgFilter<<<dimGrid,dimBlock>>>... 
    cudaEventRecord(stop,0); 
    cudaEventSynchronize(stop); 
    cudaElapsedTime(&Cycle,statr,stop); 
    Elapsed += Cycle; 
} 
printf("Time = %f",Elapsed); 

Обратите внимание, что функция устройства возвращается перед всеми потоками CUDA завершил выполнение, и вы должны использовать cudaThreadSynchronize после ядра вызова.

+0

Большое вам спасибо, я попробую. –

+0

Помните, что это 'cudaEventElapsedTime', и вы написали' statr' вместо 'start'. –

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