通常 PAPI 是这样使用的:
Initialize Lib
Add Event(s)
PAPI_start()
someCalculation()
PAPI_stop()
但是,我有一个应用程序,它可以像这样对代码进行计时:
start = time()
someCalculation()
t = time() - start;
我想覆盖这个 time() 函数,它在另一个文件中。我的代码:
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 error -9: EventSet is currently not running
从 PAPI_stop() 获得。
我认为eventSet
在函数的两次运行之间共享变量就足够了。不幸的是,这似乎不起作用,因为调用 PAPI_stop() 时事件没有运行。
有没有机会解决这个问题?