int main(int argc, char *argv[]) { int i; int num_threads = 0; gaspi_size_t segSize; TSUITE_INIT(argc, argv); ASSERT (gaspi_proc_init(GASPI_BLOCK)); ASSERT(gaspi_threads_init(&num_threads)); ASSERT (gaspi_proc_num(&numranks)); ASSERT (gaspi_proc_rank(&myrank)); ASSERT (gaspi_segment_create(0, _128MB, GASPI_GROUP_ALL, GASPI_BLOCK, GASPI_MEM_INITIALIZED)); ASSERT( gaspi_segment_size(0, myrank, &segSize)); for(i = 1; i < num_threads; i++) ASSERT(gaspi_threads_run(thread_fun, NULL)); thread_fun(NULL); ASSERT (gaspi_barrier(GASPI_GROUP_ALL, GASPI_BLOCK)); ASSERT (gaspi_proc_term(GASPI_BLOCK)); return EXIT_SUCCESS; }
void thread_fun(void *p) { struct thread_fun_params tp_next, *tp = (struct thread_fun_params*) p; assert(p != &tp_next); thread_yield(); if (tp->start <= tp->end) { printf("Thread %d on %d\n", tp->id, tp->start); tp_next = *tp; tp_next.start += tp->stride; thread_fun(&tp_next); assert(tp->start == tp_next.start - tp_next.stride); } thread_exit(NULL); }