コード例 #1
0
ファイル: net.c プロジェクト: deniskin82/chapel
int qthread_multinode_run(void)
{
    aligned_t val;

    if (0 == initialized) { return 1; }

    qthread_debug(MULTINODE_CALLS, "[%d] begin qthread_multinode_run\n", my_rank);

    qthread_internal_net_driver_barrier();

    if (0 != my_rank) {
        struct die_msg_t msg;

        qthread_readFE(&val, &time_to_die);
        qthread_debug(MULTINODE_DETAILS, "[%d] time to die\n", my_rank);
        msg.my_rank = my_rank;
        qthread_internal_net_driver_send(0, DIE_MSG_TAG, &msg, sizeof(msg));
        qthread_finalize();
        exit(0);
    }

    qthread_debug(MULTINODE_CALLS, "[%d] end qthread_multinode_run\n", my_rank);

    return QTHREAD_SUCCESS;
}
コード例 #2
0
ファイル: qthread.hpp プロジェクト: jcazzie/chapel
inline int qthread_readFE(T *const       dest,
                          const T *const src)
{
    QTHREAD_CHECKSIZE(T);
    return qthread_readFE((aligned_t *)dest,
                          (aligned_t *)src);
}
コード例 #3
0
ファイル: feb_stream.c プロジェクト: Agobin/chapel
/*
 * The readFromBuff() iterator simply reads values from the shared buffer
 * starting at the 0th position and yields them.
 */
static int64_t readFromBuff(void)
{
    static unsigned int ind = 0;
    saligned_t nextVal;

    qthread_readFE((aligned_t*)&nextVal, &buff[ind]);
    if (nextVal != -1) {
        ind = (ind + 1) % bufferSize;
    }
    return nextVal;
}
コード例 #4
0
ファイル: util.hpp プロジェクト: Auguraculums/graphdb-testing
T mt_readfe(T& target)
{
#ifdef __MTA__
  return readfe(&target);
#elif USING_QTHREADS
  T ret;
  qthread_readFE(&ret, &target);
  return ret;
#else
  return target;
#endif
}
コード例 #5
0
int main(int argc,
         char *argv[])
{
    CHECK_VERBOSE();

    aligned_t tmp, ret = 0;
    int retval;
    long foobar = 1234567890;

    setenv("QT_MULTINODE","yes",1);

    qthread_initialize();

    my_id = qthread_multinode_rank();
    world_size = qthread_multinode_size();

    iprintf("(%03d) Rank %d of %d is alive\n", my_id, my_id, world_size);

    retval = qthread_multinode_register(2, returner);
    if (retval != 0){
        fprintf(stderr, "(%03d) multinode_register returned %d\n", my_id, retval);
        return 1;
    }

    qthread_multinode_run();
    if (my_id != 0) return 2;

    int target = (world_size > 1) ? 1 : 0;
    retval = qthread_fork_remote(returner, &foobar, &ret, target, sizeof(long));
    if (retval != 0) {
        fprintf(stderr, "(%03d) fork_remote returned %d\n", my_id, retval);
        return 3;
    }

    retval = qthread_readFE(&tmp, &ret);
    iprintf("(%03d) returner returned %ld\n", my_id, (long) tmp);
    if (retval != 0) {
        fprintf(stderr, "(%03d) readFE returned %d (%d)\n", my_id, retval, (int) tmp);
        return 4;
    }

    qthread_finalize();

    return (tmp == foobar) ? 0 : 5;
}
コード例 #6
0
ファイル: spr_init.c プロジェクト: Agobin/chapel
int main(int   argc,
         char *argv[])
{
    aligned_t tmp, ret = 0;
    int       retval;
    long      foobar   = 1234567890;
    qthread_f funcs[2] = { returner, NULL };

    CHECK_VERBOSE();

    retval = spr_init(SPR_SPMD, funcs);
    if (retval != SPR_OK) {
        fprintf(stderr, "(%03d) spr_init returned %d\n", 0, retval);
        return -1;
    }

    my_id      = spr_locale_id();
    world_size = spr_num_locales();

    iprintf("(%03d) Rank %d of %d is alive\n", my_id, my_id, world_size);

    spr_unify();

    if (my_id != 0) {
        return -2;
    }

    int target = (world_size > 1) ? 1 : 0;
    retval = qthread_fork_remote(returner, &foobar, &ret, target, sizeof(long));
    if (retval != 0) {
        fprintf(stderr, "(%03d) fork_remote returned %d\n", my_id, retval);
        return -3;
    }

    retval = qthread_readFE(&tmp, &ret);
    iprintf("(%03d) returner returned %ld\n", my_id, (long)tmp);
    if (retval != 0) {
        fprintf(stderr, "(%03d) readFE returned %d (%d)\n", my_id, retval, (int)tmp);
        return -4;
    }

    spr_fini();

    return (tmp == foobar) ? 0 : 5;
}