示例#1
0
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;
}
示例#2
0
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);
}