Hi,
I want to have an array of papi event sets so I each thread operates with its own set. The problem comes when from the master thread I try to call to the PAPI_start(sys.eventsets[i] ) method.
The first iteration goes well however, at the second iteration I get an error -10, which is "Event Set is currently running". I don't know why this is happening, the event sets are in different positions of the vector. I also have tried to define different counter types for the second iteration but I get the same error.
Somebody knows what is happening below this papi call?
I attach you the code, ( sorry bout having so many comments)
if (not PAPI_is_initialized()) {
if((retval = PAPI_library_init(PAPI_VER_CURRENT)) != PAPI_VER_CURRENT ){
std::cout<<"PAPI ERROR init (master): " << retval << "\n";
}else{ std::cout<<"PAPI ERROR no error init (master): " << retval << "\n"; }
if((retval = PAPI_thread_init(pthread_self)) != PAPI_OK){
std::cout<<"PAPI ERROR thread init (master): " << retval << "\n";
}else{
std::cout<<"PAPI ERROR no errorno error thread init (master): " << retval << "\n";
}
}else{
std::cout<<"PAPI ERROR already initialized (master): \n";
}
for(int i=0; i< sys.getNumThreads(); i++){
std::cout << "one thread" << "\n";
if ((retval=PAPI_create_eventset(&sys.eventsets[i])) != PAPI_OK){
std::cout<<"PAPI ERROR create set (master): " << retval << "\n";
}else{std::cout<<"PAPI ERROR no error create (master): " <<i<< "\n"; }
if ((retval=PAPI_add_events(sys.eventsets[i], (int*)Events, numevents)) != PAPI_OK){
std::cout<<"PAPI ERROR adding event to set (master): " << retval << "\n";
}else{std::cout<<"PAPI ERROR no error add (master): " <<i<< "\n"; }
if((retval=PAPI_start(sys.eventsets[i] )) != PAPI_OK){
std::cout<<"PAPI ERROR starting set (master): " << retval << "\n";
}else{std::cout<<"PAPI ERROR no error start (master): " <<i<< "\n"; }
Events[0]= PAPI_L1_TCM;
Events[1]= PAPI_L2_TCM;
Events[2]= PAPI_L3_TCM;
}
the error is in the last call to PAPI_start as I have mentioned
Thank you,
David
