2011-04-01 27 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-generic#49 -Ubuntu SMP Tue Mar ... X86_64 GNU/Linux

我怎麼可以(命令)看到我的內核支持perf -events?我只是用那些> 2.6.32 ....

2.我只是用我的虛擬機在我的MAC默認的結論,這是否影響?? ..

說些什麼來指導/幫助我。謝謝!!

+0

我有答案!我嘗試物理機器,它打印正確的答案... – xunzhang 2011-04-01 10:02:22

回答

0

您未初始化PAPI。在開始計數之前,您應該先進行初始化並計算關機次數。您可能需要閱讀ctests目錄中的文件,以瞭解它是如何完成的。

0

AFAIK,高級PAPI調用不會調用顯式初始化。我有和你一樣的問題。如果你已經解決了它,你能告訴我怎麼做?