Exemplo n.º 1
0
void insert_work_for_one_element(struct element *el)
{
    starpu_data_handle_t tmp_recv;
    starpu_data_handle_t tmp_send;

    starpu_vector_data_register(&tmp_recv, -1, 0, el->tag, sizeof(int));
    starpu_vector_data_register(&tmp_send, -1, 0, el->tag, sizeof(int));

    //Emulate the work to fill the send buffer
    starpu_insert_task(&fill_tmp_buffer_cl,
                       STARPU_W,tmp_send,
                       0);
    //Send operation
    starpu_insert_task(&submitted_order,
                       STARPU_RW,el->ensure_submitted_order_send,
                       STARPU_W,tmp_send,
                       0);
    starpu_mpi_isend_detached(tmp_send,el->foreign_domain,el->tag, MPI_COMM_WORLD, NULL, NULL);

    //Recv operation for current element
    starpu_insert_task(&submitted_order,
                       STARPU_RW,el->ensure_submitted_order_recv,
                       STARPU_W,tmp_recv,
                       0);
    starpu_mpi_irecv_detached(tmp_recv,el->foreign_domain,el->tag, MPI_COMM_WORLD, NULL, NULL);
    //Emulate the "reading" of the recv value.
    starpu_insert_task(&read_ghost_value_cl,
                       STARPU_R,tmp_recv,
                       0);

    starpu_data_unregister_submit(tmp_send);
    starpu_data_unregister_submit(tmp_recv);
}
Exemplo n.º 2
0
void render() {
  starpu_data_register(seeds, ...)

  starpu_insert_task(codelets::init_seeds, seeds);

  int iteration = 0;
  while(iteration < config.max_iters) {
    starpu_data_register(eye_paths, ...)
    starpu_insert_task(codelets::generate_eye_paths, eye_paths, seeds);
    starpu_data_register(hit_points, ...)
    starpu_insert_task(codelets::advance_eye_paths,  eye_paths, seeds, hit_points);
    starpu_data_unregister_submit(eye_paths);

    ... // all other tasks for this iteration

    starpu_data_unregister_submit(hit_points);

    iteration++;
  }

  starpu_data_unregister(seeds);
}