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()이 호출 될 때 이벤트가 실행 중이 아니기 때문에이 기능이 작동하지 않는 것 같습니다.
이 문제를 해결할 수있는 방법이 있습니까?
타이머를 세 번째로 호출하면 어떻게됩니까? 이미 이벤트를 중지했습니다. 디자인을 다시 생각해 볼 필요가 있습니다. 아마도'PAPI_read'를 사용하십시오. – Anycorn
당신 말이 맞습니다! 나는 시간()이 두 번만 호출되었다는 잘못된 가정을했다. 고맙습니다! (불행히도 나는 당신의 의견을 upvote 허용되지 않습니다) – pianoslum