Exemplo n.º 1
0
void sbuf_mem(struct sbuf *sbuf, char *s, int len)
{
	if (sbuf->s_n + len + 1 >= sbuf->s_sz)
		sbuf_extend(sbuf, NEXTSZ(sbuf->s_sz, len + 1));
	memcpy(sbuf->s + sbuf->s_n, s, len);
	sbuf->s_n += len;
}
Exemplo n.º 2
0
int main(int argc, char **argv) {
  int dopingpongtest = 0;
  int dofloodtest = 0;
  int dobarriertest = 0;
  int doexchangetest = 0;
  int doqueuetest = 0;
  int iters = -1;

  /* init */
  startupMPI(&argc, &argv);

  /* parse arguments */
  if (argc < 2) Usage(argv[0]);
  { char *p;
    for (p = argv[1]; *p; p++) {
      switch(*p) {
        case 'E': case 'e': doexchangetest = 1; break;
        case 'P': case 'p': dopingpongtest = 1; break;
        case 'F': case 'f': dofloodtest = 1; break;
        case 'B': case 'b': dobarriertest = 1; break;
        case 'Q': case 'q': doqueuetest = 1; break;
        default: Usage(argv[0]);
      }
    }
  }
  if (argc > 2) iters = atoi(argv[2]);
  else iters = 10000;
  if (iters <= 0) Usage(argv[0]);

  if (argc > 3) queuedepth = atoi(argv[3]);
  else queuedepth = 64;
  if (queuedepth <= 0) Usage(argv[0]);


  if (dobarriertest) { /* barrier test */
    double totaltime;
    if (rank == 0) {
      printf("=====> testmpiperf-barrier nprocs=%d config=MPI\n", nproc);
      printf("running %i iterations of barrier test...\n", iters);
      fflush(stdout);
    }
    
    barriertest(1); /* "warm-up" run */

    totaltime = barriertest(iters);
    if (rank == 0) {
      printf("barrier latency= %9.3f us, totaltime= %9.3f sec\n",
        totaltime/iters, totaltime/1000000);
      fflush(stdout);
    }
    barrier();
  }
  barrier();
  if (dopingpongtest) { /* ping-pong test */
    if (rank == 0) {
      printf("=====> testmpiperf-pingpong nprocs=%d config=MPI\n", nproc);
      printf("running %i iterations of ping-pong %s test (%s-byte ack)...\n", iters,
          (USE_ISEND ? "MPI_ISend/MPI_IRecv" : "MPI_Send/MPI_IRecv"),
          (USE_ZERO_BYTE_ACK?"0":"N"));
      fflush(stdout);
    }
    barrier();

    { int msgsz;
      for (msgsz = FIRSTSZ(); !DONESZ(msgsz); msgsz = NEXTSZ(msgsz)) {
        double totaltime;

        pingpongtest(1, msgsz); /* "warm-up" run */
        barrier();
        totaltime = pingpongtest(iters, msgsz);
        barrier();

        if (rank % 2 == 0) {
          printf("P%i-P%i: size=%8i bytes, latency= %9.3f us, bandwidth= %11.3f KB/sec\n",
            rank, peerid, msgsz, 
            totaltime/iters, 
            (((double)msgsz)*iters/KB)/(totaltime/1000000));
          fflush(stdout);
        }
      }
    }
  }
  barrier();
  if (dofloodtest) { /* flood test */
    if (rank == 0) {
      printf("=====> testmpiperf-flood nprocs=%d config=MPI\n", nproc);
      printf("running %i iterations of flood MPI_Isend/MPI_Irecv test per size, with queuedepth=%i...\n", 
        iters, queuedepth);
      printf("Flood test using %s method\n", mpi_testwait_desc);
      fflush(stdout);
    }
    barrier();


    { int msgsz;
      for (msgsz = FIRSTSZ(); !DONESZ(msgsz); msgsz = NEXTSZ(msgsz)) {
        double totaltime;

        floodtest(queuedepth, msgsz); /* "warm-up" run */
        barrier();
        totaltime = floodtest(iters, msgsz);
        barrier();

        if ((rank % 2 == 1) || peerid == rank) { /* report reciever times on flood test */
          printf("P%i-P%i: size=%8i bytes, inv. throughput= %9.3f us, bandwidth= %11.3f KB/sec\n",
            rank, peerid, msgsz, 
            totaltime/iters, 
            (((double)msgsz)*iters/KB)/(totaltime/1000000));
          fflush(stdout);
        }
      }
    }
  }
  fflush(NULL); sleep(1); /* pause for output */
  barrier();
  if (doqueuetest) { /* queue test */
    if (rank == 0) {
      printf("=====> testmpiperf-queue nprocs=%d config=MPI\n", nproc);
      printf("running %i iterations of MPI_Isend queue test per size, with maxqueuedepth=%i...\n", 
        iters, queuedepth);
      { char header[1024];
        char *pheader = header;
        int depth;
        sprintf(pheader, "        "); pheader += strlen(pheader);
        for (depth = 1; depth <= queuedepth; depth *= 2) {
          sprintf(pheader, " %7i", depth); pheader += strlen(pheader);
        }
        printf("%s\n", header);
      }    
      fflush(stdout);
    }
    barrier();


    { int msgsz;
      for (msgsz = FIRSTSZ(); !DONESZ(msgsz); msgsz = NEXTSZ(msgsz)) {
        double totaltime;

        queuetest(1, msgsz, 0); /* "warm-up" run */
        barrier();
        queuetest(iters, msgsz, 1);
        barrier();

      }
    }
  }
  fflush(NULL); sleep(1); /* pause for output */
  barrier();
  if (doexchangetest) { /* Exchange (all-to-all) test */
    if (rank == 0) {
      printf("=====> testmpiperf-exchange nprocs=%d config=MPI\n", nproc);
      printf("running %i iterations of exchange test per size\n", iters);
      fflush(stdout);
    }
    barrier();

    { int msgsz;
      for (msgsz = FIRSTSZ(); !DONESZ(msgsz*nproc); msgsz = NEXTSZ(msgsz)) {
        double totaltime;

	exchangetest(1, msgsz); /* "warm-up" run */
        barrier();
        totaltime = exchangetest(iters, msgsz);
        barrier();

        printf("P%i-P%i: size=%8i bytes, inv. throughput= %9.3f us, bandwidth= %11.3f KB/sec\n",
            rank, peerid, msgsz, 
            totaltime/iters, 
            (((double)msgsz*nproc)*iters/KB)/(totaltime/1000000));
          fflush(stdout);
      }
    }
  }

  barrier();


  shutdownMPI();
  return 0;
}
Exemplo n.º 3
0
void sbuf_chr(struct sbuf *sbuf, int c)
{
	if (sbuf->s_n + 2 >= sbuf->s_sz)
		sbuf_extend(sbuf, NEXTSZ(sbuf->s_sz, 1));
	sbuf->s[sbuf->s_n++] = c;
}