/// Print information about the simulation in a format that is (mostly) /// YAML compliant. void printSimulationDataYaml(FILE* file, SimFlat* s) { // All ranks get maxOccupancy int maxOcc = maxOccupancy(s->boxes); // Only rank 0 prints if (! printRank()) return; fprintf(file,"Simulation data: \n"); fprintf(file," Total atoms : %d\n", s->atoms->nGlobal); fprintf(file," Min global bounds : [ %14.10f, %14.10f, %14.10f ]\n", s->domain->globalMin[0], s->domain->globalMin[1], s->domain->globalMin[2]); fprintf(file," Max global bounds : [ %14.10f, %14.10f, %14.10f ]\n", s->domain->globalMax[0], s->domain->globalMax[1], s->domain->globalMax[2]); printSeparator(file); fprintf(file,"Decomposition data: \n"); fprintf(file," Processors : %6d,%6d,%6d\n", s->domain->procGrid[0], s->domain->procGrid[1], s->domain->procGrid[2]); fprintf(file," Local boxes : %6d,%6d,%6d = %8d\n", s->boxes->gridSize[0], s->boxes->gridSize[1], s->boxes->gridSize[2], s->boxes->gridSize[0]*s->boxes->gridSize[1]*s->boxes->gridSize[2]); fprintf(file," Box size : [ %14.10f, %14.10f, %14.10f ]\n", s->boxes->boxSize[0], s->boxes->boxSize[1], s->boxes->boxSize[2]); fprintf(file," Box factor : [ %14.10f, %14.10f, %14.10f ] \n", s->boxes->boxSize[0]/s->pot->cutoff, s->boxes->boxSize[1]/s->pot->cutoff, s->boxes->boxSize[2]/s->pot->cutoff); fprintf(file, " Max Link Cell Occupancy: %d of %d\n", maxOcc, MAXATOMS); printSeparator(file); fprintf(file,"Potential data: \n"); s->pot->print(file, s->pot); // Memory footprint diagnostics int perAtomSize = 10*sizeof(real_t)+2*sizeof(int); float mbPerAtom = perAtomSize/1024/1024; float totalMemLocal = (float)(perAtomSize*s->atoms->nLocal)/1024/1024; float totalMemGlobal = (float)(perAtomSize*s->atoms->nGlobal)/1024/1024; int nLocalBoxes = s->boxes->gridSize[0]*s->boxes->gridSize[1]*s->boxes->gridSize[2]; int nTotalBoxes = (s->boxes->gridSize[0]+2)*(s->boxes->gridSize[1]+2)*(s->boxes->gridSize[2]+2); float paddedMemLocal = (float) nLocalBoxes*(perAtomSize*MAXATOMS)/1024/1024; float paddedMemTotal = (float) nTotalBoxes*(perAtomSize*MAXATOMS)/1024/1024; printSeparator(file); fprintf(file,"Memory data: \n"); fprintf(file, " Intrinsic atom footprint = %4d B/atom \n", perAtomSize); fprintf(file, " Total atom footprint = %7.3f MB (%6.2f MB/node)\n", totalMemGlobal, totalMemLocal); fprintf(file, " Link cell atom footprint = %7.3f MB/node\n", paddedMemLocal); fprintf(file, " Link cell atom footprint = %7.3f MB/node (including halo cell data\n", paddedMemTotal); fflush(file); }
/// Print information about the simulation in a format that is (mostly) /// YAML compliant. void printSimulationDataYaml(FILE* file, SimFlat* s) { // All ranks get maxOccupancy int maxOcc = maxOccupancy(s->boxes); // Only rank 0 prints if (!PRINT_YAML || !printRank()) return; fprintf(file,"Simulation data: \n"); fprintf(file," Total atoms : %d\n", s->atoms->nGlobal); fprintf(file," Min global bounds : [ %14.10f, %14.10f, %14.10f ]\n", s->domain->globalMin[0], s->domain->globalMin[1], s->domain->globalMin[2]); fprintf(file," Max global bounds : [ %14.10f, %14.10f, %14.10f ]\n", s->domain->globalMax[0], s->domain->globalMax[1], s->domain->globalMax[2]); printSeparator(file); fprintf(file,"Decomposition data: \n"); fprintf(file," Processors : %6d,%6d,%6d\n", s->domain->procGrid[0], s->domain->procGrid[1], s->domain->procGrid[2]); fprintf(file," Local boxes : %6d,%6d,%6d = %8d\n", s->boxes->gridSize[0], s->boxes->gridSize[1], s->boxes->gridSize[2], s->boxes->gridSize[0]*s->boxes->gridSize[1]*s->boxes->gridSize[2]); fprintf(file," Box size : [ %14.10f, %14.10f, %14.10f ]\n", s->boxes->boxSize[0], s->boxes->boxSize[1], s->boxes->boxSize[2]); fprintf(file," Box factor : [ %14.10f, %14.10f, %14.10f ] \n", s->boxes->boxSize[0]/s->pot->cutoff, s->boxes->boxSize[1]/s->pot->cutoff, s->boxes->boxSize[2]/s->pot->cutoff); fprintf(file, " Max Link Cell Occupancy: %d of %d\n", maxOcc, MAXATOMS); printSeparator(file); fprintf(file,"Potential data: \n"); s->pot->print(file, s->pot); fflush(file); }