gpt4 book ai didi

c - 使用 Papi 获取 retval、清理、销毁失败

转载 作者:行者123 更新时间:2023-11-30 17:19:04 25 4
gpt4 key购买 nike

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

我正在使用PAPI和C。

#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);
}

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

    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 失败。为什么?

最佳答案

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

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

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

关于c - 使用 Papi 获取 retval、清理、销毁失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28969697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com