コード例 #1
0
ファイル: sinc_null.c プロジェクト: Agobin/chapel
static aligned_t visit(void *arg_)
{
    v_args_t *arg = (v_args_t *)arg_;

    if (arg->depth > 2) {
        /* I'm an internal node. */
        v_args_t args = { arg->depth - 1, arg->sinc };

        qt_sinc_expect(arg->sinc, 2);
        qthread_fork_syncvar_copyargs(visit, &args, sizeof(v_args_t), NULL);
        qthread_fork_syncvar_copyargs(visit, &args, sizeof(v_args_t), NULL);

        qt_sinc_submit(arg->sinc, NULL);
    } else if (arg->depth == 2) {
        /* I'm going to spawn leaf nodes. */
        v_args_t args = { arg->depth - 1, arg->sinc };

        qt_sinc_expect(arg->sinc, 2);
        qthread_fork_syncvar_copyargs(visit, &args, sizeof(v_args_t), NULL);
        qthread_fork_syncvar_copyargs(visit, &args, sizeof(v_args_t), NULL);

        qt_sinc_submit(arg->sinc, NULL);
    } else {
        /* I'm a leaf node. */
        qt_sinc_submit(arg->sinc, NULL);
    }

    return 0;
}
コード例 #2
0
ファイル: sinc_workers.c プロジェクト: RaftLib/qthreads
aligned_t fib(void *args_){
  args_t* args = (args_t*)args_;
  if(args->i < 2){
    *args->ret = 1;
    qt_sinc_submit(args->s, NULL);
    return 0;
  }
  int x, y;
  qt_sinc_t sinc;
  qt_sinc_init(&sinc, 0, NULL, NULL, 2);

  args_t argsx = { args->i-1, &sinc, &x };
  args_t argsy = { args->i-2, &sinc, &y };

  qthread_fork_copyargs(fib, &argsx, sizeof(args_t), NULL);
  qthread_fork_copyargs(fib, &argsy, sizeof(args_t), NULL);

  qt_sinc_wait(&sinc, NULL);
  qt_sinc_submit(args->s, NULL);
  *args->ret  = x + y;
  return 0;
}
コード例 #3
0
ファイル: net.c プロジェクト: deniskin82/chapel
static void return_msg_sinc_handler(int    tag,
                                    void  *start,
                                    size_t len)
{
    struct return_msg_t *msg = (struct return_msg_t *)start;

    qthread_debug(MULTINODE_FUNCTIONS, "[%d] begin return_msg_sinc_handler 0x%lx, %ld\n",
                  my_rank, (unsigned long)msg->return_addr, msg->return_val);

    qt_sinc_submit((qt_sinc_t *)msg->return_addr, NULL);

    qthread_debug(MULTINODE_FUNCTIONS, "[%d] end return_msg_sinc_handler\n",
                  my_rank);
}
コード例 #4
0
ファイル: sinc_null.c プロジェクト: Agobin/chapel
static aligned_t submit_to_sinc(void *arg_)
{
    qt_sinc_submit((qt_sinc_t *)arg_, NULL);

    return 0;
}