首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Papi获取retval、cleanup、destroy失败

使用Papi获取retval、cleanup、destroy失败
EN

Stack Overflow用户
提问于 2015-03-11 00:58:50
回答 1查看 165关注 0票数 0

我正在尝试使用papi进行测试,但我收到了一些错误,我不明白为什么会发生这些错误。我在网上找不到他们要的东西。代码如下

我使用的是PAPI和C。

代码语言:javascript
复制
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <memory.h>
#include <malloc.h>
#include "papi.h"

#define INDEX 100

static void test_fail(char *file, int line, char *call, int retval);

int main(int argc, char **argv) {
    extern void dummy(void *);
    float matrixa[INDEX][INDEX], matrixb[INDEX][INDEX], mresult[INDEX]    [INDEX];
    float real_time, proc_time, mflops;
    long long flpins;
    int retval, status = 0;
    int i,j,k;
    long_long values[1];

    FILE *file; 
    file = fopen("output.txt","w"); 

    retval = PAPI_library_init(PAPI_VER_CURRENT);
    int EventSet = PAPI_NULL;
    PAPI_create_eventset(&EventSet);
    if(PAPI_add_event(EventSet, PAPI_LD_INS) != PAPI_OK)
    {
        fprintf(file,"PAPI failed to add Load/Store instructions\n");
    }

    if (PAPI_state(EventSet, &status) != PAPI_OK)
        fprintf(file,"state fail\n");

    fprintf(file, "State is now %d\n", status);
    if (PAPI_start(EventSet) != PAPI_OK)
        fprintf(file,"start fail\n");

    if (PAPI_state(EventSet, &status) != PAPI_OK)
        fprintf(file,"state2 fail\n");

    fprintf(file, "State is now %d\n", status);

    /* Initialize the Matrix arrays */
    for ( i=0; i<INDEX; i++ ){
        mresult[0][i] = 0.0;
        matrixa[0][i] = matrixb[0][i] = rand()*(float)1.1; }

    if((retval=PAPI_flops( &real_time, &proc_time, &flpins, &mflops))<PAPI_OK)
        fprintf(file,"retval failed\n");

    for (i=0;i<INDEX;i++)
    {
        for(j=0;j<INDEX;j++)
        {
            for(k=0;k<INDEX;k++)
            {
                mresult[i][j]=mresult[i][j] + matrixa[i][k]*matrixb[k][j];
            }
        }
    }

    if((retval=PAPI_flops( &real_time, &proc_time, &flpins, &mflops))        <PAPI_OK)
    {
        fprintf(infile,"ret2 failed\n");
    }

    fprintf(file,"Real_time:\t%f\nProc_time:\t%f\nTotal flpins:\t%lld \nMFLOPS:\t\t%f\n",
            real_time, proc_time, flpins, mflops); 
    fflush(file);
    fprintf(file,"%s\tPASSED\n", __FILE__);
    fflush(file);

    if (PAPI_read(EventSet, values) != PAPI_OK)
      {fprintf(file,"read fail\n");}

      if (PAPI_stop(EventSet, values) != PAPI_OK)
      {fprintf(file,"stop fail\n");}

    if (PAPI_cleanup_eventset(&EventSet) != PAPI_OK)
      {fprintf(file,"cleanup fail\n");}

    if (PAPI_destroy_eventset(&EventSet) != PAPI_OK)
      {fprintf(file,"destroy fail\n");}


      fprintf(file,"\nValues is %f\n", values[0]);
      fflush(file);
      fclose(file);

      PAPI_shutdown();
      exit(0);
    }

在输出文件中,我只看到以下内容:

代码语言:javascript
复制
    State is now 1
    State is now 2
    retval failed
    ret2 failed
    Real_time:      0.000000
    Proc_time:      0.000000
    Total flpins:   99
    MFLOPS:         0.000000
    PAPI_flops.c    PASSED
    cleanup fail
    destroy fail

我不明白为什么ret,ret2,cleanup和destroy失败了。为什么?

EN

回答 1

Stack Overflow用户

发布于 2015-03-11 06:42:00

您可以使用PAPI_perrorPAPI_strerror函数来获取与错误返回值关联的错误消息。例如,这可能有助于追踪PAPI_flops失败的原因。(可能是您的系统不支持所需的事件。)

PAPI_cleanup_eventset失败的原因是它只接受整数EventSet,而不是指向它的指针。

我强烈建议发出错误返回值字符串,并在编译时显示警告-后者很可能会发现错误参数类型的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28969697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档