读取PetscEventPerfInfo中的值

时间:2017-08-03 14:04:52

标签: petsc

我有一个使用PETSc的应用程序。对于(近)生产运行下的性能监控,我想记录少量的各种值。有些是由PETSc生成的,有些则不是。

现在我想知道:如何从PetscEventPerfInfo中读取时间值以将其写入我的文件?我找不到关于PetscEventPerfInfo的文档条目,所以我不确定我是否应该以任何方式触摸它。

但是,我发现以下方法基本上揭示了PetscEventPerfInfo

的结构
PetscErrorCode EventPerfInfoClear(PetscEventPerfInfo *eventInfo)
{
  PetscFunctionBegin;
  eventInfo->id            = -1;
  eventInfo->active        = PETSC_TRUE;
  eventInfo->visible       = PETSC_TRUE;
  eventInfo->depth         = 0;
  eventInfo->count         = 0;
  eventInfo->flops         = 0.0;
  eventInfo->flops2        = 0.0;
  eventInfo->flopsTmp      = 0.0;
  eventInfo->time          = 0.0;
  eventInfo->time2         = 0.0;
  eventInfo->timeTmp       = 0.0;
  eventInfo->numMessages   = 0.0;
  eventInfo->messageLength = 0.0;
  eventInfo->numReductions = 0.0;
  PetscFunctionReturn(0);
}

我强烈猜测它只是eventInfo->time,但我绝对不确定是否可以阅读它是否有“官方”方式从该结构中读取。

那么,如果我只想将时间值读入变量以供进一步使用,我该怎么办?

1 个答案:

答案 0 :(得分:1)

好消息:有一个PETSC的例子,src/dm/impls/plex/examples/tests/ex9.c利用time的字段PetscEventPerfInfo打印与效果相关的日志! < / p>

结构PetscEventPerfInfopetsc-3.7.6/include/petsclog.h中定义。 文件中有很多注释。 字段time确实定义为:

PetscLogDouble time, time2, timeTmp;   /* The time and time^2 taken for this event */

time包含eventlog.c执行时间的线索。实际上,在函数PetscLogEventBeginComplete中,有一个eventPerfLog->eventInfo[event].time -= curTime;,它与eventPerfLog->eventInfo[event].time += curTime;的{​​{1}}匹配。

因此,只有在PetscLogEventEndComplete()time被调用或同时PetscLogEventBeginComplete()PetscLogEventEndComplete()时,字段PetscLogEventBeginDefault()的值才有意义。