2014-05-19 8 views
0

Usally PAPI는 다음과 같이 사용됩니다다른 함수에서 PAPI_start() 및 PAPI_stop()을 호출 하시겠습니까?

Initialize Lib 
Add Event(s) 
PAPI_start() 
someCalculation() 
PAPI_stop() 

그러나, 내가 응용 프로그램을 가지고있는 시간과 같은 코드 : 다른 파일에

나는이 시간을 무시하려면
start = time() 
someCalculation() 
t = time() - start; 

() 함수, . 내 코드 :

static int INIT=0; 
int retval; 
static int eventSet = PAPI_NULL; 
long long res[1]; 

if(INIT){ 
     // eventSet is NOT PAPI_NULL here! 
     if ((retval = PAPI_stop(eventSet, res)) != PAPI_OK) 
       handle_error(retval); 
     return res[0]/1e9; 
} 

INIT = 1; 
retval = PAPI_library_init(PAPI_VER_CURRENT); 

if ((retval = PAPI_create_eventset(&eventSet)) != PAPI_OK) 
    handle_error(retval); 

if ((retval = PAPI_add_named_event(eventSet, (char *) "rapl:::PP0_ENERGY:PACKAGE0")) != PAPI_OK) 
    handle_error(retval); 

if ((retval = PAPI_start(eventSet)) != PAPI_OK) 
    handle_error(retval); 

return 0.0; 

응용 프로그램을 실행 내가 PAPI_stop에서 PAPI error -9: EventSet is currently not running를 얻을 수().

두 개의 함수 실행 사이에 eventSet 변수를 공유하는 것으로 충분하다고 가정했습니다. PAPI_stop()이 호출 될 때 이벤트가 실행 중이 아니기 때문에이 기능이 작동하지 않는 것 같습니다.

이 문제를 해결할 수있는 방법이 있습니까?

+0

타이머를 세 번째로 호출하면 어떻게됩니까? 이미 이벤트를 중지했습니다. 디자인을 다시 생각해 볼 필요가 있습니다. 아마도'PAPI_read'를 사용하십시오. – Anycorn

+0

당신 말이 맞습니다! 나는 시간()이 두 번만 호출되었다는 잘못된 가정을했다. 고맙습니다! (불행히도 나는 당신의 의견을 upvote 허용되지 않습니다) – pianoslum

답변

1

타이머를 세 번째로 호출하면 어떻게됩니까? 이미 이벤트를 중지했습니다. PAPI_read - Anycorn