некоторые проблемы с использованием PAPI - PullRequest
0 голосов
/ 01 апреля 2011

Вы когда-нибудь использовали 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.Мой компьютер (uname -a): Linux xunzhang-virtual-machine 2.6.35-28-generic # 49-Ubuntu SMP Вторник ... X86_64 GNU / Linux

как мне (команде) увидеть поддержку моего ядра perf-событий?Я просто использую вывод по умолчанию, что> 2.6.32 ....

2. Я просто использую свою виртуальную машину в моем MAC, это влияет ?? ..

Скажи что-нибудь, чтобы направлять/Помоги мне.Спасибо !!

Ответы [ 2 ]

0 голосов
/ 12 сентября 2012

AFAIK, вызовы PAPI высокого уровня не вызывают явной инициализации. У меня такая же проблема, как и у вас. Если вы решили это, пожалуйста, дайте мне знать, как?

0 голосов
/ 13 февраля 2012

Вы не инициализируете PAPI.Вы должны, перед началом подсчета, выполнить инициализацию и после подсчета остановки.Возможно, вы захотите прочитать файлы в каталоге ctests, чтобы увидеть, как это делается.

...