2013-11-22 7 views
-2

приведен фрагмент кодаОценка времени выполнения 1d CUFFT

cudaEventRecord(start, 0); 

    /* creates 1D FFT plan */ 
    cufftPlan1d(&plan, NX, CUFFT_C2C, BATCH); 
    /* executes FFT processes */ 
    cufftExecC2C(plan, devPtr, devPtr, CUFFT_FORWARD); 

    cudaEventRecord(stop, 0); 
    cudaEventSynchronize(stop); 

меры как время, необходимое на CUFFT для создания плана и времени выполнения.

Как измерить только время выполнения без учета времени, необходимого для создания плана?

+3

положить 'cudaEventRecord (start, 0)' после 'cufftPlan1d()'? Также я думаю, вам нужно 'cudaDeviceSynchronize()' после 'cufftExecC2C()' –

+1

@SagarMasuti Возможно, вам стоит оставить свой комментарий в виде ответа. Я так или иначе отказался от этого вопроса, так как он не проявляет никаких усилий в понимании проблемы. – JackOLantern

ответ

1

Время, необходимое для вычисления времени выполнения без времени создания плана, может быть измерено с помощью следующего фрагмента. Это просто перестановка ваших строк в вопросе.

cufftResult  cuRet ; 

/* creates 1D FFT plan */ 
cuRet = cufftPlan1d(&plan, NX, CUFFT_C2C, BATCH); 
if (CUFFT_SUCCESS != cuRet) 
{ 
    printf ("Failed in plan creation\n") ; 
    return ; 
} 

cudaEventRecord(start, 0); 
/* executes FFT processes */ 
cuRet = cufftExecC2C(plan, devPtr, devPtr, CUFFT_FORWARD); 
if (CUFFT_SUCCESS != cuRet) 
{ 
    printf ("Failed in FFT execution\n") ; 
    return ; 
} 
if (cudaThreadSynchronize() != cudaSuccess) 
{ 
    printf("Failed to synchronize\n"); 
    return; 
} 

cudaEventRecord(stop, 0); 
cudaEventSynchronize(stop); 

Помнить, чтобы проверить возвращенные значения cudaEventRecord и cudaEventSynchronize за ошибки, которые я не показаны, но вы можете найти правильный способ проверки ошибок here.

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