Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2013
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.64 KB | None | 0 0
  1.    std::function<void (event &)>
  2.    kernel_op(cl_command_queue q, cl_kernel kern,
  3.              const std::vector<size_t> &grid_offset,
  4.              const std::vector<size_t> &grid_size,
  5.              const std::vector<size_t> &block_size) {
  6.       const std::vector<size_t> reduced_grid_size = map(
  7.          std::divides<size_t>(), grid_size.begin(), grid_size.end(),
  8.          block_size.begin());
  9.  
  10.       return [=](event &) {
  11.          kern->launch(*q, grid_offset, reduced_grid_size, block_size);
  12.       };
  13.    }
  14.  
  15.  
  16. -----------------------------
  17.  
  18. hard_event *hev = new hard_event(
  19.       *q, CL_COMMAND_NDRANGE_KERNEL, { deps, deps + num_deps },
  20.       kernel_op(q, kern, grid_offset, grid_size, block_size));
  21.  
  22.  
  23. ------------------------------------
  24.  
  25. hard_event::hard_event(clover::command_queue &q, cl_command_type command,
  26.                        std::vector<clover::event *> deps, action action) :
  27.    _cl_event(q.ctx, deps, action, [](event &ev){}),
  28.    __queue(q), __command(command), __fence(NULL) {
  29.    q.sequence(this);
  30.    trigger();
  31. }
  32.  
  33.  
  34. -------------------------------------------
  35.  
  36. _cl_event::_cl_event(clover::context &ctx,
  37.                      std::vector<clover::event *> deps,
  38.                      action action_ok, action action_fail) :
  39.    ctx(ctx), __status(0), wait_count(1),
  40.    action_ok(action_ok), action_fail(action_fail) {
  41.    for (auto ev : deps)
  42.       ev->chain(this);
  43. }
  44.  
  45. -------------------------------------------------
  46.  
  47. void
  48. _cl_event::trigger() {
  49.    if (!--wait_count) {
  50.       action_ok(*this);
  51.  
  52.       while (!__chain.empty()) {
  53.          __chain.back()->trigger();
  54.          __chain.pop_back();
  55.       }
  56.    }
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement