📄 grph.c
字号:
*/void EndPageCIt( GraphData ctx ){ if (ctx->is_lastwindow) fprintf( ctx->fp, "wait\nnew page\n" );}/* GNUplot output */void HeaderGnuplot( GraphData ctx, char *protocol_name, char *title_string, char *units ){ char archname[20], hostname[256], date[30], *p; int dummy; switch (ctx->output_type) { case GRF_EPS: fprintf( ctx->fp, "set terminal postscript eps\n" ); break; case GRF_PS: fprintf( ctx->fp, "set terminal postscript\n" ); break; case GRF_X: /* Default behavior */ break; } fprintf( ctx->fp, "set xlabel \"Size %s\"\n", units ); fprintf( ctx->fp, "set ylabel \"time (us)\"\n" ); if (ctx->is_log) fprintf( ctx->fp, "set logscale xy\n" ); strcpy(archname,"MPI" ); MPI_Get_processor_name(hostname,&dummy);/* Must remove ' from hostname */ p = hostname; while (*p) { if (*p == '\'') *p = ' '; p++; } strcpy(date , "Not available" ); if (!date[0] || strcmp( "Not available", date ) == 0) { fprintf( ctx->fp, "set title \"Comm Perf for %s (%s) type %s\"\n", archname, hostname, protocol_name ); } else { fprintf( ctx->fp, "set title \"Comm Perf for %s (%s) on %s type %s\"\n", archname, hostname, date, protocol_name ); } fprintf( ctx->fpdata, "\n#p0\tp1\tdist\tlen\tave time (us)\trate\n"); fflush( ctx->fp );}void HeaderForGopGnuplot( GraphData ctx, char *protocol_name, char *title_string, char *units ){ char archname[20], hostname[256], date[30], *p; int dummy; fprintf( ctx->fp, "set xlabel \"Processes\"\n" ); fprintf( ctx->fp, "set ylabel \"time (us)\"\n" ); strcpy(archname,"MPI" ); MPI_Get_processor_name(hostname,&dummy);/* Must remove ' from hostname */ p = hostname; while (*p) { if (*p == '\'') *p = ' '; p++; } strcpy(date , "Not available" ); if (!date[0] || strcmp( "Not available", date ) == 0) { fprintf( ctx->fp, "set title \"Comm Perf for %s (%s) type %s\"\n", archname, hostname, protocol_name ); } else { fprintf( ctx->fp, "set title \"Comm Perf for %s (%s) on %s type %s\"\n", archname, hostname, date, protocol_name ); } fprintf( ctx->fpdata, "\n#np time (us) for various sizes\n"); fflush( ctx->fp );}void DrawGnuplot( GraphData ctx, int first, int last, double s, double r ){ if (ctx->givedy) fprintf( ctx->fp, "plot '%s' using 4:5:7:8 notitle with errorbars,\\\n", ctx->fname2 ); else { fprintf( ctx->fp, "plot '%s' using 4:5 notitle with ", ctx->fname2 );/* Where is the configure test for this? */ #ifdef GNUVERSION_HAS_BOXES fprintf( ctx->fp, "boxes,\\\n\'%s' using 4:7 with lines", ctx->fname2 );#else fprintf( ctx->fp, "lines" );#endif } if (r > 0.0) { fprintf( ctx->fp, ",\\\n%f+%f*x with dots\n", s*1.0e6, r*1.0e6 ); } else { fprintf( ctx->fp, "\n" ); }}void DrawGopGnuplot( GraphData ctx, int first, int last, double s, double r, int nsizes, int *sizelist ){ int i; fprintf( ctx->fp, "plot " ); for (i=0; i<nsizes; i++) {#ifdef GNUVERSION_HAS_BOXES fprintf( ctx->fp, "'%s' using 1:%d title '%d' with boxes%s\n\'%s' using 1:%d with lines,\\\n", ctx->fname2, i+2, sizelist[i], ctx->fname2, i+2, (i == nsizes-1) ? "" : ",\\" );#else fprintf( ctx->fp, "'%s' using 1:%d title '%d' with lines%s\n", ctx->fname2, i+2, sizelist[i], (i == nsizes-1) ? "" : ",\\" );#endif }}/* Generate an end-of-page */void EndPageGnuplot( GraphData ctx ){ if (ctx->is_lastwindow) { if (ctx->output_type == GRF_X) fprintf( ctx->fp, "pause -1 \"Press <return> to continue\"\nclear\n" ); else fprintf( ctx->fp, "exit\n" ); }}/* Common operations */void HeaderGraph( GraphData ctx, char *protocol_name, char *title_string, char *units ){ (*ctx->header)( ctx, protocol_name, title_string, units );}void HeaderForGopGraph( GraphData ctx, char *protocol_name, char *title_string, char *units ){ (*ctx->headergop)( ctx, protocol_name, title_string, units );}void DrawGraph( GraphData ctx, int first, int last, double s, double r ){ (*ctx->draw)( ctx, first, last, s, r ) ;}void DrawGraphGop( GraphData ctx, int first, int last, double s, double r, int nsizes, int *sizelist ){ (*ctx->drawgop)( ctx, first, last, s, r, nsizes, sizelist ) ;}void EndPageGraph( GraphData ctx ){ (*ctx->endpage)( ctx );}#define MAX_TSTRING 1024/* Common create */GraphData SetupGraph( int *argc, char *argv[] ){ GraphData new; char filename[1024]; int wsize[2]; int isgnu; int givedy; static char tstring[MAX_TSTRING]; OutputForm output_type = GRF_X; new = (GraphData)malloc(sizeof(struct _GraphData)); if (!new)return 0;; filename[0] = 0; isgnu = SYArgHasName( argc, argv, 1, "-gnuplot" ); if (!isgnu) { if ((isgnu = SYArgHasName( argc, argv, 1, "-gnuploteps" ))) { output_type = GRF_EPS; }; } if (!isgnu) { if ((isgnu = SYArgHasName( argc, argv, 1, "-gnuplotps" ))) { output_type = GRF_PS; }; } if (SYArgHasName( argc, argv, 1, "-cit" )) isgnu = 0; if (SYArgGetString( argc, argv, 1, "-fname", filename, 1024 ) && __MYPROCID == 0) { new->fp = fopen( filename, "a" ); if (!new->fp) { fprintf( stderr, "Could not open file %s\n", filename ); return 0; } } else new->fp = stdout; givedy = SYArgHasName( argc, argv, 1, "-givedy" ); new->do_rate = SYArgHasName( argc, argv, 1, "-rate" ); new->do_fit = SYArgHasName( argc, argv, 1, "-fit" ); if (SYArgGetString( argc, argv, 1, "-title", tstring, MAX_TSTRING )) new->title = tstring; else new->title = 0;/* Graphics layout */ new->wxi = 1; new->wxn = 1; new->wyi = 1; new->wyn = 1; new->givedy = givedy; if (SYArgGetIntVec( argc, argv, 1, "-wx", 2, wsize )) { new->wxi = wsize[0]; new->wxn = wsize[1]; } if (SYArgGetIntVec( argc, argv, 1, "-wy", 2, wsize )) { new->wyi = wsize[0]; new->wyn = wsize[1]; } new->is_lastwindow = SYArgHasName( argc, argv, 1, "-lastwindow" ); if (new->wxn == 1 && new->wyn == 1) new->is_lastwindow = 1; /* Scaling type */ new->is_log = 0; new->output_type = output_type; if (!isgnu) { new->header = HeaderCIt; new->dataout = DataoutGraph; new->headergop = HeaderForGopCIt; new->dataoutgop = DataoutGraphForGop; new->draw = DrawCIt; new->drawgop = DrawGopCIt; new->endpage = EndPageCIt; new->fpdata = new->fp; new->fname2 = 0; } else { char filename2[256]; new->header = HeaderGnuplot; new->dataout = DataoutGraph; new->headergop = HeaderForGopGnuplot; new->dataoutgop = DataoutGraphForGop; new->draw = DrawGnuplot; new->drawgop = DrawGopGnuplot; new->endpage = EndPageGnuplot; if (filename[0]) { /* Try to remove the extension, if any, from the filename */ char *p; strcpy( filename2, filename ); p = filename2 + strlen(filename2) - 1; while (p > filename2 && *p != '.') p--; if (p > filename2) strcpy( p, ".gpl" ); else strcat( filename2, ".gpl" ); } else { strcpy( filename2, "mppout.gpl" ); } new->fpdata = fopen( filename2, "a" ); if (!new->fpdata) { fprintf( stderr, "Could not open file %s\n\used for holding data for GNUPLOT\n", filename2 ); return 0; } new->fname2 = (char *)malloc((unsigned)(strlen(filename2 ) + 1 )); strcpy( new->fname2, filename2 ); } return new;}void DataScale( GraphData ctx, int isLog ){ ctx->is_log = isLog;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -