2011-04-01 4 views
0

PAPI를 사용한 적이 있습니까?PAPI 사용으로 인한 몇 가지 문제점

PAPI가 커널 버전> 2.6.32 (perf-events)를 지원하기 때문에 코드를 테스트하도록 선택합니다.

난 단지에 상관없이 같은 수의 (결과)를 얻을 이유는 무엇 이벤트 코드 등과 PAPI_TOT_INS, PAPI_BR_INS, 같은 내가 선택 ..

#include <stdio.h> 
#include "papi.h" 
int main(){ 
int i,j,k; 
int a[300][300]; 
int b[300][300]; 
int c[300][300]; 
for(i=0;i<300;i++){ 
    for(j=0;j<300;j++){ 
     a[i][j]=1; 
     b[i][j]=2; 
     c[i][j]=0; 
    } 
} 

int Events[1]={PAPI_TOT_INS};//={PAPI_BR_INS,PAPI_BR_MSP}; 

long_long values[1];//values[0]=0; 

PAPI_start_counters(Events,1); 

for(i=0;i<300;i++){ 
    for(j=0;j<300;j++){ 
     for(k=0;k<300;k++){ 
      c[i][j]+=a[i][k]*b[k][j]; 
     } 
    } 
} 
printf("r is %d\n",c[0][0]); 

PAPI_read_counters(values,1); 

printf("events is %lld\n",values[0]); 

for(i=0;i<300;i++){ 
    for(j=0;j<300;j++){ 
     for(k=0;k<300;k++){ 
      a[i][j]+=b[i][k]*c[k][j]; 
     } 
    } 
} 

PAPI_accum_counters(values,1); 

printf("events is %lld\n",values[0]); 

for(i=0;i<300;i++){ 
      for(j=0;j<300;j++){ 
        for(k=0;k<300;k++){ 
          a[i][j]+=b[i][k]*c[k][j]; 
        } 
      } 
    } 

PAPI_stop_counters(values,1); 

printf("events is %lld\n",values[0]); 

return 0; 
} 

내 생각 :

1.My PC (uname -a) : Linux xunzhang-virtual-machine 2.6.35-28- 일반 # 49-Ubuntu SMP Tue Mar ... X86_64 GNU/Linux

내 커널이 perf - 사건? 난 그냥이 효과는 ?? ..

말 뭔가 안내 않는다> 2.6.32 ....

2. 나는 그냥 내 MAC 내 가상 머신을 사용하는 기본 결론을 사용/도와주세요. 감사!!

+0

나는 답변을했습니다! 나는 물리적 인 기계를 시험해 보았다. 올바른 대답을 인쇄했다. – xunzhang

답변

0

PAPI를 초기화하지 않습니다. 카운팅을 시작하기 전에 초기화를하고 종료를 계산해야합니다. ctests 디렉토리의 파일을 읽고 어떻게 수행되는지 볼 수 있습니다.

0

AFAIK, 상위 수준 PAPI 호출은 적의 명시 적 초기화를 호출하지 않습니다. 나는 당신과 같은 문제가 있습니다. 네가 해결했다면, 내가 어떻게 알려줄 수 있니?