int ProcessNodes(DGraph *dg,int me){ double chksum=0.0; Arr *feat=NULL; int i=0,verified=0,tag; DGNode *nd=NULL; double rchksum=0.0; MPI_Status status; TRACE_smpi_set_category ("ProcessNodes"); for(i=0;i<dg->numNodes;i++){ nd=dg->node[i]; if(nd->address!=me) continue; if(strstr(nd->name,"Source")){ nd->feat=RandomFeatures(dg->name,fielddim,nd->id); SendResults(dg,nd,nd->feat); }else if(strstr(nd->name,"Sink")){ chksum=ReduceStreams(dg,nd); tag=dg->numArcs+nd->id; /* make these to avoid clash with arc tags */ MPI_Send(&chksum,1,MPI_DOUBLE,0,tag,MPI_COMM_WORLD); }else{ feat=CombineStreams(dg,nd); SendResults(dg,nd,feat); } } TRACE_smpi_set_category ("ProcessNodes"); if(me==0){ /* Report node */ rchksum=0.0; chksum=0.0; for(i=0;i<dg->numNodes;i++){ nd=dg->node[i]; if(!strstr(nd->name,"Sink")) continue; tag=dg->numArcs+nd->id; /* make these to avoid clash with arc tags */ MPI_Recv(&rchksum,1,MPI_DOUBLE,nd->address,tag,MPI_COMM_WORLD,&status); chksum+=rchksum; } verified=verify(dg->name,chksum); } return verified; }
void FileHandle::Action(){ FileOperations(); SendResults(); }