使用papi,PAPI_SP_OPS保持为0

问题描述 投票:0回答:1

使用c++

init Papi之后,我想知道FLOPS,但是我发现PAPI_SP_OPS剩余0

执行。时间(毫秒):53.282 PAPI_FP_OPS:0 PAPI_TOT_CYC:158771364 MFLOPS:0.000

我确定我已经链接了 papi 库。

也许我的cmakelist.txt

有问题
find_program(PAPI_FOUND papi_avail)
if(PAPI_FOUND)
  message(STATUS "PAPI found")
  link_libraries(papi)
  add_compile_definitions(PAPI)
endif()



if(OpenMP_FOUND)
  target_link_libraries(kernel_main m OpenMP::OpenMP_CXX ${PAPI_LIBRARIES})
  target_link_libraries(kernel_opt m OpenMP::OpenMP_CXX ${PAPI_LIBRARIES})
  
else()
  target_link_libraries(kernel_main m ${PAPI_LIBRARIES})
  target_link_libraries(kernel_opt m ${PAPI_LIBRARIES})
 
endif()

这是我的main.cpp

#ifdef PAPI
// init counters
  long long StartTime;
  long long StopTime;
  InitPapi();
  StartTime = PapiStartCounters();    
#endif

...do some stuff

#ifdef PAPI
    StopTime  = PapiStopCounters ();
    PrintPapiResults( "Kernel main", StartTime, StopTime);
#endif

这是papi.cpp

static const int NUM_EVENTS = 2;
static int       EVENTS[NUM_EVENTS] = {PAPI_SP_OPS, PAPI_TOT_CYC};
static long long VALUES[NUM_EVENTS];



/*
 * Init PAPI
 */
void InitPapi(){
    
   //int retval = 0;
    
   /* Start Init library */
   if(PAPI_library_init(PAPI_VER_CURRENT) != PAPI_VER_CURRENT )
     {
     fprintf(stderr,"PAPI Library initialization error! %d\n",  __LINE__);
     exit(1);
   }    
  
}// end InitPapi
//-----------------------------------------------------------------------------


/*
 * Start papi counters and return time
 */
long long PapiStartCounters(){

   int retval = 0;
    
/* Start counting events */
   if ((retval = PAPI_start_counters(EVENTS, NUM_EVENTS)) != PAPI_OK)
   {
    fprintf(stderr,"PAPI Start counter error! %d, %d\n",  retval, __LINE__);
    exit(1);
   }    

   return(PAPI_get_real_usec());  
}// end of Papi_Start_Counters
//------------------------------------------------------------------------------

/*
 * Stop Papi counters
 */
long long PapiStopCounters(){

   long long StopTime = PAPI_get_real_usec();  
   int retval = 0;
   
    /* Stop counting events */
    if ((retval = PAPI_stop_counters(VALUES, NUM_EVENTS)) != PAPI_OK){    
       fprintf(stderr,"PAPI stop counters error! %d, %d\n", retval, __LINE__);
       exit(1);
    }

   return (StopTime);
}// end of PapiStopCounters
//------------------------------------------------------------------------------

/*
 * Print Papi results
 */
void PrintPapiResults( const char * RoutineName, 
                       long long StartTime, long long StopTime){
    
    fprintf(stderr,"_____Routine: %s_______\n", RoutineName); 
    fprintf(stderr,"Exec. time (ms): %20.3f\n", (StopTime - StartTime)/ (double)1000);
    fprintf(stderr,"PAPI_FP_OPS:     %20lld\n", VALUES[0]);
    fprintf(stderr,"PAPI_TOT_CYC:    %20lld\n", VALUES[1]);
    fprintf(stderr,"MFLOPS:          %20.3f\n",  (double) VALUES[0] / (double) (StopTime - StartTime));
    
}// end of PrintPapiResults
//------------------------------------------------------------------------------

我确定我已经链接了 PAPI

python c++ hpc papi
1个回答
0
投票

浮动操作的使用

PAPI_DP_OPS

双重操作使用

PAPI_DP_OPS

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.