2013-12-11 3 views
0

Предположим, мы хотим знать, как долго функция А работает, мы можем написать код, как этотКак написать макрос, который получает время выполнения функции?

struct timeval tpstart,tpend; 
    gettimeofday(&tpstart,NULL); 
    A(); 
    gettimeofday(&tpend,NULL); 
    float timeuse= tpend.tv_sec-tpstart.tv_sec + (tpend.tv_usec-tpstart.tv_usec)/1000000; 
    printf("Used Time:%f\n",timeuse); 

Но как я могу инкапсулировать его в MACRO такой Runtime (А), может быть, время выполнения (A, B,. ..), иногда несколько функций работают вместе.

+0

'gettimeofday' не является стандартным C, а также объявляется устаревшей POSIX, рекомендуется использовать' clock_gettime' из POSIX или 'timespec_get 'от C11. –

+0

Хорошо, это сегмент кода, который я получил от google, я никогда не использую его до – stonestrong

ответ

1

Если вы не заботитесь о возвращаемом значении функции, жизнь проста:

#define Runtime(x) do { \ 
    struct timeval tpstart,tpend; \ 
    gettimeofday(&tpstart,NULL); \ 
    x; \ 
    gettimeofday(&tpend,NULL); \ 
    float timeuse= tpend.tv_sec-tpstart.tv_sec + (float)(tpend.tv_usec-tpstart.tv_usec)/1000000; \ 
    printf("Used Time:%f\n",timeuse); \ 
} while(0) 

Runtime(A()); 
Runtime(A() ; B()); 
+0

. Вы даже можете быть более информативным с помощью '#x: Используемое время:% f" '. –

+0

спасибо большое, он работает для меня :) – stonestrong

+0

однако при использовании Runtime (cudaKernel <<<1,1> >>()); он не работает – stonestrong

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