Esempio n. 1
0
/* ------------------------------------------------------------------------------------ */
void *doAll(void *ptr) {
  if (ptr) {
    if (recvr) GASNET_BLOCKUNTIL(done);
  } else {
    doAMShort();
    doAMMed();
    doAMLong();
    doAMLongAsync();
    if (recvr) GASNET_Safe(gasnet_AMRequestShort0(mynode, hidx_done_shorthandler));
  }
  return NULL;
}
Esempio n. 2
0
/* ------------------------------------------------------------------------------------ */
void doAMShort(void) {
    GASNET_BEGIN_FUNCTION();

    if (sender) { /* warm-up */
      flag = 0;                                                                                  
      for (i=0; i < iters; i++) {
        GASNET_Safe(gasnet_AMRequestShort0(peer, hidx_ping_shorthandler_flood));
      }
      GASNET_BLOCKUNTIL(flag == iters);
      GASNET_Safe(gasnet_AMRequestShort0(peer, hidx_ping_shorthandler));
      GASNET_BLOCKUNTIL(flag == iters+1);
    }
    BARRIER();
    /* ------------------------------------------------------------------------------------ */
    if (TEST_SECTION_BEGIN_ENABLED() && sender) {
      int64_t start = TIME();
      flag = -1;
      for (i=0; i < iters; i++) {
        GASNET_Safe(gasnet_AMRequestShort0(peer, hidx_ping_shorthandler));
        GASNET_BLOCKUNTIL(flag == i);
      }
      report("        AMShort     ping-pong roundtrip ReqRep",TIME() - start, iters, 0, 1);
    }

    BARRIER();
    /* ------------------------------------------------------------------------------------ */
    if (TEST_SECTION_ENABLED()) {
      int64_t start = TIME();
      flag = -1;
      BARRIER();
      if (sender && recvr) {
        assert(peer == mynode);
        for (i=0; i < iters; i++) {
          int lim = i << 1;
          GASNET_Safe(gasnet_AMRequestShort0(peer, hidx_pong_shorthandler));
          GASNET_BLOCKUNTIL(flag == lim);
          lim++;
          GASNET_Safe(gasnet_AMRequestShort0(peer, hidx_pong_shorthandler));
          GASNET_BLOCKUNTIL(flag == lim);
        }
      } else if (sender) {
        for (i=0; i < iters; i++) {
          GASNET_Safe(gasnet_AMRequestShort0(peer, hidx_pong_shorthandler));
          GASNET_BLOCKUNTIL(flag == i);
        }
      } else if (recvr) {
        for (i=0; i < iters; i++) {
          GASNET_BLOCKUNTIL(flag == i);
          GASNET_Safe(gasnet_AMRequestShort0(peer, hidx_pong_shorthandler));
        }
      }
      report("        AMShort     ping-pong roundtrip ReqReq",TIME() - start, iters, 0, 1);

    if (mynode == 0) { printf("\n"); fflush(stdout); }
    }
    BARRIER();
    /* ------------------------------------------------------------------------------------ */
   if (TEST_SECTION_ENABLED()) {
    if (sender) {
      int64_t start = TIME();
      flag = 0;
      BARRIER();
      for (i=0; i < iters; i++) {
        GASNET_Safe(gasnet_AMRequestShort0(peer, hidx_pong_shorthandler_flood));
      }
      if (recvr) GASNET_BLOCKUNTIL(flag == iters);
      BARRIER();
      report("        AMShort     flood     one-way   Req",TIME() - start, iters, 0, 0);
    } else {
      flag = 0;
      BARRIER();
      GASNET_BLOCKUNTIL(flag == iters);
      BARRIER();
    }

    if (mynode == 0) { printf("\n"); fflush(stdout); }
   }
    BARRIER();
    /* ------------------------------------------------------------------------------------ */
    if (TEST_SECTION_ENABLED() && sender) {
      int64_t start = TIME();
      flag = 0;
      for (i=0; i < iters; i++) {
        GASNET_Safe(gasnet_AMRequestShort0(peer, hidx_ping_shorthandler_flood));
      }
      GASNET_BLOCKUNTIL(flag == iters);
      report("        AMShort     flood     roundtrip ReqRep",TIME() - start, iters, 0, 1);

      if (mynode == 0) { printf("\n"); fflush(stdout); }
    }
    BARRIER();
}
Esempio n. 3
0
static void * doTest(void *arg) {
    int warmups = MIN(100, iters/100);
    int64_t start,total;
    int result;
    int i = 0;

    if (arg) {
        /* I am a polling thread */
        GASNET_BLOCKUNTIL(done);
        return NULL;
    }

    /* Warmup Named */
    for (i=0; i < warmups; i++) {
        my_barrier_notify(i, 0);
        GASNET_Safe(my_barrier_wait(i, 0));
        assert_always(!gasnet_barrier_result(&result));
    }

    BARRIER();
    start = TIME();
    for (i=0; i < iters; i++) {
        my_barrier_notify(i, 0);
        GASNET_Safe(my_barrier_wait(i, 0));
    }
    total = TIME() - start;

    BARRIER();

    if (mynode == 0) {
        printf("Total time: %8.3f sec  Avg Named Barrier latency: %8.3f us\n",
               ((float)total)/1000000, ((float)total)/iters);
        fflush(stdout);
    }
    BARRIER();

    /* Warmup Anonymous */
    for (i=0; i < warmups; i++) {
        my_barrier_notify(0, GASNET_BARRIERFLAG_ANONYMOUS);
        GASNET_Safe(my_barrier_wait(0, GASNET_BARRIERFLAG_ANONYMOUS));
        assert_always(gasnet_barrier_result(&result));
    }

    BARRIER();
    start = TIME();
    for (i=0; i < iters; i++) {
        my_barrier_notify(0, GASNET_BARRIERFLAG_ANONYMOUS);
        GASNET_Safe(my_barrier_wait(0, GASNET_BARRIERFLAG_ANONYMOUS));
    }
    total = TIME() - start;

    BARRIER();

    if (mynode == 0) {
        printf("Total time: %8.3f sec  Avg Anon. Barrier latency: %8.3f us\n",
               ((float)total)/1000000, ((float)total)/iters);
        fflush(stdout);
    }
    BARRIER();

    if (!PERFORM_MIXED_NAMED_ANON_TESTS) {
        if (mynode == 0) {
            MSG("WARNING: skipping tests which mix named and anonymous barriers, "
                "which are known to fail in this configuration");
        }
    } else {
        int parity = (mynode & 1);

        /* Warmup Mixed */
        for (i=0; i < warmups; i++, parity ^= 1) {
            int value = parity ? iters : 0;
            int flags = parity ? 0 : GASNET_BARRIERFLAG_ANONYMOUS;
            my_barrier_notify(value, flags);
            GASNET_Safe(my_barrier_wait(value, flags));
            assert_always(!gasnet_barrier_result(&result) || (nodes == 1));
        }

        BARRIER();
        start = TIME();
        for (i=0; i < iters; i++, parity ^= 1) {
            int value = parity ? iters : 0;
            int flags = parity ? 0 : GASNET_BARRIERFLAG_ANONYMOUS;
            my_barrier_notify(value, flags);
            GASNET_Safe(my_barrier_wait(value, flags));
        }
        total = TIME() - start;

        BARRIER();

        if (mynode == 0) {
            printf("Total time: %8.3f sec  Avg Mixed Barrier latency: %8.3f us\n",
                   ((float)total)/1000000, ((float)total)/iters);
            fflush(stdout);
        }
    }
    BARRIER();

#if TEST_UNNAMED_BARRIER
    /* Warmup Unnamed */
    for (i=0; i < warmups; i++) {
        my_barrier_notify(0, GASNET_BARRIERFLAG_UNNAMED);
        GASNET_Safe(my_barrier_wait(0, GASNET_BARRIERFLAG_UNNAMED));
        assert_always(gasnet_barrier_result(&result));
    }

    BARRIER();
    start = TIME();
    for (i=0; i < iters; i++) {
        my_barrier_notify(0, GASNET_BARRIERFLAG_UNNAMED);
        GASNET_Safe(my_barrier_wait(0, GASNET_BARRIERFLAG_UNNAMED));
    }
    total = TIME() - start;

    BARRIER();

    if (mynode == 0) {
        printf("Total time: %8.3f sec  Avg Uname Barrier latency: %8.3f us\n",
               ((float)total)/1000000, ((float)total)/iters);
        fflush(stdout);
    }
    BARRIER();
#endif

    GASNET_Safe(gasnet_AMRequestShort0(mynode, hidx_done_shorthandler));
    return NULL;
}