0

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で仮想マシンを使用するだけですが、これは効果がありますか?? ..

私を導く/助けるために何かを言いなさい。ありがとう!!

4

2 に答える 2

0

AFAIK、高レベルの PAPI 呼び出しは、敵の明示的な初期化を呼び出しません。私はあなたと同じ問題を抱えています。解決されましたら、その方法を教えていただけないでしょうか。

于 2012-09-12T09:24:12.273 に答える
0

PAPI を初期化していません。カウントを開始する前に初期化を行い、シャットダウンをカウントした後に行う必要があります。ctests ディレクトリ内のファイルを読んで、それがどのように行われるかを確認することをお勧めします。

于 2012-02-13T18:39:21.733 に答える