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; }
inline int qthread_readFE(T *const dest, const T *const src) { QTHREAD_CHECKSIZE(T); return qthread_readFE((aligned_t *)dest, (aligned_t *)src); }
/* * 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; }
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 }
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; }
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; }