PetscErrorCode PetscLogEventBeginDefault(PetscLogEvent event, int t, PetscObject o1, PetscObject o2, PetscObject o3, PetscObject o4) { StageLog stageLog; EventPerfLog eventLog; int stage; PetscErrorCode ierr; PetscFunctionBegin; ierr = PetscLogGetStageLog(&stageLog);CHKERRQ(ierr); ierr = StageLogGetCurrent(stageLog, &stage);CHKERRQ(ierr); ierr = StageLogGetEventPerfLog(stageLog, stage, &eventLog);CHKERRQ(ierr); /* Check for double counting */ eventLog->eventInfo[event].depth++; if (eventLog->eventInfo[event].depth > 1) PetscFunctionReturn(0); /* Log performance info */ eventLog->eventInfo[event].count++; PetscTimeSubtract(eventLog->eventInfo[event].time); #if defined(PETSC_HAVE_CHUD) eventLog->eventInfo[event].flops -= chudGetPMCEventCount(chudCPU1Dev,PMC_1); #elif defined(PETSC_HAVE_PAPI) { long_long values[2]; ierr = PAPI_read(PAPIEventSet,values);CHKERRQ(ierr); eventLog->eventInfo[event].flops -= values[0]; /* printf("fma %g flops %g\n",(double)values[1],(double)values[0]); */ } #else eventLog->eventInfo[event].flops -= _TotalFlops; #endif eventLog->eventInfo[event].numMessages -= irecv_ct + isend_ct + recv_ct + send_ct; eventLog->eventInfo[event].messageLength -= irecv_len + isend_len + recv_len + send_len; eventLog->eventInfo[event].numReductions -= allreduce_ct; PetscFunctionReturn(0); }
PetscErrorCode PetscLogEventEndDefault(PetscLogEvent event, int t, PetscObject o1, PetscObject o2, PetscObject o3, PetscObject o4) { PetscStageLog stageLog; PetscEventPerfLog eventLog = NULL; int stage; PetscErrorCode ierr; PetscFunctionBegin; ierr = PetscLogGetStageLog(&stageLog);CHKERRQ(ierr); ierr = PetscStageLogGetCurrent(stageLog, &stage);CHKERRQ(ierr); ierr = PetscStageLogGetEventPerfLog(stageLog, stage, &eventLog);CHKERRQ(ierr); /* Check for double counting */ eventLog->eventInfo[event].depth--; if (eventLog->eventInfo[event].depth > 0) PetscFunctionReturn(0); else if (eventLog->eventInfo[event].depth < 0) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONGSTATE, "Logging event had unbalanced begin/end pairs"); /* Log performance info */ PetscTimeAdd(&eventLog->eventInfo[event].timeTmp); eventLog->eventInfo[event].time += eventLog->eventInfo[event].timeTmp; eventLog->eventInfo[event].time2 += eventLog->eventInfo[event].timeTmp*eventLog->eventInfo[event].timeTmp; #if defined(PETSC_HAVE_CHUD) eventLog->eventInfo[event].flopsTmp += chudGetPMCEventCount(chudCPU1Dev,PMC_1); #elif defined(PETSC_HAVE_PAPI) { long_long values[2]; ierr = PAPI_read(PAPIEventSet,values);CHKERRQ(ierr); eventLog->eventInfo[event].flopsTmp += values[0]; /* printf("fma %g flops %g\n",(double)values[1],(double)values[0]); */ } #else eventLog->eventInfo[event].flopsTmp += petsc_TotalFlops; #endif eventLog->eventInfo[event].flops += eventLog->eventInfo[event].flopsTmp; eventLog->eventInfo[event].flops2 += eventLog->eventInfo[event].flopsTmp*eventLog->eventInfo[event].flopsTmp; eventLog->eventInfo[event].numMessages += petsc_irecv_ct + petsc_isend_ct + petsc_recv_ct + petsc_send_ct; eventLog->eventInfo[event].messageLength += petsc_irecv_len + petsc_isend_len + petsc_recv_len + petsc_send_len; eventLog->eventInfo[event].numReductions += petsc_allreduce_ct + petsc_gather_ct + petsc_scatter_ct; PetscFunctionReturn(0); }